テクノロジー

ブログ記事が3ヶ月間Googleにクロールされなかった原因と解決方法 - 静的サイトマップが自動生成を上書きしていた話

ブログ記事が3ヶ月間Googleにクロールされなかった原因と解決方法

問題

7月と8月に公開したブログ記事が、10月末になってもGoogleにクロールされていないことに気づいた。普通は長くて数週間もあればインデックスされるが、3ヶ月経っても検索結果に表示されていない。あかんせっかくリキ入れてブログ書こうとしているのに..

ということで本記事では原因と解決方法をまとめる。

技術スタック

  • フロントエンド:Astro(静的サイトジェネレーター)
  • CMS:microCMS
  • インフラ:Google Cloud(Cloud Build + Cloud Run)
  • CI/CD:microCMS Webhook → Cloud Build自動デプロイ

問題発覚

Google Search Consoleのサイトマップセクションを確認すると、検出されたページ数が7ページのみだった。

実際には20本以上のブログ記事があるが、以下のページしか認識されていなかった

  • トップページ
  • サービスページ
  • 事例ページ
  • ブログ一覧ページ
  • お問い合わせページ
  • 会社概要ページ
  • プライバシーポリシーページ

要するに、ブログ記事の個別URLが一切含まれていない。

原因調査

まず配信されているサイトマップを確認した。

手書きの静的サイトマップが表示される:

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://kumono-inc.com/</loc>
    <lastmod>2025-01-06</lastmod>
    <changefreq>weekly</changefreq>
    <priority>1.0</priority>
  </url>
  <url>
    <loc>https://kumono-inc.com/blog/</loc>
    <lastmod>2025-01-06</lastmod>
    <changefreq>daily</changefreq>
    <priority>0.8</priority>
  </url>
  <!-- 他の静的ページのみ -->
</urlset>

ブログ一覧ページ(/blog/)は含まれているが、やはり個別記事のURL(例:/blog/ai-native-1/)は含まれていない。

原因

Astroの設定を確認すると、@astrojs/sitemapが正しく設定されており、ビルド時に自動でサイトマップは生成されるはず。

実際、以下のURLには自動生成されたサイトマップが存在していた

https://kumono-inc.com/sitemap-index.xml
https://kumono-inc.com/sitemap-0.xml

しかし、public/sitemap.xmlに謎に手書きの静的サイトマップが配置されていたため、こちらが優先されて配信されていた。

ファイルの優先順位

Astroのビルドプロセスでは

  1. public/フォルダのファイルはそのままdist/にコピーされる
  2. Astroが生成するファイル(sitemap-index.xmlなど)もdist/に出力される
  3. 同じ名前のファイルがある場合、public/のファイルが優先される

つまり、public/sitemap.xmlが存在する限り、Astroの自動生成サイトマップは使われない。

CI/CDは正常に動作していた

まず、「microCMSで記事を公開してもサイトマップが更新されないのは、CI/CDが動いていないから」かと思った。

ただ、確認すると

  • microCMS Webhookは正しく設定されている
  • Cloud Buildは記事公開時に自動でトリガーされている
  • Astroのビルドは成功している
  • sitemap-index.xmlsitemap-0.xmlには全記事が含まれている

CI/CDの問題ではなく、やはり配信されるファイルの優先順位の問題。

解決方法

1. 手書きサイトマップを削除

2. Astroの設定を確認

astro.config.mjsに以下の設定があることを確認:

import { defineConfig } from 'astro/config';
import sitemap from '@astrojs/sitemap';

export default defineConfig({
  site: 'https://kumono-inc.com',
  integrations: [sitemap()],
});

3. ブログ記事の動的ルートを確認

src/pages/blog/[id].astroで、getStaticPaths()がmicroCMSから全記事を取得していることを確認:

---
export async function getStaticPaths() {
  const response = await fetch(
    `https://YOUR_SERVICE.microcms.io/api/v1/blog?fields=id&limit=100`,
    {
      headers: {
        'X-MICROCMS-API-KEY': import.meta.env.MICROCMS_API_KEY,
      },
    }
  );
  const data = await response.json();

  return data.contents.map((post) => ({
    params: { id: post.id },
  }));
}
---

4. ビルド & デプロイ

適当にmicroCMSの記事をちょっと更新してWebhookをトリガーし、自動デプロイを実行。

5. 生成されたサイトマップを確認

デプロイ後、以下正しいサイトマップのURLにアクセスして、全記事が含まれているか確認:

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://kumono-inc.com/</loc>
    <lastmod>2025-10-29T08:31:23.664Z</lastmod>
  </url>
  <url>
    <loc>https://kumono-inc.com/blog/ai-native-1/</loc>
    <lastmod>2025-10-29T08:31:23.664Z</lastmod>
  </url>
  <url>
    <loc>https://kumono-inc.com/blog/customer_support_aidx/</loc>
    <lastmod>2025-10-29T08:31:23.664Z</lastmod>
  </url>
  <!-- 全ブログ記事が含まれる -->
</urlset>

6. Search Consoleでサイトマップを更新

Google Search Consoleで新しいサイトマップを登録:

  1. サイトマップセクションを開く
  2. 「新しいサイトマップの追加」をクリック
  3. sitemap-index.xmlと入力して送信

古いsitemap.xmlは削除またはそのまま放置(404になって自然に消えるはず)。

7. 個別記事のインデックス登録をリクエスト(おまけ)

早急にインデックスさせたい記事がある場合は以下のオプションもある。せっかく書いた記事が早急にインデックスされて欲しい場合も以下が使える。

  1. Search Console → 「URL検査」
  2. 記事のURLを入力
  3. 「インデックス登録をリクエスト」をクリック

結果

  • サイトマップに30以上のURLが含まれるようになった
  • lastmodが最新のビルド日時に更新された
  • Search Consoleで「検出されたページ数」が7から30+に増加した

数日〜1週間後には、7月・8月の記事もGoogleにクロールされ始めるはず、めでたし。

まとめ

ブログ記事がクロールされない原因は、手書きの静的サイトマップがAstroの自動生成サイトマップを上書きしていたことだった。

この記事の需要が世の中にあるのかは謎だが、ブログネタに貪欲月間なので、公開する。

---

本記事の問題解決プロセスでは、Codexを活用して現状分析から実装まで進めています。KumonoではこのようなAIツールを駆使した技術課題の解決から、事業開発・グロース支援まで一気通貫で行っている。AI活用を含めた事業推進のパートナーをお探しの際や、弊社で働くことに興味を持っていただいた方は気軽にこちらからご連絡いただけますと幸いです。

お問い合わせ

Kumonoでは、スタートアップの支援に関するご相談を承っております。
お気軽にお問い合わせください。

無料相談を予約する