
WordPressは出力するhtmledeデータのheadタグ内に、robotsメタタグを生成しています。
このタグを削除したり、内容を変更してみます。
robotsメタタグの内容
robotsメタタグは、表示設定で「検索エンジンがサイトをインデックスしないようにする」にチェックが入っているかどうかで内容が変わります。
チェックが入っていると、次のタグが生成されます。
<meta name='robots' content='noindex, nofollow' />
入ってないと、次のタグが生成されます。
<meta name='robots' content='max-image-preview:large' />
どこで出力しているのか
robotsメタタグはwp_head()関数を呼び出したタイミングで生成されています。
wp_head()は、wp_headアクションを実行しているだけなので、このアクションが呼び出している関数を確認してみます。
確認は、次の記事で紹介している方法で行います。
次のように、上の記事で紹介しているlist_filter()関数を呼び出します。
- list_filter('wp_head');
すると、次の情報が出力しました。
- *************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)]
実際はもっと長いですが、今回の目的と関係ないので省略してあります。
名前から推測すると、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";
- }
最初にwp_robotsフィルターを実行しています。
後に続くコードを見ると、このフィルターは連想配列を返すようです。
そして値が文字列なら「キー:値」を、それ以外なら「キー」をcontent属性にセットしています。
では、wp_robotsフィルターの内容を確認してみます。
方法は、wp_headアクションの時と同じです。
- list_filter('wp_robots');
次のように表示されました。
- *************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)]
上の三つは記事の種類ごとに、noindex、nofollowを判断しています。
4つめは max-image-preview のを判断しています。
ここまでわかれば、robotsメタタグの制御をおこなうことができます。
robotsメタタグを削除する
robotsメタタグを削除したいなら、wp_headアクションからwp_robots関数を除去します。
- remove_action('wp_head','wp_robots' ,1);
ページの種別ごとに表示・非表示を切り替えたい
特定のページのみ表示したり削除したりを制御したい場合は、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();
- }
content属性を追加したい
content属性を追加したいときは、wp_robotsフィルターを追加します。
- add_filter( 'wp_robots' , 'my_robots_filter' , 20);
- function my_robots_filter( array $robots ) {
- $robots['noimageindex'] = true;
- return $robots;
- }
既存の属性値よりも前に置きたいときは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";
- }
■Googleで他サイト検索
■僕がおススメするアフィリエイト教材
■マーケティング施策ツール