sitemap.xmlは検索エンジンにサイト内のURL一覧を伝えるXMLファイル。robots.txtはクローラーのアクセス範囲を制御するテキストファイル。sitemap.xmlはクロール促進(「ここを見て」)、robots.txtはクロール制限(「ここは見ないで」)が役割だ。どちらもサイトのルートディレクトリ(https://example.com/sitemap.xml, https://example.com/robots.txt)に配置し、Search Consoleで登録・確認するのがSEOの基本設定になる。
sitemap.xmlとrobots.txtとは
Webサイトを公開したら、Googleなどの検索エンジンに「正しくクロール・インデックスしてもらう」ための設定が必要になる。その中核となるのがsitemap.xmlとrobots.txtの2つのファイルだ。
| 項目 | sitemap.xml | robots.txt |
|---|---|---|
| 役割 | サイト内のURL一覧を検索エンジンに伝える | クローラーのアクセス範囲を指示する |
| 形式 | XML | プレーンテキスト |
| 配置場所 | /sitemap.xml |
/robots.txt |
| 必須か | 推奨(大規模サイトは必須) | 推奨(なければ全ページクロール対象) |
| 効果 | 新規・更新ページの発見を促進 | 不要ページのクロールを防止 |
| 強制力 | なし(あくまで「ヒント」) | あり(主要クローラーは従う) |
なぜ両方必要なのか
sitemap.xmlだけではクローラーが不要なページまで巡回してクロールバジェット(1日にクロールされるページ数の上限)を浪費する。robots.txtだけではクローラーがサイト構造を把握できず、深い階層のページが見落とされる。sitemap.xmlで「見てほしいページ」を伝え、robots.txtで「見なくていいページ」をブロックする——この2つを組み合わせることで、クロール効率が最大化される。
Point
10ページ以下の小規模サイトではsitemap.xmlがなくてもGoogleは全ページを発見できることが多い。しかし、ページを追加するたびにインデックス速度が向上するため、サイト規模に関わらず最初から設置しておくのがベストプラクティスだ。
sitemap.xmlの書き方
sitemap.xmlはXML形式で記述する。最低限必要なのは<urlset>のルート要素と、各URLを示す<url>要素だ。以下がフリーランスのポートフォリオサイトを想定した基本的な記述例になる。
各タグの意味と使い方
| タグ | 必須 | 説明 | 値の例 |
|---|---|---|---|
<urlset> |
必須 | ルート要素。名前空間を指定する | xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" |
<url> |
必須 | 各URLのコンテナ | - |
<loc> |
必須 | ページの完全URL(https://から始まる) | https://example.com/works/ |
<lastmod> |
推奨 | 最終更新日(W3C Datetime形式) | 2026-03-20 |
<changefreq> |
任意 | 更新頻度のヒント(Googleはほぼ無視) | weekly, monthly, yearly |
<priority> |
任意 | サイト内での相対的な優先度(0.0〜1.0) | 0.8(Googleはほぼ無視) |
Point
Googleは<changefreq>と<priority>をほぼ参照しないことを公式に明言している。SEO効果があるのは<loc>と<lastmod>の2つだ。ただし<lastmod>も実際にコンテンツが更新された日付を入れることが重要——更新していないのに日付だけ変えるとGoogleの信頼を失う。
sitemap.xmlの技術的な制約
- 最大URL数: 1ファイルあたり50,000URL
- 最大ファイルサイズ: 圧縮前で50MB
- エンコーディング: UTF-8必須
- URLのプロトコル: httpsサイトはhttpsのURLのみ記載可能
- URLの正規化: 末尾スラッシュの統一、wwwあり/なしの統一が必要
サイトマップの種類
サイトマップにはXML以外にもいくつかの種類がある。サイトの規模やコンテンツに応じて使い分ける。
XMLサイトマップ(標準)
最も一般的な形式。前述の<urlset>で記述する。すべてのWebサイトで使用すべき基本形式だ。
サイトマップインデックス
50,000URLを超える大規模サイトでは、複数のサイトマップファイルを束ねる「サイトマップインデックス」を使う。
画像サイトマップ
画像検索からの流入を増やしたい場合は、画像サイトマップを追加する。通常のサイトマップに<image:image>タグを追加する形式だ。
動画サイトマップ
動画コンテンツがある場合は動画サイトマップを作成する。YouTubeを埋め込んでいる場合も有効だ。
| 種類 | 用途 | 必要なサイト |
|---|---|---|
| XMLサイトマップ | 全ページのURL通知 | すべてのサイト |
| サイトマップインデックス | 複数サイトマップの統合 | 50,000URL超の大規模サイト |
| 画像サイトマップ | 画像検索での表示向上 | ポートフォリオ、ECサイト |
| 動画サイトマップ | 動画検索での表示向上 | 動画コンテンツがあるサイト |
robots.txtの書き方
robots.txtは、検索エンジンのクローラーに「このパスにはアクセスしないで」と伝えるテキストファイルだ。サイトのルートディレクトリ(https://example.com/robots.txt)に配置する。
基本構文
ディレクティブの意味
| ディレクティブ | 説明 | 例 |
|---|---|---|
User-agent |
対象のクローラーを指定(*で全クローラー) |
User-agent: Googlebot |
Disallow |
クロールを禁止するパス | Disallow: /admin/ |
Allow |
Disallow内で例外的に許可するパス | Allow: /admin/public/ |
Sitemap |
サイトマップのURLを通知 | Sitemap: https://example.com/sitemap.xml |
Crawl-delay |
クロール間隔の指定(秒)※Googleは非対応 | Crawl-delay: 10 |
よくあるパターン集
Point
robots.txtは「紳士協定」であり、Googlebot等の主要クローラーは従うが、悪意のあるボットは無視する。セキュリティ対策としてrobots.txtに頼ってはいけない。機密情報は認証(パスワード保護)やサーバー側のアクセス制御で守るべきだ。
robots.txtで制御すべきページ
robots.txtでブロックすべきページと、ブロックしてはいけないページを明確に区別することが重要だ。判断を誤るとSEOに悪影響を与える。
ブロックすべきページ
| 対象 | 理由 | Disallow設定 |
|---|---|---|
| 管理画面 | インデックス不要、セキュリティ面でも非公開が望ましい | Disallow: /admin/ |
| サイト内検索結果 | 無限にURLが生成され、クロールバジェットを浪費 | Disallow: /search |
| ログイン・会員専用ページ | クローラーがアクセスしても意味のあるコンテンツが見えない | Disallow: /my-account/ |
| カート・決済ページ | 個人情報を含むページ、インデックス不要 | Disallow: /cart/ |
| 印刷用・PDF版ページ | 本来のページと内容が重複する | Disallow: /print/ |
| パラメータ付きの重複URL | ソート・フィルタで無限に生成される | Disallow: /*?sort= |
| 開発・テスト環境 | 本番と重複コンテンツになる | Disallow: /(環境全体をブロック) |
ブロックしてはいけないページ
- CSS・JavaScriptファイル — GoogleがページをレンダリングするためにCSS/JSが必要。ブロックするとモバイルフレンドリーテストに失敗する
- 画像ファイル — 画像検索からの流入が減る。OGP画像も取得できなくなる
- トップページ・主要コンテンツ — 当然だが、集客対象のページをブロックしない
- canonicalタグで指定したURL — canonical先をブロックするとGoogleが正規URLを判断できなくなる
Point
「noindexにしたいページ」をrobots.txtでブロックしてはいけない。robots.txtでブロックするとクローラーがページにアクセスできないため、<meta name="robots" content="noindex">タグを読み取れず、結果的にインデックスから削除されない。noindexにしたいなら、robots.txtではブロックせず、ページ内にnoindexメタタグを設置する。
Google Search Consoleでの登録方法
sitemap.xmlをサーバーに配置したら、Google Search Console(GSC)に登録してクロールを促進しよう。
サイトマップの送信手順
- Google Search Consoleにログイン
- 対象のプロパティを選択
- 左メニューから「サイトマップ」をクリック
- 「新しいサイトマップの追加」にURLを入力(例:
sitemap.xml) - 「送信」をクリック
- ステータスが「成功しました」になれば完了
送信後に確認すべきこと
| 確認項目 | 正常な状態 | 問題がある場合 |
|---|---|---|
| ステータス | 「成功しました」 | 「取得できませんでした」→URLまたはサーバー設定を確認 |
| 検出されたURL数 | サイトマップに記載したURL数と一致 | 差異がある→XML構文エラーの可能性 |
| インデックスされたURL数 | 検出URL数に近い値 | 大幅に少ない→noindex・重複・低品質の可能性 |
robots.txtの確認方法
robots.txtが正しく機能しているかは、ブラウザで直接確認できる。
- ブラウザで
https://あなたのサイト/robots.txtにアクセス - テキストファイルが表示されることを確認
- Googleのrobots.txtテスターで構文チェック
- Search Consoleの「URL検査」で特定のURLがブロックされていないか確認
よくある間違いと対処法
間違い1: robots.txtでサイト全体をブロック
ステージング環境用のDisallow: /をそのまま本番にデプロイしてしまうのは最もよくある事故だ。デプロイ後は必ずhttps://本番URL/robots.txtをブラウザで確認しよう。
間違い2: lastmodを機械的に更新
Googleは<lastmod>の信頼性を学習する。日付を偽り続けると、そのサイトの<lastmod>全体が無視されるようになる。
間違い3: index.htmlとディレクトリURLの重複
間違い4: CSS/JSをrobots.txtでブロック
間違い5: noindexページをrobots.txtでブロック
間違い6: sitemap.xmlにリダイレクト先を記載していない
間違い7: httpsとhttpが混在
静的サイト・WordPressでの設定方法
静的サイト(HTML/gulp/EJS)の場合
静的サイトではsitemap.xmlとrobots.txtを手動で作成し、ルートディレクトリに配置する。gulpやEJSを使っている場合はビルド時にルートにコピーされるよう設定する。
静的サイトのメリットは、出力されるURLが明確なため、sitemap.xmlの管理が簡単なことだ。ページを追加・削除するたびに手動で更新する必要があるが、小〜中規模サイトなら大した手間ではない。
WordPressの場合
WordPress 5.5以降、サイトマップは自動生成される(/wp-sitemap.xml)。ただしカスタマイズ性が低いため、SEOプラグインで管理するのが一般的だ。
| プラグイン | サイトマップ | robots.txt | おすすめ度 |
|---|---|---|---|
| Yoast SEO | 自動生成 + 除外設定 | 管理画面から編集可能 | 定番。初心者向け |
| All in One SEO | 自動生成 + 画像/動画対応 | 管理画面から編集可能 | 多機能。中級者向け |
| Rank Math | 自動生成 + インデックス制御 | 管理画面から編集可能 | 無料版でも高機能 |
| XML Sitemaps | サイトマップ専用 | 非対応 | サイトマップだけ欲しい場合 |
Point
WordPress自動生成のサイトマップ(/wp-sitemap.xml)とSEOプラグインのサイトマップは共存させない。SEOプラグインを導入した場合はWordPress標準のサイトマップを無効化しよう。Yoast SEOなら自動で無効化される。