Back to articles

Canonical タグが言語をまたぐと、Hreflang が壊れる

SEOReport Team·
hreflangcanonical-tagsinternational-seomultilingual-seotechnical-seo

Canonical が英語版を指すローカライズ済みページは、自身の hreflang アノテーションをキャンセルし、ブラウザのチェックでは検出できません。矛盾を検出するチェックの監査データと、私たち自身の 9 ロケール接頭辞がそれらのうちの一つに失敗した日付。

ページは同じ <head> の中に、同じ URL について同じクローラーに正反対のことを伝える 2 つのタグを持つことができます。https://example.com/fr/pricing では、この文はページがクラスターのフランス語メンバーであることを示しています:

html
<link rel="alternate" hreflang="fr" href="https://example.com/fr/pricing" />

そしてこれ、下の 1 行は、ページが英語版に統合されるべきバリアントであることを示します:

html
<link rel="canonical" href="https://example.com/pricing" />

実際のサイトは、所有するすべてのローカライズルートで同じテンプレートから両方を提供します。 これは、7 月に文書化した失敗 ― hreflang の自己参照が欠落 ― の後に残る失敗で、現在のデータでは 88 件の hreflang 評価の 58% が失敗しています。 サイトはそのループを閉じ、すべての自己参照を正しく設定し、各ローカライズページが英語版に置き換えられるように要求しても構いません。

クロス言語のカノニカルは Google にローカライズされた URL を元に戻すよう求めます

カノニカルタグは統合要求です:この URL をその一つの変種として扱い、インデックス化してください。 hreflang 注釈はルーティングクレームです: この URL はこの言語のバージョンです。 異なる URL を指し示すと、サイトは自らの主張を無効にするリクエストを発行します ― クラスター内のフランス語スロットは、自身を否定するページで埋められます。

Google は、hreflang が指示ではなくヒントであることを明示しており、canonicalization も同様に機能します:サイトがシグナルを提供し、Google がそれらを解決します。 その解決が問題全体です。 自己正規化されたローカライズページを持つと、出版社はどの URL がフランス語検索者にサービスするかを決定します。 クロス言語 Canonical では、パブリッシャーは決定を委ね、クラスターが設定されていると信じます ― 後で報告される結果は、自国市場で順位が付かないローカライズページで、英語ページがその位置に現れます。

これを生成するものは普通です。 ルート定義から構築された正規のヘルパーは、リクエストパスではなく、すべてのロケールに対してプレフィックスなしの URL を発行します。 hreflang 設定がロケールごとだが Canonical 設定がグローバルな CMS は同じことをします。 したがって、URL にロケールプレフィックスを追加し、コンテンツが元々存在した場所をカノニカルに指し示すマイグレーションも同様です。 それぞれの場合、ページは完璧にレンダリングされ、注釈は view-source で完全に見え、矛盾は 2 属性の違いに過ぎません。

データセット

hreflang 自己参照が存在ホームページは自分自身の hreflang 注釈から除外されている58% の 88 評価; 59% の 34 サイト
ホームページのカノニカルが存在ホームページは全くカノニカル URL を宣言していない29% の 49 サイト

方法論: 現在のチェックセットから各ドメインの最新完了監査スナップショット、約 5 月 23 – August 31, 2026、匿名化済み。 分母はチェックごとに異なる — 34 から 49 サイト — というのは、入力が存在する場合にのみチェックが実行されるためです: 自己参照チェックは hreflang 注釈がまったくないホームページに対して判定を出さず、したがってそのサイト数は少なくなります。 評価レベルとサイトレベルの率は、ウィンドウ内で同一ドメインが複数回監査されたために異なります。 サンプルは自己選択であり — 監査を実行した所有者 — 小規模から中規模に偏っているため、そのセグメントに対して率を方向性として扱うべきです。

第二行はより静かなリスクです。 カノニカルがないページは hreflang 注釈と矛盾していませんが、注釈を擁護しているとも言えません: ページ内にどの URL を権威とみなすかを示すものはなく、1 つ以上のアドレスで到達可能なロケールバリアントは推論によって完全に解決されます。 正しいクラスターに到達するにはまずカノニカルの衛生状態を整える必要があり、そこで our canonical guide が the hreflang implementation guide の前提条件となり、補完ではありません。

矛盾はクラスターの両端からのみ可視化されます

単一ページは自分自身についてこの失敗を報告できません。 /fr/pricing は内部的に一貫しています — hreflang セット、カノニカル、両方とも正しく形成されています。 欠陥は注釈と注釈対象ページを並べて保持したときに現れます。そのため、検証するには 1 文書 を読むのではなく、クラスター全体を取得する必要があります。

各 hreflang 注釈をそのターゲットまでたどり、返ってきた内容を記録してください:ステータスコード、リクエストがリダイレクトされたかどうか、noindex ディレクティブがあるかどうか、そしてターゲット自身のカノニカルが注釈の指す URL を示しているかどうかです。 カノニカルが別の URL を示しているターゲットこそが、この記事で扱うクロス言語カノニカルです。

lang 属性は 2 番目の証人です。 html lang が、自身の hreflang エントリが主張するロケールとは異なる言語を示しているページは、同じように自己矛盾しており、ローカライズされたルートが元のページのコンテンツを提供していることを示す最初の目に見える兆候であることがよくあります。

取得できない代替は証拠のギャップであり、欠陥の証明ではありません。 未検証として記録し、クラスターが壊れていると判断する前に再試行してください。

hreflang=fr, self-referencingrel=canonicalhreflang=frthe site stopped deciding/fr/pricing — html lang=fr/pricing — English original主張:フランス語検索者にこのURLを提供するWhich URL answers aFrench query?Google 選択 — 通常は英語URL
Diagram source
graph TD
    FR["/fr/pricing — html lang=fr"]
    EN["/pricing — English original"]
    FR -->|"hreflang=fr, self-referencing"| CLAIM["主張:フランス語検索者にこのURLを提供する"]
    FR -->|"rel=canonical"| EN
    EN -->|"hreflang=fr"| FR
    CLAIM --> Q{"Which URL answers a French query?"}
    EN --> Q
    Q -->|"the site stopped deciding"| OUT["Google 選択 — 通常は英語 URL"]

Our own locale prefixes served English until August 17, 2026

私たち自身も seoreport.dev でこのクラスの欠陥に失敗しました。 Ahrefs サイト監査は、当社のサイト上で184件のURLにわたり、hreflang タグとHTML 言語の不一致を報告しました。 lang 属性は症状でした; コンテンツも英語で、9つのロケールプレフィックスすべてで同じでした。これにより、各ローカライズされた URL は英語の対になったものの複製となり—クロス言語のカノニカルが他方から到達したのと同じ結果をもたらしました。

原因は 1 関数境界。 ドキュメントシェルは、window が未定義のときにデフォルト言語を返すヘルパーから言語を取得しました。 サーバー上で、/fr/pricing それゆえに lang="en" をレンダリングし、英語の翻訳バンドルをシードしました。一方、ヘッドリンクを発行するコンポーネントは、パスを読み取り、実行時ではなく、正しい fr 自己-hreflang をそれに隣接して発行しました。 クライアント効果が水化後にその言語を切り替えたので、すべてのブラウザベースのチェックが成功し、そして人間はそれを見なかった。 クローラーはその効果を実行しない。

August 17, 2026で修正済み: シェルはパスから言語を取得し、ローカライズされたレイアウトはローダー内でロケールバンドルを解決するので、サーバー側レンダリングとハイドレーションがそれを共有し、バンドルのないサポートされたロケールは、静かに英語をプレフィックスの下で提供する代わりに例外を投げる。 テキストの方向も間違っていました — アラビア語はltrを提供していました。

回帰テストは JavaScript を使わない生の HTML による実行です。ブラウザチェックはこの失敗クラス全体を検出できないためです。 本番環境で赤優先で実行すると、440 が 128 のローカライズされた URL で報告され、すべてのページが 100% 英語の継承を持ちます。 修正ビルドに対して:0 が 144 の URL で報告されます。 lang と hreflang を比較していれば、最初に失敗していたのは私たち自身のサイトでした。

x-default はフォールバックページが宣言するものを継承します

x-default を宣言するサイトのサンプルは、失敗率を公開するには小さすぎます。 また、HTML が証明できることは見かけよりも少なく、x-default アノテーションが宣言されていることは示しても、パブリッシャーがどのオーディエンスに向けるつもりだったかは示しません。 確認できるのは隣接する事実です:URL の形式、ターゲットの健全性、相互アノテーション、そしてカノニカルの整合性です。

メカニズムが示すことは、いずれにせよ述べる価値があります。 x-default は、サイトが提供しない言語を検索する検索者のフォールバックであり、通常は主要市場のページを指します。 そのページがクロス言語カノニカルを持つ場合、惑星上のすべての未一致検索者のフォールバックは矛盾を継承し、その矛盾は x-default の行そのものではなく、ターゲットの健全性に現れます。

生の HTML で、ロケールごとに、両方向で確認してください

クローラが行うようにページを取得し、3 を読み取ります:

curl -s -A "Googlebot" https://example.com/fr/pricing | grep -iE '<html|rel="canonical"|hreflang'

lang 属性、自己参照 hreflang エントリ、およびカノニカルは 1 つのロケールと 1 URL で一致する必要があります:

html
<!-- On https://example.com/fr/pricing -->
<html lang="fr">
<link rel="canonical" href="https://example.com/fr/pricing" />
<link rel="alternate" hreflang="en" href="https://example.com/pricing" />
<link rel="alternate" hreflang="fr" href="https://example.com/fr/pricing" />
<link rel="alternate" hreflang="x-default" href="https://example.com/pricing" />

その後、ロケールごとに 1 ページで繰り返し、すべての URL のアノテーション名を取得して、各々が自分自身にカノニカル化されることを確認します。 ルールは開発者に渡すには短すぎます:hreflang クラスターのすべてのメンバーは自分自身にカノニカル化されます。 クロス言語のカノニカルは、正確に1つの状況で正しいです — ローカライズされた URL がまったくローカライズされておらず、元の言語と同じ言語で機能する場合 — そしてその状況では URL はクラスターにも属しません。

Search Console の URL 検査は、どのカノニカル Google が実際に選択されたかについて、各 URL ごとに権威ある第二の意見を提供します。有料の SEOReport 診断 はクラスター全体でこのループを実行し、矛盾する各ペアを、それが見つかったページとともに一覧表示します。 seoreport.dev の 9 ロケールプレフィックスは現在通過し、私たちは欠陥を最初に出荷したサイトで通過しました。そのサイトの全製品がそれを発見しています。

サイトの完全な診断を受ける

根拠に基づくレポートと優先順位付きの改善計画を、毎月のクレジット付きプランで。