目次
Next.jsで作ったサイトをGoogle Search Consoleに登録したら、「サイトマップを取得できませんでした」というエラーが出て困った経験はありませんか?今回はその原因と解決方法を紹介します。
エラーの詳細
Search Consoleでサイトマップを送信すると、以下のようなエラーが表示されることがあります:
ステータス: サイトマップを取得できませんでした
一般的な HTTP エラー
HTTP エラー: 404
ブラウザではsitemap.xml
にアクセスできるのに、なぜかSearch Consoleではエラーになってしまう...そんな状況です。
原因1: ビルドコマンドの設定ミス
問題のパターン
Cloudflare PagesやVercelなどのホスティングサービスで、ビルドコマンドが正しく設定されていない場合があります。
例えば、以下のようなビルドコマンドだとサイトマップが生成されません:
npx next build
解決方法
package.json
のbuildスクリプトを確認し、next-sitemapが含まれているか確認します:
{
"scripts": {
"build": "next build && next-sitemap --config next-sitemap.config.js"
}
}
ホスティングサービスのビルドコマンドを以下に変更:
npm run build
原因2: サイトマップの生成場所
問題のパターン
Next.jsの静的エクスポート(next export
)を使用している場合、サイトマップがout
ディレクトリに生成されますが、public
ディレクトリを探してしまうことがあります。
確認方法
プロジェクトのルートで以下を実行:
ls -la out/sitemap*
ls -la public/sitemap*
解決方法
next-sitemap.config.js
でoutDirが正しく設定されているか確認:
module.exports = {
siteUrl: 'https://your-domain.com',
generateRobotsTxt: true,
outDir: './out', // 静的エクスポートの場合
}
原因3: ビルド出力ディレクトリの設定
問題のパターン
Cloudflare Pagesなどで、ビルド出力ディレクトリが正しく設定されていない場合があります。
解決方法
ホスティングサービスの設定で、ビルド出力ディレクトリを確認:
- Cloudflare Pages: ビルド出力を
out
に設定 - Vercel: 自動検出されるが、必要に応じて設定
- Netlify:
_redirects
やnetlify.toml
で設定
実際の解決手順
私の場合、以下の手順で解決しました:
1. ビルドコマンドの修正
Cloudflare Pagesの設定で、ビルドコマンドを変更:
変更前: npx next build
変更後: npm run build
2. 再ビルドとデプロイ
設定を保存すると自動的に再ビルドが開始されます。
3. サイトマップの確認
ブラウザでhttps://your-domain.com/sitemap.xml
にアクセスして、正しく表示されることを確認。
4. Search Consoleで再送信
- 古いサイトマップを削除
- 新しくサイトマップを送信
- URL検査でサイトマップURLを検査
- ステータスが「成功しました」に変わることを確認
デバッグのヒント
サイトマップが生成されているか確認
ビルドログを確認して、next-sitemapが実行されているか確認:
✓ Generating static pages
✓ Finalizing page optimization
✓ Collecting build traces
✅ Generated sitemap
直接アクセスして確認
以下のURLパターンを試してみてください:
https://your-domain.com/sitemap.xml
https://your-domain.com/sitemap-0.xml
https://your-domain.com/sitemap_index.xml
まとめ
「サイトマップを取得できませんでした」エラーの主な原因は:
- ビルドコマンドにnext-sitemapが含まれていない
- ビルド出力ディレクトリの設定ミス
- サイトマップの生成場所の違い
多くの場合、ビルドコマンドをnpm run build
に変更することで解決します。それでも解決しない場合は、ビルドログを確認して、サイトマップが正しく生成されているか確認してみてください。
Search Consoleのエラーは焦りますが、一つずつ確認していけば必ず解決できます!