技術ネタ

Cocoonのmeta description出力をOFFに(AIOSEO併用)

技術ネタ
スポンサーリンク

どんな記事?

テーマとAll in One SEOプラグインでメタタグの出力が競合していたので、テーマのメタタグ出力を抑制することにした記事。子テーマでのアクションフックについても説明。

経緯

CocoonのSEO対策で充分といえば充分なのですが、トップページと投稿ページでTwitter Cardのタイプを変えたりできないので(できないよね?)、AIOSEOを使うことにしました。そこで問題が。

SEO対策のためのメタタグ出力が競合してしまいます。当然といえば当然ですね。Cocoon設定でOFFにできるものはすべてOFFにしたのですが、meta descriptionがどうしても消えてくれませんでした。

ここをOFFにしたんですけどね…

meta descriptionが重複しているとクローラーが正しく表示してくれず、場合によってはページランクが下がったりするなど悪影響ばかりです。

調査

なのでメタタグの出力処理を無効にすることにしました。

cocoon-master\lib\seo.phpに以下の記述がありますのでこれを無効にします。

//メタディスクリプションタグを出力する
add_action( 'wp_head', 'generate_meta_description_tag' );
if ( !function_exists( 'generate_meta_description_tag' ) ):
function generate_meta_description_tag() {
  $description = get_meta_description_text();

  if ($description && !is_wpforo_plugin_page()) {
    echo '<!-- '.THEME_NAME_CAMEL.' meta description -->'.PHP_EOL;
    echo '<meta name="description" content="'.esc_attr($description).'">'.PHP_EOL;
  }
}
endif;

対策

function.php

// Cocoonが<meta name="description">を出力しないようにする
function remove_metatag_func(){
    remove_action('wp_head','generate_meta_description_tag');
}
add_action('after_setup_theme','remove_metatag_func');

こんな感じで書けばOKです。

generate_meta_description_tagがCocoon親テーマでフックされていた関数です。

ポイント

またここでポイントとなるのは親テーマのアクションフックを子テーマから削除するという点。

基本的には「親テーマ」 → 「子テーマ」の順に読み込まれ親テーマの内容を子テーマで上書きするのですが、functions.phpについては親テーマのほうがあとになっています。つまり子テーマでアクションフックをしても親テーマが優先になってしまうのです。

そこで親テーマの読み込みが終了してから実行されるよう、アクションフックにafter_setup_themeを設定し、remove_actionを登録しています。もし親テーマでadd_filterさている処理をフックしたいならremove_filterを使います。アクションとフィルターの違いについては別の機会にまとめようかな。

まとめ

無事にCocoonからのメタタグを抑制することができました。AIOSEOは重いという意見も耳にしますが、使い勝手がいいのも確かです。使い分けつつ、今後またベターな方法があれば切り替えていこうと思います。

タイトルとURLをコピーしました