rel_canonical()について解説 – WordPressでの単一クエリのrel=canonicalタグ出力方法
WordPressのrel_canonical()
関数は、シングルクエリのページでのみ正規URLを出力し、SEO対策に活用します。
まず、is_singular()
で単一ページか判定し、get_queried_object_id()
で対象の投稿IDを取得します。
次に、wp_get_canonical_url()
で正規URLを生成し、esc_url()
で整形した上で、条件が整えば<link rel=”canonical” href=”…”>タグとして出力します。
関数の動作概要
このセクションでは、正規URL(Canonical URL)を生成して出力する過程を、主要な内部関数ごとに分けてご説明します。
各関数の役割や処理の流れがわかるよう、サンプルコードも交えて解説します。
シングルクエリ判定
シングルクエリの判定は、WordPressのシングルページ(投稿や固定ページなど)でのみ正規URLを出力するための最初のチェックとなります。
ここでは、各関数の連携により不要な処理を回避する仕組みについて説明します。
is_singular() による条件チェック
まず、is_singular()
を用いて現在のページがシングルクエリかどうかを判定します。
この関数は、以下の条件に合致する場合に true
を返します。
- 単一の投稿ページの場合
- 固定ページの場合
- 添付ファイルなど、個別コンテンツが表示される場合
- カスタム投稿タイプの個別ページの場合
シングルクエリである場合にのみ、その後の処理が進むため、SEO向けの正規URL出力の対象が明確になります。
条件に合致しない場合は、無駄な出力を避けるために処理を中断します。
不要な処理の早期終了
is_singular()
のチェックにより、シングルクエリではない場合は処理を直ちに中断します。
これにより、アーカイブページや一覧ページなど不要な出力が発生しないように制御されます。
サンプルコードでは、次のような早期リターンのパターンが利用されます。
function rel_canonical() {
// シングルページではない場合は処理を終了
if ( ! is_singular() ) {
return;
}
// ここから先はシングルクエリでのみ実行
}
上記のコードにより、シングルクエリ以外の場合に以降の処理が実施されないため、リソースの無駄遣いや不正なSEO出力を防止しています。
投稿オブジェクトの取得
次のステップでは、現在表示されているコンテンツのオブジェクトIDを取得することで、投稿や固定ページなど特定のオブジェクトに対して正規URLを生成します。
get_queried_object_id() の活用
get_queried_object_id()
を利用してグローバルクエリから投稿やページのIDを抽出します。
これにより、どのオブジェクトに対して正規URLを生成するかが決定され、後続の wp_get_canonical_url()
関数にこのIDを引数として渡す仕組みとなります。
具体的な処理の流れは、下記のサンプルコードをご確認ください。
function rel_canonical() {
// シングルクエリ判定後、オブジェクトIDを取得
$post_id = get_queried_object_id();
// オブジェクトIDが取得できなかった場合は処理終了
if ( 0 === $post_id ) {
return;
}
// 取得したIDを元に、後続処理へ進む
}
このとおり、投稿オブジェクトの取得に失敗した場合も、無駄な処理を回避するために早期リターンしています。
正規URLの生成と整形
取得した投稿オブジェクトに基づいて、正規URLを作成し、最終的な出力用に整形します。
wp_get_canonical_url() によるURL生成
wp_get_canonical_url()
は、投稿IDを元にそのページに対応する正規のURLを生成するための関数です。
この関数は、WordPressのパーマリンク設定や投稿の状態、メタデータなどを考慮して最適なURLを返します。
例えば、HTTPからHTTPSへの変換や不要なクエリパラメータの除去などが実施され、以下のようなサンプルコードで生成されます。
function rel_canonical() {
if ( ! is_singular() ) {
return;
}
$post_id = get_queried_object_id();
if ( 0 === $post_id ) {
return;
}
// 正規URLを取得
$canonical_url = wp_get_canonical_url( $post_id );
if ( ! empty( $canonical_url ) ) {
// 次にURLを整形して出力処理に進む
}
}
このサンプルは、各条件を満たした場合のみ正規URL生成処理が実行される点を示しています。
esc_url() による整形処理
取得した正規URLは、esc_url()
による整形処理を経て安全性が確保されます。
esc_url()
は、URL内に含まれる不正な文字を除去し、出力前にエンコードを施すことで、XSS(クロスサイトスクリプティング)攻撃防止に役立ちます。
整形後のURLは最終出力に利用されるため、ここでのチェックは非常に重要です。
if ( ! empty( $canonical_url ) ) {
// URLを整形し、HTMLタグとして出力
echo '<link rel="canonical" href="' . esc_url( $canonical_url ) . '">' . "\n";
}
上記のコードでは、esc_url()
によって安全なURL表現に変換された上で、タグとして出力される仕組みが確認できます。
HTMLタグ出力処理
正規URLが取得・整形された後は、実際にHTMLタグとして出力する処理に進みます。
ここでは、出力条件の確認と、実際のタグ生成について解説します。
出力条件の確認
HTMLタグの出力は、正規URLの存在チェックを通過した場合にのみ実行されます。
URLが取得できなかった場合は、何も出力されない制御が行われるため、無効なタグの生成を防げます。
正規URLの存在チェック
まず、生成されたURLが空でないかを確認します。
この検査により、不正なURLや存在しないオブジェクトの場合は、出力処理が行われず、結果としてページ内に不要なタグが埋め込まれることを防止します。
以下のサンプルコードでは、! empty( $canonical_url )
によりURLの存在が確認されています。
$canonical_url = wp_get_canonical_url( $post_id );
if ( ! empty( $canonical_url ) ) {
// URLが存在する場合のみ、整形して出力へ
}
この確認処理により、正しい条件でのみタグの出力が行われる点がわかります。
リンクタグの生成
条件に合致した場合、次に実際のリンクタグを生成して出力します。
HTMLタグの生成方法はシンプルで、echo
を用いて直接ブラウザへ出力する方式が採用されています。
echo によるタグ出力
実際のタグ出力は、echo
文により行われ、生成された正規URLがHTMLの <link>
タグに組み込まれます。
ここでは、各関数が検証済みの安全なURLを使っているため、SEO対策として適切な出力が保証されます。
if ( ! empty( $canonical_url ) ) {
// 整形済みのURLを利用して、rel=canonical タグを出力
echo '<link rel="canonical" href="' . esc_url( $canonical_url ) . '">' . "\n";
}
上記コードは、取得した正規URLが条件を満たしている場合にのみ実行されるため、無駄なタグ出力が防止されています。
また、改行コード "\n"
を付加することで、生成されるHTMLの可読性も向上しています。
内部処理の連携
各関数がどのように連携して全体の処理フローを実現しているか、ここでは内部処理の役割分担と不要な処理を回避する仕組みについて解説します。
各関数の役割分担
正規URLの生成・整形とHTMLタグ出力の各処理は、複数の関数により担当されています。
各関数が単一の役割に徹することで、処理全体が分かりやすく管理されています。
処理フローの制御と連携
処理の開始は、is_singular()
によるシングルクエリの判定となり、次に get_queried_object_id()
で対象の投稿IDを取得します。
得られたIDは wp_get_canonical_url()
に渡され、最適な正規URLを生成します。
最後に、esc_url()
を適用して安全性を確保したURLを <link rel="canonical">
タグとして出力します。
各関数は以下のように連携しています。
is_singular()
:シングルページであるかを確認get_queried_object_id()
:現在の投稿または固定ページのIDを取得wp_get_canonical_url()
:IDに基づいて正規URLを生成esc_url()
:生成されたURLを整形し安全性を確認
これにより、無駄な処理が行われることなく、必要な場合にのみ一連の処理が実行されます。
不要な処理の回避メカニズム
各ステップで条件チェックを実施することで、不要な処理が回避される点は非常に重要です。
具体的には、以下のメカニズムがあります。
- シングルクエリでない場合は即座に処理を中断
- 投稿オブジェクトのIDが取得できなかった場合、以降の処理を実行しない
- 正規URLが空の場合は出力をスキップ
こうした制御により、パフォーマンスの向上や意図しないタグ出力の防止が実現されています。
全体として、各関数の役割分担が明確なため、メンテナンス性が高く、SEO対策としても安定した正規URLの出力が確保される仕組みとなっています。
まとめ
本記事では、WordPressで正規URLを出力する関数「rel_canonical()」の内部処理の流れについて解説しました。
シングルクエリの判定、投稿オブジェクトの取得、正規URLの生成と整形、そして安全なHTMLタグ出力の各ステップが具体的なサンプルコードとともに説明されています。
これにより、必要な場合にのみ正確なCanonicalタグを出力し、SEO対策に寄与する仕組みが理解できる内容です。