hreflangチェック

複数の言語で公開しているページのアドレスを入力してください。hreflangの行を読み取り、すべてのコードを検証します。そのうえで各言語版を訪れ、応答があるか、インデックス可能か、このページを相互に指しているかを確認します。

アノテーションはページ単位で読み取るため、ドメインだけでなくページそのもののアドレスを入力してください。最初はトップページで試すのがおすすめです。

例: www.mozilla.org/en-US/, wordpress.org

兄弟ページの一覧を、すべての兄弟ページに載せる

同じページが英語、ドイツ語、日本語で存在すると、検索エンジンにはそれぞれ別のページに見えます。hreflangを使えば、それが1つのページの3つの版であることを伝えられます。そうすればベルリンの読者には英語版ではなくドイツ語版のアドレスが表示されます。各版には、自分自身を含むすべての版の一覧を載せます:

<link rel="alternate" hreflang="en" href="https://www.example.com/en/pricing/">
<link rel="alternate" hreflang="de" href="https://www.example.com/de/preise/">
<link rel="alternate" hreflang="ja" href="https://www.example.com/ja/pricing/">
<link rel="alternate" hreflang="x-default" href="https://www.example.com/en/pricing/">

この一覧を置ける場所は3つあります。ページの<head>内、Linkレスポンスヘッダー、XMLサイトマップです。このチェックは最初の2つを読み取ります。サイトマップは読まないため、ここでアノテーションが見つからなくても、サイトマップ側で指定されている可能性があります。

hreflangが変えるのは、どの版が表示されるかです。ページの順位は変わりません。検索エンジンはhreflangをヒントとして扱い、矛盾があるとすぐに無視します。小さなミスが大きな損失になるのはそのためです。

正しいコードの形

値は言語コードで、その後に必要に応じて文字体系と国をハイフンでつなぎます。大文字と小文字は区別されません。

部分規格例
言語(必須)ISO 639-1、2文字en, de, ja, pt
文字体系(任意)ISO 15924、4文字zh-Hans, zh-Hant, sr-Latn
国(任意)ISO 3166-1、2文字en-GB, pt-BR, zh-Hant-TW

国コードを単独で使うことも、先頭に置くこともできません。このチェックが指摘するミスは次のとおりです。修正方法が1つに決まる場合はそれも示します:

  • en-UK:イギリスのISOコードはGBです。
  • en_US:ソフトウェアのロケールで使われるアンダースコアです。hreflangではen-USと書きます。
  • es-LA:ラオスのスペイン語と解釈されます。Googleにはラテンアメリカを表すコードがないため、esを使うか、国ごとに1行ずつ書いてください。
  • jp、cn、cz、dk:国コードを言語コードとして使っています。言語コードはja、zh、cs、daです。
  • en-EU、es-419、engのような3文字コード、ヘブライ語のiwのような廃止されたコード。

結果の表では、すべてのコードを言葉で書き出します。これでルールでは見つけられないミスにも気づけます。たとえばukは完全に正しいコードですが、意味はウクライナ語です。

ページ自体でチェックする項目

  • アドレス。各行にはスキームとホストを含む完全なアドレスが必要です。相対アドレスは指摘されます。
  • 重複と矛盾。同じ行が2回あっても害はなく、注意として表示されます。1つのコードが2つの異なるアドレスに割り当てられているのはエラーです。どちらがその言語版なのか判断できないからです。
  • 自己参照。ページは自分自身の一覧に、正確なアドレスで含まれている必要があります。末尾のスラッシュが1つ欠けるだけで一致しなくなります。
  • x-default。一覧にない言語の読者向けの版です。任意なので、なくても注記が出るだけで、不具合には数えません。
  • canonical。hreflangはcanonicalページ同士でしか機能しません。ドイツ語ページのcanonicalが英語ページを指していると、検索エンジンにドイツ語ページを無視するよう伝えることになり、そのhreflangの行も一緒に無視されます。
  • lang属性。<html lang>がsvなのに、ページが自分をseとして載せているなら、どちらかが間違っています。
  • 位置。<head>の外に出てしまった行(余計な要素でheadが早く閉じられていることが多い)はGoogleに無視されるため、ここで指摘します。

相互リンク:たいてい失敗するのはこちら

アノテーションが有効になるのは、両方のページの指定が一致しているときだけです。英語ページが「ドイツ語版はあちら」と言っているのに、ドイツ語ページが「英語版はこちら」と言っていなければ、そのペアは無視されます。そこで、あなたのページを読み取ったあと、当方のサーバーが各言語版をリダイレクトをたどらずに1回ずつリクエストし、それぞれについて次の項目を報告します:

ステータス
200で応答する必要があります。リダイレクトは、その行のアドレスが最終的なアドレスではないことを意味します。エラーは、その版がなくなっていることを意味します。x-defaultのリダイレクトは許容されます。言語選択ページはまさにそう動くものだからです。
インデックス可能
robotsメタタグやX-Robots-Tagヘッダーにnoindexがないこと。
自己へのcanonical
canonicalがある場合、それ自身のアドレスを指している必要があります。
相互リンク
その版のブロックに、あなたのページが、あなたのページが自分に使っているのと同じコードで載っている必要があります。

修正が機械的に決まる場合(コードの綴り間違い、相対アドレス、重複行、ページ自身の行の欠落)は、結果の最後に貼り付けて使える修正済みのブロックを表示します。あなたの判断が必要な行はそのまま残し、コメントで印を付けます。

1回のチェックで訪れる言語版は最大35件で、約30秒で打ち切ります。省略したものは表に示します。JavaScriptで書き込まれたアノテーションは見えません。また、訪問者を地域でリダイレクトするサイトは、クローラーとは違う内容を当方のサーバーに返す場合があります。

よくある質問

サイトが1言語だけでもhreflangは必要ですか?

いいえ。hreflangは同じページの複数の版を互いに結びつけるものです。版が1つしかなければ結びつけるものがなく、チェックは「アノテーションなし」を中立の結果として表示します。

x-defaultとは何ですか?必須ですか?

ほかの行でカバーされないすべての人、たとえば提供していない言語の読者のための行です。通常は英語版か、訪問者が言語を選べるページを指します。推奨ですが必須ではありません。

言語コードだけにするべきですか、国も付けるべきですか?

1つのページでその言語の話者全員に対応するなら、言語だけ(de)にします。価格や配送などのために国ごとに別のページを公開している場合にだけ、国を付けます(de-AT、de-CH)。両方を組み合わせることもできます。特定のページには国付きの行を、全体向けには言語だけの行を使います。

「相互リンクなし」とはどういう意味ですか?

あなたのページは別の版を指していますが、その版は自分のhreflangブロックであなたのページを指していません。検索エンジンは一方通行のアノテーションを無視します。修正するには、すべての版に同じ完全な一覧を出力してください。理想は1つの共通ソースから出力することです。

hreflangで別のドメインを指せますか?

はい。example.comとexample.deは、それぞれが相手と自分自身を載せていれば、互いの版になれます。ルールは同じドメイン内の場合と同じです。

hreflangはcanonicalタグの代わりになりますか?

いいえ。役割が違い、両者は一致している必要があります。canonicalは重複ページの中でどのアドレスが代表かを示し、hreflangはどのページが翻訳版かを示します。各言語版は自分自身をcanonicalにしてください。