THE THORで記事を書くと、タイトルの後ろにサイト名が付きます。
「記事タイトル│サイト名」という形です。
トップページなら自然ですが、記事ページでは邪魔になることがあります。検索結果でタイトルが途中で切れてしまうからです。
自分のサイトで確認したところ、切れている記事がいくつもありました。外す方法をまとめます。
- サイト名が付くと何が困るのか
- 記事ごとに外す方法とその限界
- 子テーマで全記事から外す方法
- 外したあとに確認すること
サイト名のぶんだけ、タイトルが削られます。
検索結果に表示されるタイトルには、長さの限界があります。
日本語だと、だいたい30文字前後で切られて「…」になります。スマートフォンではもう少し短くなります。
ここに区切り記号とサイト名が入ると、その文字数がまるごと削られます。
【元のタイトル】
イメージマップの作り方!画像に複数のリンクを貼り、レスポンシブにも対応させる!
【出力されるタイトル】
イメージマップの作り方!画像に複数のリンクを貼り、レスポンシブにも対応させる!│i-f - Web Works -サイト名が長いほど、影響が大きくなります。
検索する人が見ているのは記事のタイトルです。サイト名は、その下のURL部分にも出ています。二重に出す必要はありません。
記事ごとに外す方法。
THE THORには、記事ごとのSEO設定があります。
投稿の編集画面を下にスクロールすると「SEO設定」の欄があり、そこでタイトルにサイト名を入れるかどうかを切り替えられます。
1本だけ直したいなら、これが一番早いです。
ただ、この方法には限界があります。
- 記事の本数だけ手作業が発生する。
- 新しく記事を書くたびに、設定を忘れないようにする必要がある。
- この設定はカスタムフィールドに保存されるため、過去記事には値が入っていない。
記事が100本あるなら、100回開くことになります。
全部まとめて外したいなら、子テーマで処理したほうが確実です。
子テーマで、記事ページだけサイト名を外します。
WordPressには pre_get_document_title というフィルターがあります。
<title> タグに出力される直前の文字列を、書き換えられます。
子テーマの functions.php に、次のコードを追加します。
<?php
/**
* 記事ページのタイトルからサイト名を外す
*/
function my_strip_sitename_from_post_title( $title ) {
// 記事ページ以外はそのまま返す
if ( ! is_singular( 'post' ) ) {
return $title;
}
// THE THOR の区切り記号を取得する
$sep = function_exists( 'fit_title_separator' ) ? fit_title_separator() : '│';
$suffix = $sep . get_bloginfo( 'name' );
$len = strlen( $suffix );
// 末尾が「区切り記号+サイト名」のときだけ切り落とす
if ( $len > 0 && strlen( $title ) > $len && substr( $title, -$len ) === $suffix ) {
$title = substr( $title, 0, -$len );
}
return $title;
}
add_filter( 'pre_get_document_title', 'my_strip_sitename_from_post_title', 20 );これで、記事ページのタイトルからサイト名が消えます。
ポイントは3つあります。
1. 優先度を20にしています。
THE THOR自身がタイトルを組み立てたあとに動かす必要があるからです。既定の10だと、テーマより先に走ってしまって効きません。
2. 区切り記号は決め打ちにしていません。
THE THORの区切り記号はカスタマイザーで変更できます。fit_title_separator() から取得しておけば、設定を変えても壊れません。
3. 末尾が一致したときだけ切っています。
str_replace で消してしまうと、記事タイトルの中にたまたまサイト名が入っていたときに、そこまで消えてしまいます。末尾だけを見て、一致したぶんだけ切り落とすのが安全です。
記事ページ以外は、そのままにしておきます。
このコードは is_singular( 'post' ) で記事ページに限定しています。
トップページ、カテゴリーページ、固定ページには手を付けません。
これらのページは、タイトルが「カテゴリー名」だけになってしまうと、何のサイトか分からなくなります。サイト名が付いていたほうが自然です。
外すのは記事ページだけで十分です。
子テーマのファイルを分けておくと管理が楽です。
functions.php に直接書いてもいいのですが、機能が増えてくると見通しが悪くなります。
ファイルを分けて、読み込むだけにしておくと整理しやすいです。
the-thor-child/
├── functions.php
└── inc/
└── seo-title.phpfunctions.php には、読み込む1行だけを書きます。
<?php
/** 記事ページのタイトルからサイト名を外す */
require_once get_stylesheet_directory() . '/inc/seo-title.php';子テーマなので get_template_directory() ではなく、get_stylesheet_directory() を使います。ここを間違えると親テーマのフォルダを見に行ってしまい、ファイルが見つかりません。
もうひとつ、functions.php の末尾に ?> は書かないでください。そのあとに空行や空白が入ると、ページの先頭に余計な出力が混ざって、ヘッダーの処理が失敗することがあります。
ファイルの設置はFTPでもできますが、SSHが使えるならWP-CLIと併せて使うと、確認まで一気に進められて楽です。
反映されたか確認します。
記事ページを開いて、ソースの <title> を見ます。
ここで気をつけたいのがキャッシュです。
サーバー側のページキャッシュが効いていると、古いタイトルが返ってきます。直っていないように見えて、実はキャッシュだった、ということがあります。
URLの後ろに意味のないパラメータを付けると、キャッシュを避けて確認できます。
https://example.com/article/?cb=1これで正しいタイトルが出ていれば、コードは効いています。あとはキャッシュを消せば完了です。
検索結果に出るまでは時間がかかります。
タイトルを変えても、検索結果はすぐには変わりません。
Googleが再びページを読みに来るまで待つ必要があります。
急ぐなら、Search Consoleの「URL検査」からインデックス登録をリクエストしてください。数日から数週間で反映されます。
なお、Googleはタイトルを書き換えることがあります。サイト名を外しても、Google側が判断して付け直す場合があります。そこは制御できないものとして割り切ってください。
まとめ
THE THORで記事タイトルからサイト名を外すなら、子テーマで pre_get_document_title を使うのが確実です。
- 優先度は20にする。
- 区切り記号は
fit_title_separator()から取る。 - 末尾が一致したときだけ切り落とす。
- 記事ページ以外はそのままにする。
タイトルの文字数は、そのままクリック率に効いてきます。
サイト名で10文字使っているなら、そのぶんを記事の内容の説明に回したほうが読まれます。