カルキチブログ

All in One SEO Packで特定のページだけ記事タイトルとは別のタイトルタグを設定する方法

更新情報

All in One SEO Pack v4からフックの名称が以下のように変更になったのでカスタマイズする方は要注意です!

  • aioseop_title → aioseo_title
  • aioseop_keywords → aioseo_keywords
  • aioseop_description → aioseo_description

WPのドキュメンテーションにも報告が上がっています。

https://ja.wordpress.org/support/topic/all-in-one-seo-pack%E3%81%AE%E3%82%A2%E3%83%BC%E3%82%AB%E3%82%A4%E3%83%96%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%AE%E3%83%95%E3%83%83%E3%82%AF%E3%81%8C%E5%8F%8D%E6%98%A0%E3%81%95%E3%82%8C%E3%81%AA%E3%81%84/

WordPressには、All in One SEO Packという、titleタグやcanonicalタグ、ページを検索エンジンにインデックスさせるかどうかなど、基本的なSEO対策をWordPressの管理画面上から簡単に設定することができるプラグインがあるのですが、特定のページだけ別のタイトルを設定したいとかいうケースだとプラグインをカスタマイズする必要があります。

All in One SEOをカスタマイズする方法は、ググったら記事がいくつか出てきたのですが、詳しく解説している記事が少なかったので、今回はAll in One SEOのタイトルタグをカスタマイズする方法についての記事を書いてみることにしました。

今回のカスタマイズの主なユースケースは以下の様な感じです。

  • 特定のページだけ別のタイトルを設定したい
  • 記事タイトルとは微妙に違うタイトルタグをつけたい
  • 記事タイトルにカテゴリーやカスタムフィールドなど、記事の付加情報を入れ込みたい
  • テンプレートごとにタイトルを設定したい

特定のページだけ別のタイトルタグを設定する方法について

早速本題ですが、All in One SEO Packで特定のページだけ別のタイトルタグを設定するには、aioseo_titleというフックを使用する必要があります。

以下公式のフックの使用例のリンクとサンプルコードです。

https://aioseo.com/docs/aioseo_title/?v4

<?php
  function change_title_tag($title){
      $title = 'change title';
      return $title;
  }
  add_filter( 'aioseo_title', 'change_title_tag' );

処理の流れは、change_title_tag($title)の引数に設定されている$titleにAll in One SEO Packで設定されているタイトルタグの内容が入ってきて、関数内の$titleでページのタイトルを上書きするといった感じです。

上記のコードをfunctions.phpに貼り付けると、サイト内の全てのページのtitleタグをchange titleに変更します。

主な使用例

ここからは主な使用例について解説していきたいと思います。

使用するテーマに合わせて少し変えなければいけない箇所もありますが、このままでも使えるので、プログラミングはよく分からない・苦手というコーダーさんもぜひ使ってみてください!

使用例1, 特定のページだけ別のタイトルを設定したい

使用例1のコードはaboutというスラッグの固定ページのタイトルタグを、記事とは別のタイトル|サイトタイトルに変更する例です。

<?php
  function change_about_page_title($title) {
     // 固定ページのスラッグがaboutかどうかチェック
    if (is_page('about')) {

       // サイトタイトルを取得
      $site_title = esc_html(get_bloginfo('name'));
      $title = "記事とは別のタイトル|{$site_title}";
  
      return $title;
    }
  
    return $title;
  }
  add_filter('aioseo_title', 'change_about_page_title', 100);

is_page('about')でaboutかどうかチェックして、esc_html(get_bloginfo('name'))で取得したサイトタイトルと結合することによって、aboutというスラッグの固定ページのみ、記事とは別のタイトルをつけることができます。

使用例2, 記事タイトルとは微妙に違うタイトルタグをつけたい

使用例2のコードは、wordpressというスラッグがついている投稿ページのタイトルタグを記事が属するカテゴリー + 記事タイトル|サイトタイトルに変更する例です。

<?php
  function change_single_post_wordpress_title($title) {
     // 投稿ページのスラッグがwordpressかどうかチェック
    if (is_single('wordpress')) {
      $site_title = esc_html(get_bloginfo('name'));
       
        // カテゴリーのオブジェクトを取得
      $category = get_the_category();
       
       // カテゴリーの存在チェック
      if (!$category[0]) return;

        // カテゴリー名を取得
      $category_name = $category[0]->name;

       // 記事タイトルを取得
      $post_title = esc_html(get_the_title());
      $base_title = "{$category_name} {$post_title}";
  
      $title = "{$base_title}|{$site_title}";
  
      return $title;
    }
  
    return $title;
  }
  add_filter('aioseo_title', 'change_single_post_wordpress_title', 100);

上記のコードでは投稿ページに紐づくカテゴリーを取得して、カテゴリーと記事タイトルをがっちゃんこする例です。

カスタムタクソノミーやカスタムフィールドなど、記事に紐づくデータを取得して、タイトルと合体させて別のタイトルを生成するという使い方が、このフックの主な使い道のような気がします。

使用例3, 使用しているテンプレートごとにタイトルを設定したい

下記のコードは、テンプレートAとテンプレートBで、別のタイトルタグを設定する例です。

テンプレートは、固定ページの場合を想定しています。

固定ページの場合テンプレートは、page-〇〇.phpという形になりますね!

<?php
  // テンプレートファイルの名前を取得する
  function get_template_name() {
    global $template;
    return basename($template);
  }
  
  // テンプレートごとにタイトルの分岐を行うメインの処理
  function change_page_template_title($title) {
    $site_title = esc_html(get_bloginfo('name'));
  
    if (get_template_name() === 'template-a.php')) {
      // テンプレートAの場合の処理を書く
      $title = 'テンプレAの場合のタイトルを設定する';
      return $title;
    }
    if (get_template_name() === 'template-b.php')) {
      // テンプレートBの場合の処理を書く
      $title = 'テンプレBの場合のタイトルを設定する';
      return $title;
    }
  
    return $title;
  }
  add_filter('aioseo_title', 'change_page_template_title', 100);

ちょっと複雑なので解説すると、まずget_template_name()という関数を定義して、現在表示されているページが使用しているテンプレート名を取得します。

basename($template)でパスの最後にある名前、今回の場合だとpage-template-a.phpが使用されているページでは、page-template-a.phpという文字列を取得します。

→テンプレートBの場合は、page-template-b.phpという文字列が返ってきます。

change_page_template_title($title)という関数で行っている条件分岐は非常にシンプルで、使用されているテンプレートの名前と比較対象の文字列(テンプレートの名前)が同じかどうかチェックしているだけです。

まとめ

最後にまとめです。

  • All in One SEO Packでは、aioseo_titleというフックを使用するとページごとにtitleタグをカスタマイズできる
  • 記事タイトルとは違うタイトルをつけたかったり、ページやテンプレートごとにタイトルタグを設定したい場合に使用することが多い(個人的主観)

このフックを使用してtitleタグを設定するメリットは、記事に紐づく情報(カテゴリーとかカスタムフィールドとか)もtitleタグに設定できることかなと思います。

ページ内のタイトルを自由にタイトルをカスタマイズするには、PHPの知識が多少は必要なので、ちょいハードルは高めですが、カテゴリーやタグ、カスタムフィールドなどを取得してtitleタグに入れ込むことができるので、SEO的に優れた??タイトルをつけることができます。

→SEOあまり詳しくないので、ちょっと適当になりました。。。

また、All in One SEO Packにはaioseo_descriptionというデスクリプションを上書きするフックもあります。

名前通り、All in One SEO Packで出力されたデスクリプションをカスタマイズするフックなのですが、このフックをうまく利用すると特定のカテゴリーに分類されている記事のみ、デスクリプションを自動で設定したりとかもできます。

aioseo_descriptionについては、この記事に加筆するか、別に記事を書くかは微妙ですが、気が向いたら書こうかなと思います。

このフックについて詳しく知りたい方は、公式ドキュメントを覗いてみてください。

https://aioseo.com/docs/aioseo_description/?v4

おまけ

プラグインのカスタマイズ系の記事はいつか書いてみたいなと思っていたので、今回の記事は書いてて結構楽しかったです。

ただ、最近のテーマだと、SEO周りの対策もきちんと設定されている高機能なテーマも多いので、そういうテーマだとわざわざこういったプラグインを使わなくても、テーマだけで完結できちゃうのもまた事実です。

→僕の知っている範囲だと、SANGOやLION Media、最近だとSNOW MONKEYとかは確かテーマでSEOの設定もできたような気がします。

まあ、WPを結構がっつりやっているという人が読んでくれたらまあ嬉しいなって感じです。

All in One SEOが使用されているサイトはまだ結構見るので、ちょっとは需要ありそうですけどね!