robots.txtの設定ミスでクロール効率が低下する?実務で見かける3つの落とし穴

C
クリオ
Web制作ディレクター / フロントエンジニア

こんにちは!
今日は「robots.txtの設定ミスでクロール効率が低下する?実務で見かける3つの落とし穴」について解説します。

これ、ほんま多いんですよ。
SEOのコンサルタントさんもよく指摘するんですが、意外と本気でハマってる案件が多いんです。

robots.txtは「クローラーへの指示書」だという勘違い

僕も最初は勘違いしてたんですが、robots.txtって「クローラーに対する絶対的な指示」だと思ってる人、めっちゃいますよね。
実はそうじゃないんです。

robots.txtは「礼儀正しく動くクローラーに対する*願い*」みたいなもんなんです。
Googleのクローラーはちゃんと守ってくれるんですが、悪意のあるボットはスルーします。
だから「絶対にここは見られちゃいけない情報」を守るためにrobots.txtだけに頼るのはNGなんですよ。

でも、ここからが大事です。
多くの人が誤解してるのは「robots.txtで禁止したページはGoogleに検出されない」ってことなんです。

実際には、Googleはファイル自体は発見できます。
ただ、その内容は見に行きません。
つまり、robots.txtで禁止したからといって、検索結果に出ないわけじゃないんですよ。

現場でよく見るのは、こういう状況です。
クライアントが「このページは見られたくないからrobots.txtで禁止しよう」って言って設定したのに、なぜか検索結果に出てる。
で、「あ、noindexメタタグも入れないとダメなんだ」って気づくパターン。
これ、ほんま多いんです。

設定ミスで大事なページまでブロックしてる現場あるある

さて、ここからが今日の本題なんですが。
実装の落とし穴、3つあります。

落とし穴1: ワイルドカードの使い方を間違える

これ、僕も昔やってました。
以下のような設定を見たことないですか?

Disallow: /*

これね、すべてのページをブロックしちゃいます。
「あ、もう検索対象から外そう」って急いで設定したんでしょう。
でも意外とこのまま本番に上がってたりするんですよ。

もっと危ないのが、こういう設定です。

Disallow: /admin/
Disallow: /*.pdf

一見、正しく見えますよね。
でも、実は/*.pdfってのは「.pdfという文字列を含むすべてのパス」をブロックするんです。
/files/document.pdfもそうですが、/blog/2024.pdf/articleみたいなパスもブロックしちゃいます。

大事なページまでやられちゃう可能性があるんですよ。

落とし穴2: User-agentの指定を誤る

これ、現場でよく見るんですが、クライアントが「Googleだけに指示を出したい」って言うんですよ。
で、こう書く人がいます。

User-agent: Googlebot

間違いじゃないんですが、非常に危ない設定です。
なぜなら、Google以外のクローラー(Bingとか)には何の指示も与えないことになるから。
結果、すべてのボットが自由にクロールしちゃいます。

「あ、Googleのみに設定したいんだ」という意図は分かるんですが、実装としては微妙です。
ほかの検索エンジンの評価も大事なので、基本的にはUser-agent: *ですべてのボットに同じ指示を出す方が無難ですよ。

落とし穴3: 新しいページやリソースをブロックしてる

これ、ほんまに多いんです。
昔のプロジェクトで「/new/ディレクトリはテスト環境だからブロック」って設定したやつが、そのまま本番環境に残ってた。
で、実際に/new/ディレクトリが新サービスのディレクトリになったんですよ。

結果、新しいサービスがGoogleにクロールされない。
当然、検索結果にも出ない。
売上が上がらない。

これ、ほんまに困った案件です。
要するに、robots.txtの設定は定期的にレビューしないといけないってことなんです。

クロール予算を無駄にしないための実装ルール

では、実践的な設定方法を解説します。

基本形: 必要なもの以外をブロック

基本的な考え方はこれです。
「クローラーに見てほしいページ以外をブロック」するんじゃなくて、「見てほしくないページだけをブロック」するんですよ。

例えば、こんな感じです。

User-agent: *
Disallow: /admin/
Disallow: /private/
Disallow: /tmp/
Disallow: /search?

ポイントは、Disallowを具体的にすることです。
「このディレクトリはダメ」「このパラメータ付きのパスはダメ」って明確にするんですよ。

セッションIDやキャンペーンパラメータを外す

めっちゃ重要なのが、これです。
Webサイトを運用してると、同じコンテンツに複数のURLでアクセスできることがあります。

例:
/products/item.html
/products/item.html?utm_source=email
/products/item.html?sessionid=12345

これ、すべて別のURLとしてクローラーが認識しちゃいます。
クロール予算を無駄にしてるんですよ。

だから、こう設定するといいですよ。

Disallow: /*?sessionid=
Disallow: /*?utm_

こうすることで、セッションIDやマーケティングパラメータ付きのURLはクロールされません。
大事なコンテンツのクロール予算が増えるんです。

Crawl-delayで丁寧に

最後に、これは上級者向けなんですが、Crawl-delayを設定することで、クローラーが来すぎて負荷がかかるのを防げます。

User-agent: *
Crawl-delay: 1

これは「1秒間隔でクロールしてね」という意味です。
サーバーに負荷がかかってる場合とかに使いますよ。