basePath を /homepage2 にして S3 へ静的デプロイする要約(TL;DR):next.config.mjs に basePath:'/homepage2' を指定し、静的出力向けのオプション(assetPrefix、output:'export'、trailingSlash、images.unoptimized)をセット。pnpm build && pnpm exec next export で out/ を生成し、aws s3 sync で s3://{bucket}/homepage2/ へアップロード。S3静的ホスティングで Index/404 を設定すればOK。画像や fetch の絶対パスは basePath に合わせて修正。
/homepage2 にしたい(サブディレクトリ運用)next.config.mjs の設定/** @type {import('next').NextConfig} */
export default {
basePath: '/homepage2',
assetPrefix: '/homepage2/', // サブディレクトリ配信の静的サイトでは実質必須
output: 'export', // 静的エクスポート
trailingSlash: true, // S3 では末尾スラッシュ運用が安全
images: { unoptimized: true }, // next/image を静的化
};
ポイント: basePath はアプリのルートを /homepage2 にシフトします。assetPrefix を合わせて指定すると、ビルド済み静的アセット(_next/static など)も /homepage2 配下で参照され、S3のサブディレクトリ運用と噛み合います。
next/link を使えば自動で /homepage2 が付与されるので、<Link href="/about"> のように 素直にルートから 書く(/homepage2/about と手書きしない)。next/image を推奨。もし生の <img src="/logo.png"> を使うなら basePath を付与する。
import { useRouter } from 'next/router';
const { basePath } = useRouter();
// 例:
<img src={`${basePath}/logo.png`} alt="logo" />
fetch('/api/xxx') は basePath が付かずドメイン直下を指すためNG。
import { useRouter } from 'next/router';
const { basePath } = useRouter();
await fetch(`${basePath}/api/hello`);
pnpm build
pnpm exec next export -o out
生成物は out/ 直下に index.html(および各ページの /path/index.html)が並び、参照パスは /homepage2 前提で吐き出されます。
homepage2/ プレフィックス)バケット例:my-site-bucket。S3 上では homepage2/ フォルダに静的ファイルを置きます。
aws s3 sync ./out/ s3://my-site-bucket/homepage2/ --delete
index.htmlindex.html(SPAルーティングを維持したい場合)公開URL例:http://<bucket>.s3-website-<region>.amazonaws.com/homepage2/
補足: サブディレクトリ単位で 404 => /homepage2/index.html にリダイレクトしたい場合は、S3の「ルーティングルール」で /homepage2/* を /homepage2/index.html に流すルールを追加すると堅牢です。
S3直公開ならオブジェクトのパブリックリードが必要です(バケットポリシー or ACL)。継続運用では、_next/static は長めのキャッシュ、それ以外は短め/無効化などの使い分けが有効です:
# ビルド済み静的アセットは長めに
aws s3 cp out/_next/ s3://my-site-bucket/homepage2/_next/ --recursive --cache-control "public,max-age=31536000,immutable"
# HTMLは即時反映を優先
aws s3 cp out/ s3://my-site-bucket/homepage2/ --recursive --exclude "_next/*" --cache-control "no-store"
https://example.com/homepage2/xxx)。next-sitemap を使うなら siteUrl を https://example.com/homepage2 に、出力先パスも考慮。
// next-sitemap.config.js
module.exports = {
siteUrl: 'https://example.com/homepage2',
generateRobotsTxt: true,
outDir: 'out', // next export と揃える
transform: async (config, path) => {
// 追加のメタや優先度調整があればここで
return {
loc: path,
changefreq: 'weekly',
priority: 0.7,
lastmod: new Date().toISOString(),
alternateRefs: [],
};
},
};
/homepage2 を含む絶対URLに。next/link を使い、/homepage2 を手書きしない(重複で /homepage2/homepage2/... にならないように)。<Link href="/homepage2/about"> と書いて二重化 → ✅ href="/about"<img src="/logo.png">(basePath未反映) → ✅ src={`${basePath}/logo.png`} か next/imagefetch('/api/foo')(basePath未反映) → ✅ fetch(`${basePath}/api/foo`)trailingSlash 未設定で S3 の /path 直アクセスが 404 → ✅ trailingSlash:trueindex.html にpnpm dev で http://localhost:3000/homepage2 を確認(devサーバ再起動を忘れない)。pnpm build && pnpm exec next export -o out → aws s3 sync → S3ウェブサイトURLで /homepage2/ を確認。package.json スクリプト例{
"scripts": {
"build:static": "next build && next export -o out",
"deploy:s3": "aws s3 sync ./out/ s3://my-site-bucket/homepage2/ --delete",
"deploy:s3:fast": "pnpm build:static && pnpm deploy:s3"
}
}
basePath を /homepage2 に設定し、静的エクスポート + S3 配置の基本を押さえれば、サブディレクトリ運用でもシンプルに公開できます。
.htaccessは階層で引き継がれる?Apacheの挙動を徹底解説
SEO対策に必須!検索上位を狙うsitemap.xmlの完全ガイド
Google Search Consoleの「代替ページ(適切なcanonicalタグあり)」とは?原因と解決法を徹底解説!
Microsoft純正の新しいコンソールエディタ「edit」が復活!| edit.exe インストール方法
Googleサイト確認のTXTレコードをnslookupで確認する方法【SEO対策】
Googleサーチコンソールに反映されるための最低限のSEO構造とは
【Anker Soundcore Liberty 4】イヤーピース紛失!代替品はAmazonで購入
JavaScriptでタイムゾーン変換!UTCとJST(日本時間)の変換方法
git switchの使い方とgit checkoutとの違い
HTMLとJavaScriptモジュールでクラスを定義し、ボタンから呼び出す方法
JavaScriptでTensorFlow.jsを動的に読み込む方法|HTMLに直接書かずに機械学習を実行する
ffmpegでMOVファイルを逆再生する方法【音声付き対応】
Windows 11でタスクマネージャー以外からアプリを終了させる方法【PowerShell・コマンドプロンプト】
JavaScriptでPCの空き容量やメモリ量を取得できる?Chromeの制限と代替手法
PowerShellでNode.jsの最新バージョン一覧を確認する方法【Volta/Windows対応】
Next.jsでbasePathを/homepage2にしてS3へ静的デプロイする完全手順
NextAuthなし・APIルートなしで実装:Next.js + AWS Amplify だけでメール/パスワード認証を完結する方法
「Next.js pnpm build (ビルド)後の出力ファイルが見当たらない」トラブルシュート&静的デプロイ
AWS Amplify CLIでS3やZIPから手動デプロイ【実行コマンド付き】
GraphQL接続の落とし穴:Amplify Hosting(amplifyapp.com) vs S3+Next.js(静的書き出し)比較