WEBマーケティングのトータルサポートならディーエムソリューションズ株式会社
0120-934-226受付時間 平日9:00~18:00

robots.txt(ロボッツテキスト)とは? 正しい記述方法を徹底解説

このエントリーをはてなブックマークに追加

みなさんのサイトは、robots.txt(ロボッツテキスト)をきちんと設定していますか?

robots.txtは、検索エンジンのクロール(サイトを巡回し、ページの内容を収集・保存する処理)を制御することができるテキスト形式のファイルです。

「え? なにそれ?」と思った方はもちろん、「設定しているけど、これでいいのかな・・・?」と心配に感じている方も、ぜひこの記事を読んで参考にしていただければ幸いです。

robots.txtの確認方法

「うちのサイトにはあるのかないのかわからないなあ・・・」という場合、下記のようなURLをブラウザに直接入力し、設置されているか確認してみましょう。

https://www.example.com/robots.txt

※「https://www.example.com/」部分にあなたのサイトのURLを入力してください。

下記のような文字が表示された場合、設置されています。「404エラー」などと表示された場合は、設置されていない可能性があります。

robots.txtのブラウザで表示された例
robots.txtのブラウザで表示された例

robots.txtの役割

検索エンジンは、クローラと呼ばれるロボットにサイトをクロールさせ、ページの情報を取得しています。

robots.txtは、検索エンジンのクロールを制御することができるテキスト形式のファイルです。

クローラは、サイトにアクセスする際、まずrobots.txtを最初に読み込んで、クロールすべきページとクロールすべきでないページを確認し、効率的にサイト内をクロールします。

robots.txtは、Googleなどの検索結果にページを表示しないようにするためのファイルではありません。Googleなどの検索結果にページを表示しないようにするには、noindexメタタグを使用する、または「ログイン認証」などでブロックします。

robots.txtは必要?

robots.txtは、設置していなくても問題ありません。

検索エンジンは、サイトにアクセスする際、まずrobots.txtを取得しクロールすべきページを判断します。

robots.txtが設置されていないサイトは、HTML内のrobotsメタタグ、またはX-Robots-Tag HTTPヘッダーがクロールされ、問題なくインデックスに登録されます。

robots.txtのファイル形式

ファイル名は「robots.txt」でなければいけません。「ROBOTS.TXT」など大文字もNGです。

robots.txtファイルは、テキストエディタを使用して作成します。

robots.txtのファイル形式は、UTF-8でエンコードされた書式なしテキストです。UTF-8でテキストファイルが作成できるテキストエディタを使用する必要があります。

BOM(バイトオーダーマーク)は、無しに設定します。BOMが設定してあっても無視されます。

robots.txtの最大ファイルサイズは、Googleでは、500KiB(512KB)のサイズ制限があります。最大ファイルサイズを超えた場合、超えた分の内容は無視されます。

※1KiB(キビバイト)=1,024B(バイト)

robots.txtの保存場所

● 1サイトに設置できるrobots.txtは、1つだけです。
● robots.txtは、サイトのルート直下に設置します。

「https://www.example.com/」のrobots.txtは、下記のように設置します。
OKマーク

https://www.example.com/robots.txt
BADマーク

http://www.example.com/robots.txt
BADマーク

https://example.com/robots.txt
「https://www.example.com/pages/」などのディレクトリ配下(ルート直下以外)には設置できません。
BADマーク

https://www.example.com/pages/robots.txt

● サブドメインや標準以外のポートにもそれぞれ設置することができます。

「https://subdomain.example.com/」のrobots.txtは、下記のように設置します。
BADマーク

https://subdomain.example.com/robots.txt
「https://www.example.com:8181/」のrobots.txtは、下記のように設置します。
BADマーク

https://www.example.com:8181/robots.txt

robots.txtにアクセスした際のHTTPステータスコード

HTTPステータスコード 説明
2xx(成功) robots.txtが正常に取得できています。

robots.txtに記述されているルールによって、どのページをクロールするかを決定します。

3xx(リダイレクト) 5回以上リダイレクトした後、robots.txtが見つからない場合は、404エラーとして処理します。

robots.txtファイルのリダイレクトの処理(「フレーム」「JavaScript」「meta refresh」なども含む)は推奨されていません。

4xx(クライアントエラー) すべてのページをクロールします。

すべての400番台のエラーは同じに扱われ、robots.txtファイルが存在しないものとみなします。

5xx(サーバーエラー) クロールできるページはありません。(クロールしません)

500番台は一時的なエラーとみなされ、クロールの「完全不許可」となります。
クローラは、サーバーエラー以外のHTTPステータスコードを取得するまでリクエストします。503(サービス利用不可)エラーでは、頻繁にリクエストが行われ、robots.txtに30日以上アクセスできない場合、robots.txtの最後のキャッシュのコピーが使用されます。それも利用できない場合、Googleではクロールの制限はないものとみなします。
クロールを一時的に停止するには、HTTPステータスコード「503」にすることをおすすめします。

Google固有:サイトの構築にミスがあり、robots.txtファイルが存在しない場合「404」ではなく、500番台のステータスコードが返されていると判断できる場合、Googleはそのサイトからの500番台のエラーを「404」エラーとして扱います。

要求の失敗または不完全なデータ DNSやネットワークの問題(タイムアウト、無効な応答、接続のリセットやハングアップ、HTTPチャンクのエラーなど)が原因で、robots.txtファイルが取得できない場合、サーバーエラーとして扱います。
キャッシュ robots.txtがキャッシュされている期間は、基本的に最長で24時間です。
タイムアウトや500番台のエラーのためにキャッシュが更新できないと、さらに長くキャッシュされる場合があります。
robots.txt(ロボッツテキスト)をエラー状態にするとインデックスが削除されてしまうという怖~いお話
https://digital-marketing.jp/seo/robots-txt-error/

robots.txtの記述方法

それでは、robots.txtの適切な記述方法をご紹介します。

robots.txtの書き方

一般的なrobots.txtの記述例

User-agent: *
Disallow: /entry/
Allow: /entry/kiyaku.php #これはコメントです

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

各行は、「フィールド」「コロン(:)」「値」の順で、記述します。スペースは省略可能ですが、読みやすくするために使用しても問題ありません。使用する場合は、半角スペースを使用してください。

ディレクティブ設定

ファイル内にコメントを残す場合は、「#」を記述し、そのあとにコメントを記述します。「#」から行の終わりまでの内容は、コメントとして処理されます。

コメントアウト

「フィールド」は大文字と小文字は区別しません。

フィールドは大文字小文字を区別しない

「値」は「フィールド」によって大文字と小文字が区別されます。

値はフィールドによって大文字と小文字が区別されます

robots.txtのディレクティブ(命令・ルール)定義

利用可能なディレクティブを以下に説明します。

ディレクティブ 設定 説明
User-agent 必須:グループごとに1つまたは複数 ルールを適用する検索エンジンのロボットの名前を記述します。
グループごとに1つまたは複数記述することができます。

記述するユーザーエージェント名は、「Web Robots Database」または「Googleのユーザーエージェント一覧」をご確認ください。

プレフィックス(接頭辞)、サフィックス(接尾辞)、または文字列全体にワイルドカード(*)を使用することができます。

# 例1:Googlebotだけをブロックする
User-agent: Googlebot
Disallow: /
# 例2:GooglebotとAdsbotをブロックする
User-agent: Googlebot
User-agent: AdsBot-Google
Disallow: /
# 例3:すべてのクローラをブロックする
User-agent: *
Disallow: /

※値の大文字と小文字は区別しません。

Disallow ルールごとにDisallowまたはAllowのどちらか1つ必要 User-agentで設定したクローラによるクロールを禁止するディレクトリまたはページ(ルートドメインの相対URL)を記述します。

ページの場合は、ブラウザで表示される完全なページ名にする必要があります。ディレクトリの場合は、末尾を「/」にする必要があります。

プレフィックス(接頭辞)、サフィックス(接尾辞)、または文字列全体にワイルドカード(*)を使用することができます。

# 例1:pages配下のページをすべてのクローラからブロックする
User-agent: *
Disallow: /pages/
# 例2:test.htmlをすべてのクローラからブロックする
User-agent: *
Disallow: /test.html

※値の大文字と小文字が区別されます。

Allow ルールごとにDisallowまたはAllowのどちらか1つ必要 User-agentで設定したクローラによるクロールを必要とするディレクトリまたはページ(ルートドメインの相対URL)を記述します。

ページの場合は、ブラウザで表示される完全なページ名にする必要があります。ディレクトリの場合は、末尾を「/」にする必要があります。

プレフィックス(接頭辞)、サフィックス(接尾辞)、または文字列全体にワイルドカード(*)を使用することができます。

Allowを使用すると、Disallowをオーバーライド(上書き)して、Disallowに設定したディレクトリまたはページのクロールを許可します。

※値の大文字と小文字が区別されます。

Sitemap オプション:複数設定可 サイトマップのURLを完全修飾(https://から始まるURL)で記述します。

Sitemapは、クロールを禁止・許可するディレクトリまたはページを設定するのではなく、クロールする必要のあるページを設定するのに最適な手段です。

例:「https://www.example.com/」

Sitemap: https://www.example.com/sitemap.xml
Sitemap: https://example.com/sitemap.xml
Sitemap: http://www.example.com/sitemap.xml
Sitemap: https://www.aaaaa.com/sitemap.xml

※Googleは、「http」か「https」か、「wwwあり」か「wwwなし」かのチェックは行いません。
※サイトマップのクロス送信で、別ドメインのURLを記述することもできます。サイトマップのクロス送信についての詳細は、「XMLサイトマップ(sitemap.xml)とは?正しい記述方法を徹底解説「サイトマップのクロス送信」」を参照してください。

robots.txtに使用できるのはASCII文字のみです(ワイルドカード・特殊文字を除く)(日本語はASCII文字ではありません)。robots.txtにASCII文字以外の文字が含まれていると、クローラに正しい情報を伝えられなくなる可能性があります。
ASCII文字以外の文字をUTF-8文字または「RFC3986」に従って%記号でエスケープします。

下記のURLは非ASCII文字のエンコードが必要な文字「新宿」を使用している例です。

Disallow: /新宿/

UTF-8エンコードを使用するサーバーでホストされている場合は、次のようにUTF-8エンコードでURLをエスケープします。

Disallow: /%E6%96%B0%E5%AE%BF/
RFC3986 形式
https://www.ietf.org/rfc/rfc3986.txt
(参照元)
⇒ Web Robots Database
⇒ Search Console ヘルプ「Googleクローラの概要(ユーザーエージェント)」

特殊文字

GoogleやBingなどの検索エンジンでは、パスの値として、決まった形式の「ワイルドカード」「特殊文字」をサポートしています。サポートしている「ワイルドカード」「特殊文字」は下記のとおりです。

文字 説明
# 「#」の後にコメント記述をします。
「#」から行の終わりまでの内容は、コメントとして処理されます。
Allow: /entry/kiyaku.php #これはコメントです
Allow: /entry/kiyaku.php
#これもコメントです
$ 指定の文字列で終わるURLの終わりに設定します。
「$」の後にURLは記述できません。
Disallow: /product/campaign/$
* 0個以上の任意の文字を指定します。
一般的に「ワイルドカード」と呼ばれています。
Allow: /blog/*/news.html

グループメンバー

Disallowディレクティブ

「不許可」
Disallowディレクティブは、User-agentで設定したクローラが、アクセスしてはならないパスを設定します。パスを設定しない(空欄)場合、このディレクティブは無視されます。

Disallow: [path]
Allowディレクティブ

「許可」
Allowディレクティブは、User-agentで設定したクローラが、アクセスできるパスを設定します。パスを設定しない(空欄)場合、このディレクティブは無視されます。

Allow: [path]
[path]には、ルートドメインの相対URLを記述します。
[path]の最初には、ルートを意味する「/」を付けます。
[path]の値では、大文字と小文字が区別されます。

非グループメンバー

Sitemap

Google、Bingなどの検索エンジンは、「Sitemap」をサポートしています。

Sitemap: [absoluteURL]
[absoluteURL]にはサイトマップ、サイトマップインデックスなどのURLを完全修飾(https://から始まるURL)で設定します。このURLは、robots.txtと同じドメインでなくてもかまいません。複数の「Sitemap: 」を設定することができます。
非グループメンバーのため、特定のユーザーエージェントには関連付けられません。すべてのクローラが使用できます。

robots.txtの構成要素

  • robots.txtは1つまたは複数のグループで構成されます。
  • 各グループは複数のディレクティブで構成されます。1行につき1つのディレクティブを設定できます。
  • グループには下記の情報を設定します。
    • User-agent:グループに適用する対象の検索エンジンのロボットの名前
    • Disallow:User-agentで設定したクローラによるクロールを禁止するディレクトリまたはページ
    • Allow:User-agentで設定したクローラによるクロールを必要とするディレクトリまたはページ
  • グループは上から下に順番に処理され、各ユーザーエージェント(User-agent)には1つのルールセットだけが適用されます。
  • 初期設定では、ユーザーエージェントは「Disallow」でクロールを禁止されていないすべてのディレクトリまたはページをクロールできます。
  • 「Disallow」「Allow」ディレクティブの値は、大文字と小文字が区別されます。
    たとえば、「Disallow: /pages/」は、「https://www.example.com/pages/」には適用されますが、「https://www.example.com/Pages/」には適用されません。

複数のグループで構成されているときの記述例

「https://www.example.com/robots.txt」の例

# (グループ①)
# 「https://www.example.com/pages/」と「https://www.example.com/blog/」をgooglebotからブロック
# ただし、「/pages/service/」配下へのアクセスは許可
# 「/pages/」「/blog/」以外のディレクトリはすべてデフォルト(初期設定)で許可されています。
User-agent: googlebot
Disallow: /pages/
Disallow: /blog/
Allow: /pages/service/

# (グループ②)
# サイト全体を「bingbot」からブロック
User-agent: bingbot
Disallow: /

robots.txtは、1つまたは複数のグループで構成されます。
各グループは、User-agent行から始まり、グループの適用対象を設定します。

実用的なrobots.txtの例

サイトからすべてのクローラを除外するには

User-agent: *
Disallow: /

すべてのクローラが完全にアクセスできるようにするには

User-agent: *
Disallow:

※または、空のrobots.txtを作成するか、まったく使わない

一部のディレクトリからすべてのクローラを除外するには

User-agent: *
Disallow: /cgi-bin/
Disallow: /pages/
Disallow: /blog/

※ディレクトリ名の後にはスラッシュを付けます。
※非公開ページへのアクセスをブロックする場合は、robots.txtを使用するのではなく、ログイン認証など、適切な認証方法を使用してください。
※robots.txtでブロックしているページであっても、クロールされないままインデックスに登録されることがあります。
※robots.txtはすべてのユーザーが見ることができるため、非公開ページの場所を知られてしまう可能性があります。

指定のクローラを除外するには

User-agent: bingbot
Disallow: /
User-agent: bingbot
Disallow: /

User-agent: *
Allow: /

指定のクローラだけをアクセスできるようにするためには

User-agent: googlebot
Disallow:

User-agent: *
Disallow: /

User-agent: googlebot
Allow: /

User-agent: *
Disallow: /

User-agent: *
Disallow: /

User-agent: googlebot
Allow: /

※異なる「User-agent」に同じパスを設定し、「Disallow」「Allow」を設定している場合、クローラは、合致する最も限定的なユーザーエージェントを適用します。上記は、限定的なユーザーエージェント「googlebot」が適用されるので、googlebotだけアクセスできると判定します。

指定のページに対するクロールを禁止するには

User-agent: *
Disallow: /test_file.html

※スラッシュの後に対象ページを設定します。

指定の画像に対するGoogle画像検索からのクロールを禁止するには

User-agent: Googlebot-Image
Disallow: /images/dogs.jpg

サイト内すべての画像に対するGoogle画像検索からのクロールを禁止するには

User-agent: Googlebot-Image
Disallow: /

指定のファイル形式のファイルに対するクロールを禁止するには

User-agent: *
Disallow: /*.gif$

指定の文字列で終わるURLに対するクロールを禁止するには

User-agent: *
Disallow: /*.xlsx$

※最後の文字の後に「$」を記述します。「.xlsx」で終わるすべてのURLのクロールが禁止されます。

robots.txtクイズ

質問)下記の記述は、クローラはどう読み取るでしょうか?

User-agent: *
Disallow: /
Allow: /

答え)クロールをすべて許可します。
解説)同じURLで、同一のユーザーエージェントで、「Disallow」と「Allow」がある場合は、「Allow」が、「Disallow」をオーバーライド(上書き)して、Disallowに設定したディレクトリまたはページのクロールを許可します。

「disallow」「allow」ディレクティブのURL一致判定

パスの例 説明
/ ルート配下にあるすべてのURLが一致。
/* 「/」と同じくルート配下にあるすべてのURLが一致。末尾の「*(ワイルドカード)」は、無視されます。
/fruit 指定の文字列「/fruit」で始まるURLが対象となります。

🙆一致します:
・/fruit
・/fruit.html
・/fruit/banana.html
・/fruitjuicedrink
・/fruitjuicedrink/banana.html
・/fruit.php?id=banana

🙅一致しません:
・/Fruit.html
・/dragonfruit
・/?id=fruit

/fruit* /fruitと同じです。末尾の「*(ワイルドカード)」は、無視されます。
/fruit/ 末尾が「/」の場合、このディレクトリ内のすべてが対象となります。

🙆一致します:
・/fruit/
・/fruit/banana.html
・/fruit/?id=banana
・/fruit/juice/grape.html

🙅一致しません:
・/fruit
・/fruit.html
・/Fruit/banana.php

/*.php 指定の文字列「.php」の前に0個以上の任意の文字列があるURLが対象となります。

🙆一致します:
・/banana.php
・/fruit/banana.php
・/fruit/juice.php?id=banana
・/fruit/juice.php.banana.html
・/banana.php/

🙅一致しません:
・/(/index.phpに関連付けされている場合でも一致しません)
・/banana.PHP

/*.php$ 指定の文字列「.php」で終わるURLが対象となります。

🙆一致します:
・/banana.php
・/fruit/banana.php

🙅一致しません:
・/fruit/juice.php?id=banana
・/banana.php/
・/banana.php5
・/banana.PHP

/fruit*.php 指定の文字列「/fruit」で始まり、0個以上の任意の文字列の後に「.php」があるURLが対象となります。

🙆一致します:
・/fruit.php
・/fruitjuicedrink/dragonfruit.php?id=banana

🙅一致しません:
・/Fruit.PHP

ホスティングサービスを使用している場合

ホスティングサービスを使用している場合は、セキュリティの関係上、robots.txtファイルを直接編集できない場合があります。そのような場合、ホスティングサービス側でrobots.txtの設定をすることができるツールが用意されていることがあります。詳しくは、ホスティングサービスへ問い合わせてください。

robots.txtの限界を知る

設定したページへのクロールを禁止する手段として、robots.txtだけでは難しい場合があります。そういった場合、他の方法を検討することが必要です。

Google以外の検索エンジンがrobots.txtに対応するとは限らない

robots.txtの指示に従うかどうかはクローラしだいです。Googlebotなどの信頼できるクローラは、robots.txtの指示に従います。他の検索エンジンのクローラは、robots.txtの指示に従うとは限りません。そのため、サイトを信頼できないクローラからブロックするには、ファイルをパスワードで保護するなど、他の方法を利用することをおすすめします。

(参照元)
⇒ Search Console ヘルプ「Googleと共有するコンテンツを制限する/コンテンツをブロックする方法」

クローラによって処理が異なる

Googlebotなどの信頼できるクローラは、robots.txtファイルの指示に従いますが、各検索エンジンのクローラごとにディレクティブ(命令・ルール)の処理が異なる可能性もあります。各クローラに対応するように最適な構文を設定する必要があります。

robots.txtでクローラをブロックしていても他のサイトからリンクが設置されていればインデックスに登録される可能性があります

robots.txtでクローラをブロックしているページが他のサイトからリンクされている場合、そのURLを検出してインデックスに登録してしまう可能性はあります。そのため、robots.txtでブロックしているページが検索結果に表示されることもあります。

特定のページが検索結果に表示されるのを確実に防ぐ方法は、ページをパスワードで保護するか、noindexメタタグまたはレスポンスヘッダーを使用します。もしくは該当ページを完全に削除します。

インデックスが削除されてから「Disallow」を使用する

もし、すでにインデックスされているURLを削除したいときは、まず、noindexメタタグを指定するなどして、インデックスが無くなったことを確認してからrobots.txtで「Disallow」を設定します。robots.txtで「Disallow」が設定してあると、そのページに設定してあるnoindexメタタグも見ることができません。

robots.txtの「Disallow」はあくまでクロールの拒否であってインデックスの削除ではありません。

まとめ

さて、ここまでロボッツテキスト(robots.txt)の記述方法をご紹介してきましたが、いかがでしたか?
ロボット(検索エンジン)をテキストファイルで制御するのには、複雑でとても手間がかかりますが、サイトを効率よく見てもらい、クロールしてもらいたくないファイルを知らせるには必要な作業です。みなさまもぜひ、この記事を参考に設定してみてください。

(参照元)
⇒ Robots.txtの仕様「Google検索デベロッパーガイド | Google Developers」
⇒ Search Console ヘルプ「robots.txtの概要」
⇒ Search Console ヘルプ「robots.txtファイルを作成する」
⇒ The Web Robots Pages
⇒ Robots Exclusion Protocol(ロボット排除プロトコル)
⇒ Googleのオープンソースのrobots.txtライブラリ
このエントリーをはてなブックマークに追加
The following two tabs change content below.
digital-marketing

digital-marketing

デジタルマーケティング研究所では、デジタルマーケティングの施策・広告・技術を、分析・実装・検証して、WEB担当者・マーケティング担当者の方の役立つ情報を発信していきます。
SNSでフォロー

Contact

Webマーケティングに関わる施策全般をワンストップでご提供します。
お気軽にご相談ください。

Webマーケティング最新情報をお届け
東京営業所
東京都新宿区西新宿1丁目6-1 新宿エルタワー3階
電話番号 03-6374-1393 FAX番号 0422-57-2761
大阪営業所
大阪府大阪市北区堂島1丁目5-30 堂島プラザビル10F
電話番号 06-7176-3367 FAX番号 06-7176-3368
Copyright © 2020 DM SOLUTIONS Co.,Ltd. All rights reserved.