クロール最適化のためのrobots.txtの書き方と効果的な活用方法

robots.txt完全攻略ガイド

robots.txtを利用してクロール最適化を図ることは、SEO内部対策の重要な1つでもあります。クローラーを適切に制御するとSEO効果が改善されますので、robots.txtについて正しく理解しましょう。こちらでは、robots.txtの効果的な設定方法について詳しく解説しています。

クローラー

クローラーとは、ウェブサイトの情報を収集するために自動で巡回しているロボットのことを指します。クローラーはWebページに記述されているリンクを辿ってサイトを巡回しますが、全てのページを巡回するわけではありません。robots.txtを設定し内部の最適化を図ることでクローラーに効率よく巡回してもらい、SEO効果を改善することができます。

また、ロボット(Robot)・ボット(Bot)・スパイダー(Spider)などと呼ばれることもあります。

クロール最適化

クロール最適化とは、サイト構成を的確に伝え、重要なページからクロールされやすいサイト作りやクロール制御をすることを言います。重要なページから優先的にクロール頻度を増やすことにより、アクセス向上につながります。

目次

robots.txtとは

robots.txtとは、「特定ページへの巡回拒否」や「サイトマップの場所を知らせる」といった、検索エンジンのクローラーに対する命令を記述したファイルのことを指します。

一般的に、検索エンジンにインデックスされやすいようクローラーに効率よく巡回してもらうためのSEO対策を施しますが、中には巡回してほしくないページもあります。

そのようなページがある場合は、robots.txtでクローラーの巡回を拒否することができます。また、巡回拒否の設定はクローラーにインデックスさせたいページのみを巡回させ、クロール最適化を図るメリットもあります。

クローラーはサイトを訪問する際、最初に「robots.txt」をチェックし、こちらに記述されている内容に従って行動していきます。間違った設定をしてしまうと正しい成果を得られない可能性がありますので、robots.txtの設定方法についてはしっかり理解してください。

また、robots.txtの設定には強制力はなくクローラーの中には指示に従わないものもあることを併せて覚えておきましょう。

クローラーには巡回ページ数や巡回時間の上限がある

クローラーは、サイトの全てのページを巡回するわけではありません。それぞれのサイトには巡回するページ数や巡回時間の上限が設けられています。このような上限は「クロールバジェット」と呼ばれます。

クロールは通常、トップページから下層ページへ行われます。上限値が小さいと下層ページまでクローラーが巡回してくれない場合もありますので、そうなるとインデックスされないまま検索結果にも表示されません。

クロールバジェットは、サイトの価値によって上限が異なります。簡単に言えば検索からのアクセス数が多いサイトほど上限値が大きいと言えます。逆に言えば、新規サイトほど上限値が小さいので、効率よくクロールしてもらえるよう対策する必要があります。そのための「robots.txt」の設定は有効な方法の」1つと言えます。

robots.txtの記述規則

robots.txtに記述する場合は、いくつかの記述規則が存在します。そちらに従って作成していきます。

フィールドの種類

robots.txtには以下の3つのフィールドが設定できます。基本的には指定したロボット(User-agent:)に巡回拒否(Disallow:)や巡回許可(Allow:)の設定を行います。

フィールド名 定義
User-agent: 対象となるロボットの名前を指定します。
*(アスタリスク)」を設定すると全てのロボットが対象となります。
Disallow: ロボットの巡回を拒否するファイルやディレクトリのパスを指定します。
設定値は完全一致でも部分一致どちらでも問題ありません。
Allow: ロボットの巡回を許可するファイルやディレクトリのパスを指定します。
設定値は完全一致でも部分一致どちらでも問題ありません。
また、「Allow」は「Disallow」よりも優先されます。

ロボットの種類

こちらでは、代表的なロボットを紹介します。日本での検索エンジンのシェアは、Yahoo!とGoogleで80%以上を占めていますので、他のロボットに対して設定してもさほど影響がないのが現状かと思います。

ロボット名内容
GooglebotGooglebot(Google ウェブ検索)。
Google のメインのクローラーになります。
Googlebot-News(Googlebot)ニュース用 Googlebot
Googlebot-Image(Googlebot)画像用 Googlebot
Googlebot-Video(Googlebot)動画用 Googlebot
Googlebot-MobileGoogle モバイル
Mediapartners-GoogleGoogle モバイル AdSense
AdsBot-GoogleGoogle AdsBot を使ったリンク先ページの品質確認
SlurpYahoo!の検索
msnbotMSN(Bing)の検索
BaiduspiderBaidu(百度)の検索
TeomaAskの検索
YetiNaverの検索
TwicelerCuilの検索
DotBotDotbotの検索

フィールドの記述方法

こちらではフィールドの記述方法について、それぞれ解説しています。

User-agentで対象となるロボットを指定する

User-agent」は、対象とするロボットを指定することができます。

記述方法設定内容
User-agent: *全てのクローラーが対象となります。
User-agent: GooglebotGooglebotやGooglebot-Imageなどのクローラーが対象となります。
User-agent: Googlebot-MobileGooglebot-Mobile(Googleモバイル用クローラー)が対象となります。
User-agent: SlurpYahoo!のクローラーが対象となります。

Disallowでロボットの巡回を拒否する

Disallow」は、対象とするロボットの巡回を拒否することができます。

記述方法設定内容
Disallow: /対象ロボットへサイト全体への巡回を拒否します。
Disallow: /test/対象ロボットへ「/test/」で始まるページの巡回を拒否します。
Disallow: /test/a001.html対象ロボットへ「/test/a001.html」のページの巡回を拒否します。

Allow:でロボットの巡回を許可する

Disallow」は、対象とするロボットの巡回を許可することができます。

記述方法設定内容
Allow: /対象ロボットへサイト全体への巡回を許可します。
Allow: /test/対象ロボットへ「/test/」で始まるページの巡回を許可します。
Allow: /test/a001.html対象ロボットへ「/test/a001.html」のページの巡回を許可します。

「*(アスタリスク)」で部分一致のページ巡回を拒否する

*(アスタリスク)」は、全ての文字列を示すワイルドカードです。「*(アスタリスク)」を利用した部分で部分一致のページの巡回を拒否することができます。

記述方法設定内容
Disallow: /対象ロボットへサイト全体への巡回を拒否します。
Disallow: /a*.htmlルート・ディレクトリにあるaで始まるページの巡回を拒否します。

ワイルドカード

ワイルドカードは、文字の代わりとして利用することができる記号のことを指します。「*(アスタリスク)」は、ワイルドカードの1つで、任意の文字列 を表します。つまりどんな文字にもなり得るということです。

「a*z」という設定がある場合は、「abz」「agz」「abcdefdz」共に部分一致として認識されます。

ルート・ディレクトリ

ルート・ディレクトリとは、サーバーの一番上にある階層のディレクトリを指します。Webサイトのトップページを表示するためのindex.html、index.phpなどのインデックスファイルを置く場所がルートディレクトリにあたります。

「$(ドル)」で$の前で終わるページ巡回を拒否する

$(ドル)」は、文字列の最後を示します。$の前で終わるページの巡回を拒否することができます。

記述方法設定内容
Disallow: /対象ロボットへサイト全体への巡回を拒否します。
Disallow: *a001.php$「a001.php」で終わるページの巡回を拒否します。

具体的なrobots.txtの書き方

こちらでは、具体的な設定事例を紹介しています。サイトの構成に適した設定を行いましょう。

参考サイト:サイトのコンテンツへのアクセスをブロックする - Search Console

全てのロボットへサイト全体への巡回を拒否する

User-agent: *
Disallow: /
URL巡回可否
http://www.example.com
http://www.example.com/test/index.html

User-agentには「*(アスタリスク)」が設定されていますので、全てのクローラーを対象としています。Disallowにはルートディレクトリ全体を示す「/」が設定されていますので、サイト全体への巡回を拒否しています。

Googlebotで始まるロボットへ「/test/」ディレクトリ以下のページの巡回を拒否する

User-agent: Googlebot
Disallow: /test/
URLロボット巡回可否
http://www.example.comGooglebot
http://www.example.com/test/index.htmlGooglebot
http://www.example.com/test/test2/a001.htmlGooglebot
http://www.example.com/category/test/a001.htmlGooglebot
http://www.example.com/TEST/index.htmlGooglebot
http://www.example.com/test//index.htmlGooglebot
http://www.example.com/test//index.htmlGooglebot-News
http://www.example.com/test//index.htmlGooglebot-image
http://www.example.com/test//index.htmlGooglebot-video
http://www.example.com/test//index.htmlGooglebot-Mobile
http://www.example.com/test/index.htmlMediaparthers-Googlebot
http://www.example.com/test/index.htmlAdsbot-Googlebot

User-agentには「Googlebot」が設定されていますので、Googlebotで始まるクローラーを対象としています。Disallowには「/test/」が設定されていますので、「/test/」ディレクトリ以下のページの巡回を拒否しています。

尚、「http://www.example.com/TEST/index.html」は「TEST」が大文字のため、別のディレクトリとして認識されており巡回拒否の対象外となります。

全てのロボットへルート・ディレクトリ内のaで始まるページの巡回を拒否する

User-agent: *
Disallow: /a*.html
URL巡回可否
http://www.example.com
http://www.example.com/a001.html
http://www.example.com/b001.html
http://www.example.com/test/a001.html

User-agentには「*(アスタリスク)」で全てのクローラーを対象としています。Disallowにも「*(アスタリスク)」を利用しており、ルート・ディレクトリ内のaで始まるページの巡回を拒否します。

全てのロボットへ$の前で終わるページ巡回を拒否する

User-agent: *
Disallow: *a001.php$
URL巡回可否
http://www.example.com
http://www.example.com/a001.php
http://www.example.com/test/a001.php
http://www.example.com/a001.php?id=10

User-agentには「*(アスタリスク)」で全てのクローラーを対象としています。Disallowには「$(ドル)」を利用しており、$の前で終わるページの巡回を拒否しています。

Googleロボットへ「/test/a001.html」以外の「/test/」ディレクトリ以下のページの巡回を拒否する

User-agent: *
Disallow: /test/
Allow: /test/a001.html
URL巡回可否
http://www.example.com
http://www.example.com/test/index.html
http://www.example.com/test/a001.html
http://www.example.com/test/a002.html

User-agentには「Googlebot」が設定されていますので、Googlebotで始まるクローラーを対象としています。Disallowには「/test/」が設定されていますので、「/test/」ディレクトリ以下のページの巡回を拒否しています。

さらにAllowには「/test/a001.html」が設定されていますので、「/test/a001.html」だけページの巡回を許可しています。これにより、「/test/a001.html」以外の「/test/」ディレクトリ以下のページの巡回を拒否することができます。

Googleロボット以外のロボット全ての巡回を拒否する

User-agent: *
Disallow: /
User-agent: Googlebot
Disallow:
URLUser-agent巡回可否
http://www.example.comGoogleロボット
http://www.example.comGoogleロボット以外

User-agentには「*(アスタリスク)」が設定されていますので、全てのクローラーを対象としています。Disallowにはルートディレクトリ全体を示す「/」が設定されていますので、サイト全体への巡回を拒否しています。

次のUser-agentには「Googlebot」が設定されていますので、Googlebotで始まるクローラーを対象としています。Disallowには何も設定されていませんので、全てのページを巡回します。

こちらの設定は、最初に全てのロボットの巡回拒否を設定してから、Googleロボットだけに巡回許可を与えることでは、Googleロボット以外のロボット全ての巡回を拒否することができます。

robots metaタグによるロボットの制御方法

ロボットの制御には、robtos.txtの設置以外に「robots metaタグ」を利用した方法もあります。robots.txtファイルはルート・ディレクトリに設置する必要があるのですが、環境によってはルート・ディレクトリに設置できない場合もあります。そのような場合は、robots metaタグを利用してロボットを制御することができます。ただし、metaタグに従わないロボットも存在しますので、覚えておいてください。

全てのロボットの巡回を拒否する場合は、以下のようにheadタグ内にrobots metaタグを設定します。

<html>
<head>
<meta name="robots" content="index,follow">
<title>タイトル</title>
</head>
<body>コンテンツ</body>
</html>

また、content属性の値には以下のようなものがあります。複数選択する場合は、「,(カンマ)」で区切って利用します。尚、robots metaタグを明示的に設定しない場合は、「index,follow」つまり「all」がデフォルトとして設定されます。

content属性の値

定義
index ページ情報のインデックスを許可します。
noindex ページ情報のインデックスを拒否します。
follow そのページに記述されているリンクを巡回することを許可します。
nofollow そのページに記述されているリンクを巡回することを拒否します。
all ページ情報のインデックスと、そのページに記述されているリンクの巡回を許可します。
(「index,follow」と同等)
none ページ情報のインデックスと、そのページに記述されているリンクの巡回を拒否します。
(「noindex,nofollow」と同等)

ページ情報のインデックスを許可し、ページに記述されているリンクを巡回させる

<meta name="robots" content="index,follow">

content属性にインデックス許可の「index」とリンク巡回許可の「follow」を設定しています。

ページ情報のインデックスを許可し、ページに記述されているリンクを巡回させない

<meta name="robots" content="index,nofollow">

content属性にインデックス許可の「index」とリンク巡回拒否の「nofollow」を設定しています。

ページ情報のインデックスを拒否し、ページに記述されているリンクを巡回させる

<meta name="robots" content="noindex,follow">

content属性にインデックス拒否の「noindex」とリンク巡回許可の「follow」を設定しています。

ページ情報のインデックスを拒否し、ページに記述されているリンクを巡回させない

<meta name="robots" content="noindex,nofollow">
<meta name="robots" content="none">

content属性にインデックス拒否の「noindex」とリンク巡回拒否の「nofollow」を設定しています。または、「none」を設定することで同様の制御ができます。

robots.txtとrobots metaタグの使い分け

ここまでで、ロボットの制御方法についてrobots.txtとrobots metaタグの2つの方法を紹介しましたが、これから2つの方法をどのように使い分ければよいか解説していきます。

robots.txtは誰でも閲覧することができる

robots.txtはクローラー巡回拒否・許可を設定できますが、基本的にrobots.txtは誰でも閲覧することができます。例えば、サイトの管理ページを巡回拒否していると、逆に管理ページのURLを知られる危険性もあります。

無料のCMSを利用したサイトなどは管理ページのURLが共通であることが多いので悪意のあるユーザーに狙われることもあり、例を挙げるとWordPressの管理ページのディレクトリは「/wp-admin/」であることはよく知られています。

仮に管理ページをrobots.txtでクローラー巡回拒否すると以下のような設定になります。

User-agent: *
Disallow: /wp-admin/

このように設定されているサイトはまずWordPressのデフォルトの管理ページを利用していますので、自ずと管理ログインページのアドレスが「/wp-login.php」と分かります。

こちらの設定は、あの有名な「バズ部」のrobots.txtに設定されている内容ですが、WordPressの管理画面も確認することができました。このようにrobots.txtは、「クローラに特定のページの巡回拒否・許可設定=ユーザーへ特定ページの存在を知られる」というリスクもありますので、利用する場合は十分に気をつけましょう。

CMS

CMSとは、コンテンツ・マネジメント・システムの略で、Webサイトを管理画面から編集することが出来る管理システムのことを言います。Web関連の知識がなくても簡単にサイトを管理できるのが特徴です。代表的なものを挙げるとWordPress・Movable Type・XOOPS・Drupal・EC-CUBEなどがあります。

robots.txtは100%インデックス拒否できない

Search Consoleヘルプの「robots.txt ファイルについて」では、robots.txtについて以下のように説明しています。

robots.txt ファイルが必要になるのは、Google などの検索エンジンのインデックスに登録したくないコンテンツがある場合のみです。

ここだけを見るとrobots.txtはインデックス拒否を設定するためのものと勘違いしてしまいますが、こちらに続きがあります。最初にお伝えするとrobots.txtで巡回拒否の設定をしたとしても完全にインデックス拒否をすることはできません

例えば、クローラー巡回拒否をしているページを他のサイトで被リンクとして貼られていた場合、robots.txtファイルで制御していてもインデックスされ検索結果に表示されてしまうことがあります。他にも、インデックス済みのページを後から巡回拒否したとしてもインデックスが削除されるわけではありません。

こののような場合は、検索結果に

「この結果の説明は、このサイトの robots.txt により表示されません」

と表示されることがあります。このようにrobots.txtの設定では、インデックスを拒否することができませんので、インデックスを拒否する場合は、以下のようにrobots metaタグを利用します。

<meta name="robots" content="noindex">

ただし、robots.txtとrobots metaタグを一緒に併用してはいけません。両方設定してしまうとクローラーは以下のような動作を行います。

上記のようにmetaタグで設定したインデックス拒否が読み込まれないため、インデックス拒否できず先ほどのようにインデックスされてしまいます。インデックス拒否したい場合は、robots.txtファイルでクローラーの巡回を許可してからmetaタグを設定するようにします。

これらのことからrobots.txtとrobots metaタグの使い分けは以下のようになります。環境に合わせてどちらを選択するか決定しましょう。

設定方法内容
robots.txtクローラーのアクセス可否を制御したい場合に利用する。
robots metaタグ検索エンジンのインデックス可否を制御したい場合に利用する。
X-Robots-Tagrobots metaタグを設定できないpdfファイル等のインデックス可否を
制御したい場合に利用する。

ロボットにXMLサイトマップの場所を知らせる

robots.txtにはクローラーの巡回可否以外にXMLサイトマップの場所を知らせる役割もあります。XMLサイトマップをアップロードしている場所を記述しておくことにより、クローラにサイトマップを読みやすくさせることができ、クロール最適化を図ることができます。

設定方法については、以下のように「Sitemap:」にXMLサイトマップのURLアドレスはフルパスを指定します。

Sitemap: XMLサイトマップのURLアドレス(フルパス)

ちなみに本サイトの例を挙げると以下のように設定します。

Sitemap: http://bokuichi.net/sitemap.xml

Sitemap設定の注意点

Search Consoleのrobots.txtテスターで制御の確認をする

robots.txtの記述方法やrobots metaタグの使い分けを理解できたら、robots.txtに記述した内容が意図した制御になっているか実際に確認していきます。確認するには、Search Console(旧ウェブマスターツール)の「robots.txtテスター」を利用していきます。

robots.txtテスター」を利用すると、robots.txtで設定した内容に対してGoogleクローラーがブロックされるかをチェックすることができます。

robots.txtテスターの機能

robots.txtファイル作成の注意点

robots.txtの制御を確認できたら、テキストファイルに保存します。保存する場合は、「UTF-8」の文字コードで保存しなければいけません。注意する点としては、BOMなしの「UTF-8N」で保存することです。

BOM付きで保存すると1行目の最初に2バイトの文字が加えられ、それが原因で1行目が構文エラーとなってしまいます。下記は実際にBOM付きで保存した場合のエラー内容です。

robots.txtテスターのエラー画面

1行目を見ると先頭に「・ソ」が付いています。これがBOMの残骸となります。こちらでは、1行目が構文として認識できなかったため、2行目も無効となっています。

このように、制御内容が正しく記述されていたとしても誤った文字コードで保存するとエラーが発生しますので、必ずBOMなしの「UTF-8N」で保存するようにしましょう。

また、テキストエディタによっては、「UTF-8」で保存すると自動でBOM付きで保存される場合があるので、TeraPadなどBOMなしでの保存が可能なテキストエディタを利用するようにしてください。

BOM

BOMとは、文書ファイルの先頭に「0xEF 0xBB 0xBF」という3バイトのバイナリデータのことを言います。このBOMが付けられると「このファイルの文字コードはUTF-8形式で書かれている」ということを通知する役割があります。こちらの詳細については、文字コードの歴史に関係してきますので、興味のある方はご自信で調べてみてください。

今回の件では、3バイトのデータが付加されているため、エラーが発生する原因となります。

robots.txtのアップロード

BOMなしの「UTF-8N」で保存できたら、最後にサーバーへアップロードします。サーバーへアップロードする際、robots.txtファイルは、「ルート・ディレクトリ」に設置する必要があります。「ルート・ディレクトリ」以外に設置すると無効になりますので、注意してください。

設置場所有効/無効
http://www.bokuichi.net/robots.txt有効
http://www.bokuichi.net/test/robots.txt無効

参考書籍

頼られるWeb担当者になる!Googleウェブマスターツールの教科書

「検索上位に表示させたい」「アクセス数を増やした」方のための「Googleウェブマスターツール」を活用していくバイブルです。ツールの利用方法だけでなく、検索エンジンの仕組み、Googleのアルゴリズム、スマートフォンサイトの問題など自サイトの上位表示に必要な知識とテクニックもまとめたSEO対策の本でもあります。

Amazon  楽天ブックス

デザイナーズ旅館一覧