概要説明
WordPress が自動で作る robots.txt に p タグや br タグが混ざると、検索エンジンが正しく読めないおそれがあります。原因の探し方と、robots_txt フィルターでタグを消す functions.php のコード(作業環境で確かめた結果つき)。
~ 目次 ~
robots.txt に p タグが入ってしまう
WordPress は、サイトに robots.txt のファイルがないとき、https://(サイトの URL)/robots.txt を開いたときに中身を自動で作って返します。
ところが、テーマやプラグインの組み合わせによっては、その中身に本文用のタグ(<p> や <br />)が混ざることがあります。
<p>User-agent: *<br /> Disallow: /wp-admin/<br /> Allow: /wp-admin/admin-ajax.php</p>
本来は、次のようにタグのない文字だけです。
User-agent: * Disallow: /wp-admin/ Allow: /wp-admin/admin-ajax.php
robots.txt は、検索エンジンのロボットに「どこを見てよいか」を伝えるファイルです。タグが混ざると、行の頭に <p> が付いて、決まりが正しく読まれないおそれがあります。
ブラウザで robots.txt を開いて、右クリックの「ページのソースを表示」で、タグが混ざっていないかを確かめます。
サイトのいちばん上のフォルダに robots.txt のファイルを置いているときは、サーバーがそのファイルをそのまま返すので、WordPress は中身を作りません。この記事は、ファイルを置かずに WordPress に作らせているときの話です。
原因を探す
WordPress そのものは、robots.txt にタグを入れません。タグが混ざるのは、たいてい次のどちらかです。
| 原因 | どういうことか |
|---|---|
| robots.txt を書き換えるプラグイン・テーマ | robots_txt というフィルターで中身を足すときに、本文用の整形(自動で p を付ける処理)を通してしまう |
| 出力をまるごと書き換える処理 | ページの出力全体に手を入れる処理が、robots.txt にも効いてしまう |
プラグインを 1 つずつ止めて、どれで直るかを見るのが確実です。すぐに直したいときや、原因のプラグインを止められないときは、次のコードでタグを消します。
コード:robots_txt フィルターでタグを消す
テーマの functions.php(子テーマがあれば子テーマ)に足します。
/**
* robots.txt に混ざった p・br のタグを消す
* PHP_INT_MAX:ほかのプラグイン(SEO のプラグインなど)が中身を作り直したあと、いちばん最後に動かす
*/
add_filter( 'robots_txt', function ( $output ) {
$output = str_replace( array( '<p>', '</p>', '<br />', '<br>' ), '', $output );
return trim( $output ) . "\n";
}, PHP_INT_MAX );
| 書き方 | 役目 |
|---|---|
| robots_txt のフィルター | WordPress が robots.txt を返す直前の中身を受け取って、書き換える |
| 優先度 PHP_INT_MAX | いちばん最後に動かす。SEO のプラグインなどが中身を作り直したあとでも、タグを消せる |
| str_replace | <p>・</p>・<br /> だけを消す。決まりの文字はそのまま |
前はこの記事で、URL に robots.txt が入っているときに出力をまるごと書き換える方法を紹介していました。robots_txt のフィルターなら、robots.txt の中身だけに効くので、ほかのページに影響しません。
確かめた結果
作業環境(WordPress 7.1・All in One SEO あり)で、わざとタグを入れて試しました。
| 試したこと | robots.txt |
|---|---|
| robots_txt のフィルターで、本文用の整形(wpautop)をわざと通す | 行の頭に <p>、行の終わりに <br /> が付いた |
| 上のコードを足す | タグが消えて、元の文字だけに戻った |
試しに入れた処理は、確かめたあと消しました。


