robots.txtを正しく設定できていない?検索エンジンのクロールを効率化する方法|現場で使える実践テクニック
こんにちは!
今日は「robots.txtを正しく設定できていない?検索エンジンのクロールを効率化する方法」について解説します。
robots.txtって本当に必要?現場で見かけるあるあるミス
僕も最初の頃、robots.txtについて「設定しなくても大丈夫でしょ」って思ってたんですよね。
ほんまにそれで痛い目にあいました。
Web制作の現場でよく見るのが、サイトを公開する際にrobots.txtを完全に放置してるケース。
特に中規模のサイトだと、クローラーが無駄にクロールしてくれる場所まで見に行ってて、本当に見てほしいコンテンツへのクロール予算を圧迫してるんです。
検索エンジンのクローラー(GooglebotとかBingbot)には「クロール予算」って概念があります。
つまり、一定の時間内にサイトをどれだけ見に来られるか、っていう制限があるわけですよ。
だから、管理画面とか検索結果に出す必要のないページをクロールさせ続けてると、大事なコンテンツの更新を見逃されちゃう可能性があるんです。
robots.txtはそれを制御するめっちゃ重要なファイルなんですよ。
robots.txtの基本的な書き方と設定のコツ
では具体的に説明していきますね。robots.txtはサイトのルートディレクトリに置くテキストファイルです。
つまりhttps://example.com/robots.txtでアクセスできる場所に配置する必要があります。
一番シンプルな例はこんな感じです:
User-agent: * Disallow: /admin/ Disallow: /private/ Allow: /
これは「すべてのクローラーに対して、/admin/と/private/以下は見ないでね」という意味です。User-agent: *は「すべてのクローラーに対して」という指示ですね。
もう少し実践的な例をあげますと:
User-agent: * Disallow: /wp-admin/ Disallow: /wp-includes/ Disallow: /search/ Disallow: /*.pdf$ Disallow: /? User-agent: Googlebot Allow: / Sitemap: https://example.com/sitemap.xml
ちょっと複雑に見えるかもしれませんが、説明しますね。
上の部分で「すべてのクローラー」に対してWordPressの管理画面とか検索ページは見ないでと指示してます。/*.pdf$というのは「PDFファイルはすべて拒否」という意味です。
その後、User-agent: Googlebotで「Googlebotだけは特別にOK」という設定をしてます。
これはGoogleに検索結果に載せてほしいけど、他のクローラーには制限をかけたい時に使うんですよ。
最後のSitemapは「ここにサイトマップがありますよ」という親切な案内ですね。
これがあると、Googlebotがサイト構造を理解しやすくなるので、めっちゃ重要なんです。
よくある勘違いと実例で学ぶ設定方法
ここからは、僕が現場で見かけた「あ、これ間違ってる」っていうパターンを紹介します。
よくある勘違い①:robots.txtで削除指示ができると思ってる
これ、めっちゃよくあるんですよ。
「このページをGoogleの検索結果から消したいから、robots.txtでDisallowすればいい」って思ってる人。
実は違うんです。robots.txtでページをDisallowすると、クローラーがそのページを見に来なくなるだけで、すでにインデックスされてるページは検索結果に残ったままなんです。
ほんまに削除したければ、そのページにnoindexメタタグを入れるか、Google Search Consoleで削除リクエストを出さなきゃいけません。
robots.txtはあくまで「クロール」を制御するものなんですよ。
よくある勘違い②:すべてをDisallowしてしまう
新しいサイトを作ってて「とりあえず完成するまでクローラーに見られたくない」って理由で、こう書いてる人がいます:
User-agent: * Disallow: /
これ自体は問題ないんですが、本公開時に消し忘れてしまうことがめっちゃあるんです。
そうなると、サイトが完全に検索結果に出なくなっちゃいます。
本公開前の環境では、robots.txtじゃなくて.htaccessでベーシック認証をかけるとか、別の方法を使うのが安全ですよ。
よくある勘違い③:ワイルドカードの使い方を間違える
「すべてのクエリパラメータ付きURLを拒否したい」ってときに、こう書く人がいます:
Disallow: /?*
これは意味がないんです。
robots.txtで*は「任意の文字列」という意味じゃなくて、単なる文字列として扱われるんですよ。
クエリパラメータを制御したいなら、こう書きます:
Disallow: /*?
?の前に*を付けることで「?以降のクエリパラメータがあるすべてのページ」という意味になります。
実践的な設定例:ECサイトの場合
最後に、実際のECサイトでよく使う設定をお見せします:
User-agent: * Disallow: /cart/ Disallow: /checkout/ Disallow: /account/ Disallow: /search Disallow: /*?sort= Disallow: /*?filter= Disallow: /tmp/ Crawl-delay: 2 User-agent: Googlebot Crawl-delay: 0.5 Sitemap: https://example.com/sitemap.xml
この設定の意図は:
- ショッピングカート、チェックアウト、アカウント画