• #Nuxt
  • #SSG
  • #Google Search Console
  • #SEO
  • #プリレンダリング
開発メモ

Google Search Console 404エラーの原因:Nuxt SSGのcrawlLinksで発見されないページ

結論

2026-02-03に確認予定: Googleが404ページを自動削除するまで2〜4週間かかるため、4週間後(2026-02-03)にSearch Consoleを再確認する。この記事のupdatedAtを確認予定日に設定し、カレンダー表示で見逃さないようにしている。

Nuxt SSGのcrawlLinks: true設定では、どこからもリンクされていないページはプリレンダリングされない。

Google Search Consoleで報告される404エラーは、以下のいずれかが原因:

  1. 以前公開していたページを削除した(サイトマップが古いまま)
  2. コンテンツは存在するが、SSGビルドで発見されていない(リンクがない)
  3. URL構造を変更した(リダイレクト未設定)

推奨対処法

状況対処法理由
意図的に削除した放置Googleは404を認識し、数週間で自動削除
コンテンツはあるが未公開リンクを追加してSSGで発見されるようにするSEO的にもったいない
URL構造変更301リダイレクト設定SEO評価を引き継げる

ほとんどの場合「放置」で問題ない。 Googleは404ページを自動的にインデックスから削除する。急ぐ場合はSearch Consoleから「削除リクエスト」を送信できる。

問題の発見

Google Search Consoleの「ページのインデックス登録」で、39ページが「見つかりませんでした(404)」と報告されていた。

Google Search Console 404エラーレポート

報告されていたURL例:

  • https://log.eurekapu.com/docs/en/build-with-claude/context-windows
  • https://log.eurekapu.com/2025-12-02/koyfin-scraper-spec
  • https://log.eurekapu.com/2025-12-13/ffmpeg-wasm-issue
  • https://log.eurekapu.com/2025-12-10/financial-chart-requirements

調査の経緯

1. ローカルファイルの確認

まずローカルにコンテンツファイルが存在するか確認した。

# 結果:ファイルは存在する
apps/web/content/2025-12/2025-12-02/koyfin-scraper-spec.md
apps/web/content/2025-12/2025-12-13/ffmpeg-wasm-issue.md
apps/web/content/2025-12/2025-12-10/financial-chart-requirements.md

ファイルは存在するが、本番サイトでは404になる。

2. frontmatterのpath確認

各ファイルのfrontmatterを確認:

# koyfin-scraper-spec.md
---
path: "/koyfin-scraper-spec"
title: "Koyfin データ自動取得ツール仕様書"
publishedAt: "2025-12-02"
---

pathフィールドで/koyfin-scraper-specが指定されているので、このURLでアクセスできるはず。

3. サイトマップの確認

# サイトマップに含まれているか確認
# 結果:koyfin-scraper-spec、ffmpeg-wasm-issue、financial-chart-requirementsは含まれていない
# context-windowsはサイトマップに含まれているが、実際にアクセスすると404

サイトマップ自体も実態と乖離していることが判明した。

4. distディレクトリの確認

ビルド成果物を確認:

ls dist/
# 2025-12/  # 存在する
# koyfin-scraper-spec/  # 存在しない!

dist/2025-12/2025-12-02/には画像ファイルのみがコピーされ、HTMLは生成されていなかった。

5. nuxt.config.tsのプリレンダリング設定

// nuxt.config.ts
nitro: {
  prerender: {
    crawlLinks: true,
    routes: ['/blog', '/'],  // ここから開始
  }
}

crawlLinks: trueの動作

  1. //blogからクロール開始
  2. ページ内のリンクをたどって他のページを発見
  3. 発見されたページのみプリレンダリング

つまり、どこからもリンクされていないページは発見されず、ビルドされない

根本原因

content/2025-12/2025-12-02/koyfin-scraper-spec.md
  ↓
frontmatter: path: "/koyfin-scraper-spec"
  ↓
期待されるURL: /koyfin-scraper-spec
  ↓
しかし、どのページからもリンクされていない
  ↓
crawlLinksで発見されない
  ↓
プリレンダリングされない
  ↓
本番で404

対処法の詳細

1. 放置(推奨)

何もしなくても、Googleは404ページを認識し、通常2〜4週間でインデックスから自動削除する。

メリット

  • 作業不要
  • 自然な動作

デメリット

  • Search Consoleに404が表示され続ける(気になる人は気になる)

2. リンクを追加

コンテンツを公開したい場合は、どこかのページからリンクする。

<!-- 例:ブログ一覧ページに追加 -->
<NuxtLink to="/koyfin-scraper-spec">Koyfin データ自動取得ツール仕様書</NuxtLink>

これにより、次回ビルド時にcrawlLinksで発見され、プリレンダリングされる。

3. 明示的にルートを追加

特定のページを強制的にプリレンダリングする場合:

// nuxt.config.ts
nitro: {
  prerender: {
    routes: ['/blog', '/', '/koyfin-scraper-spec'],  // 明示的に追加
  }
}

4. 301リダイレクト設定

URL構造が変更された場合(例:/2025-12-02/xxx/xxx):

# _redirects (Cloudflare Pages)
/2025-12-02/koyfin-scraper-spec /koyfin-scraper-spec 301

5. Search Consoleから削除リクエスト

急いでインデックスから削除したい場合:

  1. Search Console → 削除 → 新しいリクエスト
  2. URLを入力して送信

まとめ

  • Nuxt SSGのcrawlLinksは便利だが、リンクされていないページは発見されない
  • frontmatterのpathはURLを決めるが、ビルドされるかは別問題
  • Google Search Consoleの404は、ほとんどの場合放置で問題ない
  • コンテンツを公開したい場合は、明示的にリンクを追加するか、prerender.routesに追加する