Yoast SEOでのタイトルの書き換えの無効化
WordPressのプラグイン Yoast SEO でのタイトルの書き換えを無効化したかったので設定枠を探していたのだが・・・。
なんと無い。昔はあった気がするのに。
既にサイトを立ち上げて、しばらくして検索エンジンにインデックスされていると、「Yoast SEOでのmetaタグの情報の書き出しなどは欲しいけれども、titleタグの書き換えはとりあえず余計」と思うときがある。そんな場合にできる方法を記しておく。
とりあえず、やる前に少しコードの解析で行ったこととしては、Yoast SEOプラグインのコードの中で、titleタグの書き換えなどに使用する「wp_title」、そして、WP Ver4.4から追加されている「pre_get_document_title」でのアクションorフィルターフックを探してみた。
こいつらをグレップした結果、「wordpress-seo」→「frontend」ディレクトリの中の「class-frontend.php」の中にあった。
探しているときに少し中身を見てみたけど、これプログラムのすごい可読性いいですね。可読性がよくメンテナンス性の高いコードはプログラマへの親和性が高く、システムエンジニアの優秀さを意味しており、少なからずコードを書きたる者、こうなりたいと俺は決意を新たにs・・・いやそれはとりあえずどうでもいいわ。
で、本題に戻るけど、前述のフックはWPSEO_Frontendクラスのコンストラクタメソッドの中にきちんと書いてある。
class WPSEO_Frontend {
~~~~~~~~~~~~~~~
/**
* Class constructor
*
* Adds and removes a lot of filters.
*/
protected function __construct() {
~~~~~~~~~~~~~~~
// Remove actions that we will handle through our wpseo_head call, and probably change the output of.
remove_action( 'wp_head', 'rel_canonical' );
remove_action( 'wp_head', 'index_rel_link' );
remove_action( 'wp_head', 'start_post_rel_link' );
remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head' );
remove_action( 'wp_head', 'noindex', 1 );
// ↓こいつら↓
// When using WP 4.4, just use the new hook.
add_filter( 'pre_get_document_title', array( $this, 'title' ), 15 );
add_filter( 'wp_title', array( $this, 'title' ), 15, 3 );
// ↑こいつら↑
add_filter( 'thematic_doctitle', array( $this, 'title' ), 15 );
add_action( 'wp', array( $this, 'page_redirect' ), 99 );
add_action( 'template_redirect', array( $this, 'noindex_feed' ) );
add_filter( 'loginout', array( $this, 'nofollow_link' ) );
add_filter( 'register', array( $this, 'nofollow_link' ) );
// Fix the WooThemes woo_title() output.
add_filter( 'woo_title', array( $this, 'fix_woo_title' ), 99 );
~~~~~~~~~~~~~~~
}
~~~~~~~~~~~~~~~
}
とりあえずこいつらをコメントアウトで消してみて試したところ、titleタグの書き換えは無効化することができた。
だが、このままだとプラグインの中身を直接いじらなければならないゆえに、更新した際にいちいちコメントアウトをしなければならない。
そこで、WPSEO_Frontendクラスでフックしている箇所へremove_filterでフックを解除してこれを無効化してやることを思いつく。
毎度おなじみのfunctions.phpへ以下のコードを追加した。
/* Yoast SEOでのタイトルタグ書き換えを無効化(pre_get_document_title) */
function theme_remove_yoast_seo_pre_get_document_title(){
remove_filter('pre_get_document_title', array('WPSEO_Frontend', 'title'));
}
add_action('pre_get_document_title', 'theme_remove_yoast_seo_pre_get_document_title', 16);
/* Yoast SEOでのタイトル書き換えを無効化(wp_title) */
function theme_remove_yoast_seo_wp_title(){
remove_filter('wp_title', array('WPSEO_Frontend', 'title'), 15, 3);
}
add_action('wp_title', 'theme_remove_yoast_seo_wp_title', 15, 3);
両方にフックしてるので両方にリムーブ要ります。
フックを消しているだけなので最も安全かつ簡単な方法で、Yoast SEOのtitleタグの書き換えを無効化できる。
斯くして、上記のコードで同プラグインによるタイトルの書き換えを無効化してさよならすることができた。あばよとっつぁ~ん。
ただ、難点は、metaのog:titleはYoast SEOでの設定そのままになってしまうので、そこら辺。
とりあえず処置としては上記で大丈夫なので、調査と処置はそこまでで打ち切った。(むしろ、探せばもっと出てきそうで怖いし。)
書き換えだけをとりあえず無効化したいというときは使えばいいと思う。
