Use Cases

Claude Codeでサイトマップを自動生成する方法【SEO対策の基本】

Claude Codeを使ってXMLサイトマップの自動生成を実装する手法を解説。動的ルート対応や更新頻度設定、Google Search Console連携まで網羅します。

サイトマップ自動生成でSEO対策を効率化

サイトマップはGoogleなどの検索エンジンにサイト構造を伝える重要なファイルです。ページが増えるたびに手動で更新するのは現実的ではありません。Claude Codeを使えば、ビルド時に自動生成される仕組みを短時間で構築できます。

基本的なサイトマップ生成スクリプト

> XMLサイトマップを自動生成するスクリプトを作成して。
> 全ページのURLを収集し、lastmod・changefreq・priorityを設定して。
// scripts/generate-sitemap.ts
import { globby } from 'globby';
import { writeFileSync } from 'fs';

interface SitemapEntry {
  url: string;
  lastmod: string;
  changefreq: 'daily' | 'weekly' | 'monthly';
  priority: number;
}

async function generateSitemap() {
  const baseUrl = 'https://example.com';
  
  // ページファイルを収集
  const pages = await globby([
    'src/pages/**/*.astro',
    'src/content/blog/**/*.mdx',
    '!src/pages/api/**',
    '!src/pages/404.astro',
  ]);

  const entries: SitemapEntry[] = pages.map(page => {
    const path = page
      .replace('src/pages/', '')
      .replace('src/content/blog/', 'blog/')
      .replace(/\.(astro|mdx)$/, '')
      .replace(/\/index$/, '/');

    return {
      url: `${baseUrl}/${path}`,
      lastmod: new Date().toISOString().split('T')[0],
      changefreq: path.includes('blog') ? 'weekly' : 'monthly',
      priority: path === '' ? 1.0 : path.includes('blog') ? 0.7 : 0.8,
    };
  });

  const xml = buildXml(entries);
  writeFileSync('public/sitemap.xml', xml);
  console.log(`✅ サイトマップ生成完了: ${entries.length}ページ`);
}

function buildXml(entries: SitemapEntry[]): string {
  return `<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
${entries.map(e => `  <url>
    <loc>${e.url}</loc>
    <lastmod>${e.lastmod}</lastmod>
    <changefreq>${e.changefreq}</changefreq>
    <priority>${e.priority}</priority>
  </url>`).join('\n')}
</urlset>`;
}

generateSitemap();

動的ルートへの対応

ブログ記事のように動的に生成されるページも、コンテンツディレクトリから自動的に収集できます。

// Astroプロジェクトでの統合例
import { getCollection } from 'astro:content';

export async function getStaticPaths() {
  const posts = await getCollection('blog');
  return posts.map(post => ({
    params: { slug: post.slug },
    props: { post },
  }));
}

// サイトマップ用にメタ情報を出力
async function collectBlogEntries(baseUrl: string): Promise<SitemapEntry[]> {
  const posts = await getCollection('blog');
  
  return posts
    .filter(post => !post.data.draft)
    .map(post => ({
      url: `${baseUrl}/blog/${post.slug}`,
      lastmod: post.data.pubDate.toISOString().split('T')[0],
      changefreq: 'weekly' as const,
      priority: 0.7,
    }));
}

サイトマップインデックスの実装

大規模サイトでは、サイトマップを分割してインデックスファイルで管理します。

function buildSitemapIndex(sitemaps: string[]): string {
  const baseUrl = 'https://example.com';
  return `<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
${sitemaps.map(name => `  <sitemap>
    <loc>${baseUrl}/${name}</loc>
    <lastmod>${new Date().toISOString().split('T')[0]}</lastmod>
  </sitemap>`).join('\n')}
</sitemapindex>`;
}

// 用途別にサイトマップを分割
const sitemapFiles = [
  'sitemap-pages.xml',
  'sitemap-blog.xml',
  'sitemap-categories.xml',
];
writeFileSync('public/sitemap.xml', buildSitemapIndex(sitemapFiles));

ビルドパイプラインへの組み込み

{
  "scripts": {
    "build": "astro build && tsx scripts/generate-sitemap.ts",
    "sitemap": "tsx scripts/generate-sitemap.ts"
  }
}

robots.txtでサイトマップを宣言する(推奨)

2023年6月にGoogleはサイトマップping(https://www.google.com/ping?sitemap=...)を廃止しました。 同様にBingのpingエンドポイントも現在は非推奨です。代わりに、検索エンジンが自動で検出できるよう robots.txtにサイトマップURLを記載する のが現在の標準的なベストプラクティスです。

> robots.txtにサイトマップのURLを追加して。
User-agent: *
Allow: /

Sitemap: https://example.com/sitemap.xml

robots.txtにSitemap:ディレクティブを書いておけば、Googlebotを含む主要クローラは自動的にそのサイトマップを発見・取得します。サイトマップを分割している場合はサイトマップインデックスのURLを指定してください。

Google Search Console / Bing Webmaster Toolsへの登録

自動ping廃止後、Google公式が推奨するサイトマップ通知方法は以下の2つです。

  1. Google Search Console の「サイトマップ」画面でサイトマップURLを一度登録する
  2. robots.txtSitemap: ディレクティブに記載する(自動発見用)

一度Search Consoleに登録すれば、Googlebotは定期的に sitemap.xml を再取得します。手動でpingする必要はありません。 Bingも同様にBing Webmaster Toolsでの登録が公式推奨です。

// scripts/verify-sitemap.ts
// pingの代わりに、デプロイ後に自サイトのsitemap.xmlが200で返るかだけ確認する
async function verifySitemap(sitemapUrl: string) {
  try {
    const res = await fetch(sitemapUrl);
    if (!res.ok) {
      console.error(`❌ sitemap.xml が取得できません: HTTP ${res.status}`);
      process.exit(1);
    }
    const xml = await res.text();
    const urlCount = (xml.match(/<url>/g) ?? []).length;
    console.log(`✅ sitemap.xml 公開確認: ${urlCount} URLs`);
  } catch (error) {
    console.error('❌ sitemap.xml 取得エラー:', error);
    process.exit(1);
  }
}

verifySitemap('https://example.com/sitemap.xml');

注意: かつて紹介されていた https://www.google.com/ping?sitemap=...2023年6月26日に完全に廃止 されており、リクエストしても404が返ります。古い記事やコード例で見かけてもそのまま使わないでください(参考: Google Search Central Blog - Sitemaps ping endpoint is going away)。

まとめ

サイトマップの自動生成は、SEO対策の基本中の基本です。Claude Codeを使えば、動的ルートの収集からビルドパイプラインへの組み込みまで一気に実装できます。CI/CDパイプラインに組み込むことで、デプロイのたびに最新のサイトマップが自動的に生成されます。詳しい仕様はsitemaps.orgを参照してください。

#Claude Code #サイトマップ #SEO #XML #自動化
無料プレゼント

無料PDF: Claude Code はじめてのチートシート

まずは無料PDFで基本コマンドと最初の使い方をまとめて確認してください。登録後はそのままテンプレート集や導入相談にも進めます。

スパムは送りません。登録情報は厳重に管理します。

Claude Codeを仕事で使える形にしませんか?

無料PDFで基礎を固めたあと、すぐ使えるテンプレート集で試し、必要なら業務自動化や導入相談まで進められます。

Masa

この記事を書いた人

Masa

現役DX室長|Claude Code でゼロから多言語AI技術メディア運営中。実務直結の自動化、AI開発相談・研修受付中。

PR

関連書籍・参考図書

この記事のテーマに関連する書籍を楽天ブックスで探せます。

※ 当サイトは楽天市場のアフィリエイトプログラムに参加しています。上記リンクから商品をご購入いただくと、運営者に紹介料が支払われる場合があります。