最新の記事や関連記事をお探しの方は下の「サイト内検索」で検索してみてください。
中華系の検索エンジンのロボットはしつこいのでそういったロボットを排除するためにrobots.txtに追記したいんですが、WordPressを使っていて実体ファイルを作成してしまうとプラグインなどでrobots.txtをカスタマイズしている場合(※1)にプラグイン側の設定が反映できないので、ここではrobots_txtフィルターを使ってカスタマイズしてみます。
その前に、robots.txtとは?
ウェブサイトの所有者がボットに対して指示したい場合、そのウェブサイトの階層のルートに robots.txt というテキストファイルを置く(例えば、www.example.com/robots.txt)。サイト側の指示に従う選択をしているボットは、まずこのファイルにアクセスし、その指示を読み込んで、それに従ってそのウェブサイトの他のファイルの読み込みを行う。このファイルがない場合、ボットはそのサイトの所有者が特に何も指示していないと判断する。
ということで、お行儀の良い検索エンジンのロボットであればrobots.txtを読み込んで指示されたようにファイルの読み込みをするはずです。
WordPressのrobots.txt
WordPressではドキュメントルートに robots.txt の実体ファイルが存在しない場合は自動的に次のような出力をしてくれます。
| 1 2 3 4 | User-agent: * Disallow: /wp-admin/ Allow: /wp-admin/admin-ajax.php | 
すべてのロボットに対して /wp-admin/ 以下は読み込みを拒否するけど、 /wp-admin/admin-ajax.php は許可するよ。
となります。
管理画面の設定>表示設定 にある 検索エンジンがサイトをインデックスしないようにする をチェックしていると次のようになります。
| 1 2 3 | User-agent: * Disallow: / | 
すべてのロボットに対してすべてのファイルの読み込みを拒否する。
となります。
よくGoogleの検索結果で「この結果の説明は、このサイトの robots.txt により表示されません」となっている場合はこの設定になっている場合があります。
実際にカスタマイズ
前回のwidget_tag_cloud_argsフィルターと同じように利用中のテーマに含まれる functions.php に以下のように追記します。
| 1 2 3 4 5 6 7 8 | // 特定のユーザーエージェントを持つ検索エンジンロボットを排除したい function custome_robots_txt_filter($output = '', $public = true) {     $output .= "User-Agent: 360Spider\n";     $output .= "Disallow: /\n";     return $output; } add_filter('robots_txt', 'custome_robots_txt_filter', 10, 2); | 
ここでは 360Spiderというロボットを対象にしています。
前回と違うのは8行目 add_filter() のときの第2引数、第3引数が増えました。
- 第2引数は同じフィルターに対して複数のフィルターが登録されているときに実行される順番を指定します。数字の小さい順にフィルターが適用されます。ここでは 10 を指定します。
- 第3引数はフィルターに設定した関数に対していくつの引数を渡すかというせっていです。robots_txt フィルターが実行されるときは2つの引数($outputと$public)を渡してくれるので、ここでは 2を指定します。
https://tamulab.jp/robots.txt にアクセスすると次のようなrobots.txtになりました。
| 1 2 3 4 5 6 7 8 | Sitemap: https://tamulab.jp/sitemap.xml Sitemap: https://tamulab.jp/news-sitemap.xml User-agent: * Disallow: /wp-admin/ Allow: /wp-admin/admin-ajax.php User-Agent: 360Spider Disallow: / | 
これで 360Spider というユーザーエージェントをもつロボットに対してはすべてを拒否しますが、それ以外のユーザーエージェントのロボットに対しては従来通り、 /wp-admin/admin-ajax.php を除く /wp-admin/ 以下を拒否する。 となります。
他の検索エンジンロボットも排除したい
他のロボットのユーザーエージェントを指定するときは3,4行目をコピーして、4行目以降にコピペして、 User-Agent: の後ろに排除したいロボットのユーザーエージェントを記入します。
| 1 2 3 4 5 6 7 8 | function custome_robots_txt_filter($output = '', $public = true) {     $output .= "User-Agent: 360Spider\n";     $output .= "Disallow: /\n";     $output .= "User-Agent: YodaoBot\n";     $output .= "Disallow: /\n";     return $output; } | 
最後に
ただし、対象の検索エンジンロボットが robots.txt を読み込んで対応してくれるかどうかという点がのこります。
お行儀の悪い検索エンジンロボットだと robots.txt を無視する場合もあるので、そのようなときは別の方法でアクセス拒否をする必要があります。
※1: Jetpackで サイトマップ>XMLサイトマップを生成 がONになっているとrobots.txtに次のように追加されています。
| 1 2 3 | Sitemap: https://tamulab.jp/sitemap.xml Sitemap: https://tamulab.jp/news-sitemap.xml | 
