ジユウメモメモ

気になるガジェットや映画のはなしをメモメモ

All in One SEO Pack

WordPress自作テーマでAll in One SEO Packを外すためにやったことまとめ

2019年6月30日

All in One SEO Packのtitleタグ上書きが強力過ぎる…。

 WordPressのSEO対策の有名プラグイン「All in One SEO Pack」。無料版は設定項目が必要最小限で初心者にも使いやすく(ユーザーも多いので使い方は検索すればいくらでもヒットする)、SNS向けのOGP設定、検索エンジンのクローラー向けのXML Sitemap出力機能なども利用でき、なるべくプラグインを増やしたくないときに便利だ。

WordPress.org:All in One SEO Pack

自作テーマで作ったWordPressサイト(このブログとは別)にもインストールし、そちらではtitleタグの書き換え機能を無効にして、カスタム分類(タクソノミー)ページを含むtitleタグの内容をテーマ側で出し分けていたのだが、All in One SEO Packがバージョン3.0になったのを機に、titleタグの書き換え機能を無効にすることができなくなってしまった(「タイトルを書き換える:利用/利用停止」のメニューが削除された)。

All in One SEO Pack 2.12.2の「タイトル設定」

All in One SEO Pack バージョン2.12.1までの「タイトル設定」タブ

All in One SEO Pack 3.11の「タイトル設定」

バージョン3.0で「タイトルの書き換え」オプションが削除された。プラグインの公式サイトでも「削除した」と宣言されている。

プラグイン設定画面の「一般設定」タブにある「元のタイトルを利用:有効/無効」の「有効」にチェックをすれば「テーマで使用されるタイトルを取得する」とあるのだが、有効にしてもセパレーターの表記がデフォルトの「-」ではなく「||」となるなど、思ったとおりに表示されない。プラグインを停止しない限り、デフォルトのtitleさえ正しく出すことができない状態だ。

All in One SEO Pack 3.11の「一般設定」

「一般設定」タブの「元のタイトルを利用」を無効にしても思うようにタイトルが書き換わらない。

有料版である、All in One SEO Pack Proにはカスタム分類にもタイトル入力欄を出すことができ、思い通りにtitleタグを出し分けることが可能となるのだが、Proは買い切りではなく年会費のサブスクリプションモデル。titleタグ書き換え機能を除けば無料版で満足できているので悩むところ。

調べてみると「aioseop_title」というフィルターフックをfunction.phpに追加することでtitleタグをカスタマイズできるようなのだが、自分には使い方がわからなかった。

Semper Plugins:All in One SEO Pack Title Filter – aioseop_title

実のところ、All in One SEO Packは使いやすく便利ではあるのだが、個人的に不具合に遭遇することが少なくないイメージもある(以前にmeta description入力欄が突然消えたこともあった。大抵はすぐにアップデートで解消されるし、今回のtitleタグカスタマイズのわがままは「Proを買え」という話なのだが)。今回の件を機に、これまで度々考えてきた「All in One SEO Packを外してSEO機能をテーマに持たせる」を実行してみることにした(プラグインページから過去バージョンをダウンロードしてアップデートせずに使い続けることもできるが、セキュリティなどを考えると現実的ではない)。

All in One SEO Packをアンインストールするために行った手順と、参考になったサイト

All in One SEO Packを完全に停止する前に、使っていた機能を並べて、一つずつ順に別プラグイン、または自作テーマのfunction.phpに同じ機能を移していくことにした。

停止前に使っていたAll in One SEO Packの機能は、以下の通り(数字は停止していった順)。

All in One SEO Packの「機能管理」から有効化

  1. XMLサイトマップ
  2. ソーシャルメディア(OGP/TwitterCards)

All in One SEO Packの「一般設定」画面

  1. meta desctiption / meta keywords
  2. Canonical URL
All in One SEO Pack 3.11の「機能管理」

まずは「機能管理」で有効化した機能から外していく。

「titleタグの出し分け」、「Schema.org マークアップ」、「GoogleアナリティクスID」、「任意のページでnoindexを使用」はテーマ側で設定済みだったのでここでは省く。また、function.phpにコードを追加する場面では、問題が起きるとサイトの表示に影響が出たりするため、編集前に元のファイルをバックアップし、FTPソフトですぐに元に戻せるようにしておくこと。

1.サイトマップ作成機能をGoogle XML Sitemapsに切り替え

 検索エンジンのクローラー向けのSMLサイトマップを送信するプラグインは、以前に使用していた「Google XML Sitemaps」に戻した。息の長い有名プラグインだが、(プラグインページのサムネイルや公式サイトはかなり古くなっているが)今でもアップデートが継続されており、WordPress5.0以降の最新版に対応している。プラグインを有効後、そのままの設定で特に問題はない。

WordPress.org:Google XML Sitemaps

2.OGP / TwitterCardsの設定をfunction.phpから行う

SNS向けのOGP、Twitter投稿時にサムネイルを表示するTwitterCardsの設定は以下の記事を参考にして問題なく動作した。

サルワカ:【WordPress】OGPとTwitterカードをプラグイン無しで設定する方法

ここで一つ注意なのが、All in One SEO Packと一緒にJetpackをインストールしていた場合。実はJetpackにはOGP/TwitterCardsの出力機能があり、All in One SEO Packのソーシャルメディア機能を有効化すると、Jetpack側のOGP出力が無効化されるのだが、All in One SEO Packのソーシャルメディア機能を無効化すると、Jetpack側のOGP出力が有効化されるため、そのまま上記の方法でテーマ側にOGP出力機能を持たせると、OGPの設定が重複して出力されてしまう。

Jetpackをインストールしている場合は、All in One SEO Packのソーシャルメディアを無効化したあとに、一度記事ページを表示してソースを確認する必要がある。

3.meta keywordsを廃止、meta desctiptionの内容をWordPressの「抜粋」に切り替え

 まず、meta keywordsについては今では検索エンジンの順位付けに利用されていないとのことなので、思い切って使わないことにした。meta descriptionについてはカスタムフィールドを利用することも考えたが、WordPressの標準機能である「抜粋」を利用していなかったので(アーカイブページでも表示していなかった)、それを活用することにした。ただし、「抜粋」入力欄はそのままでは「投稿」の編集画面にしか現れないので、「固定ページ」でも表示されるように次の記事を参考にしてカスタマイズを行った。

Takumi Hirashima Artworks:WordPress 固定ページで抜粋を表示する方法

 これまでの「投稿」ページのmeta descriptionの内容は、All in One SEO Packのdescription入力欄に記述してあるので、それを記事ごとに抜粋へコピーしていくことになるのだが、記事数が多いとかなり時間を取られる。次の記事にPHPを使った一括コピー方法があったのでかなり助かった。(リンク先記事中のPHPをプラグイン管理画面から有効化すると、処理時間が長くなるとエラーが出るので何度か繰り返す必要があります。また、有効化すると全ての記事の最終更新日が更新されてしまいます。

さくっとwordpress∞:All in one SEOのdescriptionを本文抜粋に移行する

 WordPress標準の抜粋入力欄にはAll in One SEO Packのdescription入力欄にあった文字数カウント機能がない。次の記事を参考にすると同じ機能を持たせることができる(リンク先のコードでは入力可能な文字数が100になっています。All in One SEO Packと同じ160文字にする場合は「var count = 160;」とします)。

NxWorld:WordPress:入力文字数の制限や補足文の追加など、管理画面の抜粋入力欄周りをカスタマイズする方法

 description入力欄の置換ができたあとは、その内容をheader.phpに出力させる。ここで参考になったのは次の記事(リンク先の記事で参考にしたのは途中以降のmeta descriptionタグの設定方法の部分です。前半のcanonicalタグについては別の記事を参考にしました)。

PINTO!:canonicalタグやdescriptionタグをプラグインを使わずに簡単設定|WordPressの初期設定を見直そう

ここで注意なのは、function.phpで「カテゴリー説明文でHTMLタグを使う」「カテゴリー説明文からPタグを除去する」コードを記述していると、上記サイトのコードのままではエラーが出てしまう(meta descriptionの内容がbodyタグの中に出力されてしまった)。


//カテゴリー説明文でHTMLタグを使う
remove_filter( 'pre_term_description', 'wp_filter_kses' );

//カテゴリー説明文からPタグを除去
remove_filter('term_description', 'wpautop');

上記のコードがfunction.phpに含まれている際は、以下のように記述する(抜粋の文字数を160文字に変更、strip_tagsでHTMLタグを除去、タクソノミーページのmeta description出力も追加しています)。


<?php if ( is_single()): ?>
<?php if ($post->post_excerpt){ ?>
<meta name="description" content="<?php echo $post->post_excerpt; ?>" />
<?php } else {
        $summary = strip_tags($post->post_content);
        $summary = str_replace("\n", "", $summary);
        $summary = mb_substr($summary, 0, 160). "…"; ?>
<meta name="description" content="<?php echo $summary; ?>" />
<?php } ?>
<?php elseif ( is_home() || is_front_page() ): ?>
<meta name="description" content="<?php bloginfo('description'); ?>" />
<?php elseif ( is_category() ): ?>
<meta name="description" content="<?php echo strip_tags(category_description()); ?>" />
<?php elseif ( is_tax() ): ?>
<meta name="description" content="<?php echo strip_tags(term_description()); ?>" />
<?php else: ?>
<meta name="description" content="<?php the_excerpt();?>" />
<?php endif; ?>

4.canonicalタグの設定をfunction.phpから行う

 URLの正規化をするcanonicalタグはWordPress標準でも出力されるが、カテゴリー、タグ、タクソノミーページにも出力したいので、下記のサイトを参考にカスタマイズした。

TechMemo:コピペでOK!全ページにcanonicalを設定するWordPressカスタマイズ

上記サイトのコードにタクソノミーページ(is_tax)の出力を加えたコード


remove_action('wp_head', 'rel_canonical');
 
add_action( 'wp_head', 'add_canonical' );
function add_canonical() {
 $canonical = null;
 
 if( is_home() || is_front_page() ) {
 $canonical = home_url();
 } elseif ( is_category() ) {
 $canonical = get_category_link( get_query_var('cat') );
 } else if(is_tag()){
 $canonical = get_tag_link(get_queried_object()->term_id);
 } else if(is_tax()){
 $canonical = get_term_link(get_queried_object()->term_id);
 } elseif ( is_search() ) {
 $canonical = get_search_link();
 } elseif ( is_page() || is_single() ) {
 $canonical = get_permalink();
 } else{
 $canonical = home_url();
 }
 echo '<link rel="canonical" href="'.$canonical.'">'."\n";
}

WordPress4.4からタイトル出力の方法が増えた

 以上のサイトの記事を参考にAll in One SEO Packに依存していた機能の置き換えが完了し、プラグインを無効にすることができた(ありがとうございます!)。後は任意の方法でtitleタグの出力を自由にカスタマイズできる。

 WordPress4.4から、titleタグの出力方法は2通りあり、header.phpに条件分岐で出し分ける方法と、function.phpから管理する(header.phpにtitleタグを記述しない)方法がある。function.phpで管理する方が新しく、header.phpを使う方法は4.4で一度非推奨となったが古い方法でも機能する。新しい方法を試してみたい場合は下記のサイトが参考になる。

Tech dig:【WordPress】wp_titleは非推奨!titleタグにタイトルを出力する方法

現場のプロから学ぶ SEO技術バイブル(特典PDF付き)

現場のプロから学ぶ SEO技術バイブル(特典PDF付き)

西山 悠太朗, 小林 睦
3,218円(09/18 08:52時点)
発売日: 2018/07/26
Amazonの情報を掲載しています
タグ:
スポンサーリンク
この記事をシェアする