WordPress:robotsメタタグを削除またはcontent属性を変更する

WordPressは出力するhtmledeデータのheadタグ内に、robotsメタタグを生成しています。
このタグを削除したり、内容を変更してみます。

robotsメタタグの内容

robotsメタタグは、表示設定で「検索エンジンがサイトをインデックスしないようにする」にチェックが入っているかどうかで内容が変わります。

検索エンジンがサイトをインデックスしないようにする

チェックが入っていると、次のタグが生成されます。

<meta name='robots' content='noindex, nofollow' />

入ってないと、次のタグが生成されます。

<meta name='robots' content='max-image-preview:large' />

WordPress5.9で確認しているので、今後のバージョンでは変更されている可能性があります。

どこで出力しているのか

robotsメタタグはwp_head()関数を呼び出したタイミングで生成されています。
wp_head()は、wp_headアクションを実行しているだけなので、このアクションが呼び出している関数を確認してみます。

確認は、次の記事で紹介している方法で行います。

WordPress:アクションまたはフィルターに登録されている関数をリストアップする

次のように、上の記事で紹介しているlist_filter()関数を呼び出します。

  • list_filter('wp_head');
AFFS Simple Code Viewer
Copy

すると、次の情報が出力しました。

  • *************wp_head
  • 1 , _wp_render_title_tag [/wp-includes/general-template.php(1287)]
  • 1 , wp_enqueue_scripts [/wp-includes/script-loader.php(2099)]
  • 1 , wp_robots [/wp-includes/robots-template.php(20)]
  • 1 , wp_post_preview_js [/wp-includes/functions.php(7328)]
AFFS Simple Code Viewer
Copy

実際はもっと長いですが、今回の目的と関係ないので省略してあります。

名前から推測すると、wp_robots()関数がrobotsメタタグを生成していそうですね。
この関数は、次のようなコードでした。

  • function wp_robots() {
  • $robots = apply_filters( 'wp_robots', array() );
  • $robots_strings = array();
  • foreach ( $robots as $directive => $value ) {
  • if ( is_string( $value ) ) {
  • // If a string value, include it as value for the directive.
  • $robots_strings[] = "{$directive}:{$value}";
  • } elseif ( $value ) {
  • // Otherwise, include the directive if it is truthy.
  • $robots_strings[] = $directive;
  • }
  • }
  • if ( empty( $robots_strings ) ) {
  • return;
  • }
  • echo "<meta name='robots' content='" . esc_attr( implode( ', ', $robots_strings ) ) . "' />\n";
  • }
AFFS Simple Code Viewer
Copy

最初にwp_robotsフィルターを実行しています。
後に続くコードを見ると、このフィルターは連想配列を返すようです。
そして値が文字列なら「キー:値」を、それ以外なら「キー」をcontent属性にセットしています。

では、wp_robotsフィルターの内容を確認してみます。
方法は、wp_headアクションの時と同じです。

  • list_filter('wp_robots');
AFFS Simple Code Viewer
Copy

次のように表示されました。

  • *************wp_robots
  • 10 , wp_robots_noindex [/wp-includes/robots-template.php(70)]
  • 10 , wp_robots_noindex_embeds [/wp-includes/robots-template.php(92)]
  • 10 , wp_robots_noindex_search [/wp-includes/robots-template.php(118)]
  • 10 , wp_robots_max_image_preview_large [/wp-includes/robots-template.php(188)]
AFFS Simple Code Viewer
Copy

上の三つは記事の種類ごとに、noindex、nofollowを判断しています。
4つめは max-image-preview のを判断しています。

ここまでわかれば、robotsメタタグの制御をおこなうことができます。

robotsメタタグを削除する

robotsメタタグを削除したいなら、wp_headアクションからwp_robots関数を除去します。

  • remove_action('wp_head','wp_robots' ,1);
AFFS Simple Code Viewer
Copy

ページの種別ごとに表示・非表示を切り替えたい

特定のページのみ表示したり削除したりを制御したい場合は、wp_robots関数を除去したと独自の関数をアクションに追加します。

  • remove_action('wp_head','wp_robots' ,1);
  • add_action('wp_head','my_robots' ,1);
  • function my_robots() {
  • if( is_single() ) return;
  • wp_robots();
  • }
AFFS Simple Code Viewer
Copy

content属性を追加したい

content属性を追加したいときは、wp_robotsフィルターを追加します。

  • add_filter( 'wp_robots' , 'my_robots_filter' , 20);
  • function my_robots_filter( array $robots ) {
  • $robots['noimageindex'] = true;
  • return $robots;
  • }
AFFS Simple Code Viewer
Copy

既存の属性値よりも前に置きたいときは3番目の引数に10より小さい値を、後ろに置きたいときは10より大きい値を指定します。

googlebotに変更したい

メタタグのname属性を 'robots' から 'googlebot' など別のものに変更したいときは、wp_robots関数を除去したと独自の関数をアクションに追加します。
基本的にはwp_robots()関数を流用します。

  • remove_action('wp_head','wp_robots' ,1);
  • add_action('wp_head','my_robots' ,1);
  • function my_robots() {
  • $robots = apply_filters( 'wp_robots', array() );
  • $robots_strings = array();
  • foreach ( $robots as $directive => $value ) {
  • if ( is_string( $value ) ) {
  • $robots_strings[] = "{$directive}:{$value}";
  • } elseif ( $value ) {
  • $robots_strings[] = $directive;
  • }
  • }
  • if ( empty( $robots_strings ) ) {
  • return;
  • }
  • // name='robots' を name='googlebot' に変更
  • echo "<meta name='googlebot' content='" . esc_attr( implode( ', ', $robots_strings ) ) . "' />\n";
  • }
AFFS Simple Code Viewer
Copy