hreflangの設定方法|自社3言語サイトでエラー16件を0件にした手順

hreflangの設定方法|自社3言語サイトでエラー16件を0件にした手順

今回は、こんな疑問にお答えします。

  • hreflangは、何のために書くの?
  • hreflangの書き方と、間違えやすい所は?
  • 正しく書けたか、どうチェックする?

こんにちは、自社サイトを直近12か月で検索表示 約19万回まで育てた、Web制作会社のマサトです。

自社サイトは、日本語・韓国語・英語の3言語で動かしています。

日本語の記事を301で統合した翌日、Ahrefsに「Hreflang to redirect or broken page: 16 URLs」と出ました。

直したあとは全URLを機械でチェックして、16件が0件になったのをその日のうちに確かめました。ただ、hreflangが正しくても検索に出ない事故は、別に起きています。

先に結論から書きます。

hreflangは、言語違いのページをGoogleに伝える指定です。各言語のページのheadに、自分自身と全言語のURLを並べます。

ただし、hreflangだけ正しくても足りません。canonicalと転送も一緒に見てください。

それでは、順番に見ていきましょう。

この記事の要点
hreflangとは
hreflangとは、同じ内容の言語違いのページをGoogleに伝える指定で、HTMLのhead・HTTPヘッダー・サイトマップのどれかで、各ページが自分自身を含む全言語のURLを書きます。
目次

hreflangとは、言語違いのページをGoogleに伝える指定です

同じ内容の日本語版・韓国語版・英語版があるとき、どれも同じページの言語違いだとGoogleに伝えるのがhreflangです。

Googleの公式ドキュメント(2026年9月21日更新・2026年11月5日に確認)にも、ローカライズされた同じ内容だと理解するために使う、と書かれています。

間違えやすいのは、言語の判定には使われないことです。Googleは、hreflangやHTMLのlang属性ではなく、アルゴリズムで言語を判断すると書いています。

hreflangの書き方は、headに全言語のURLを並べるだけです

指定の方法はHTML・HTTPヘッダー・サイトマップの3つで、Googleから見るとどれも同じです。3つを併用しても、検索での利点はありません。

以下は、自社サイトの韓国語ページのheadに入っている5行です(2026年11月5日に確認)。

canonicalは韓国語ページ自身を指して、hreflangには韓国語を含む全言語を書いています。

  • <link rel="canonical" href="https://www.webharu.com/ko/posts/webflow">
  • <link rel="alternate" hreflang="ja" href="https://www.webharu.com/posts/webflow">
  • <link rel="alternate" hreflang="ko" href="https://www.webharu.com/ko/posts/webflow">
  • <link rel="alternate" hreflang="en" href="https://www.webharu.com/en/posts/webflow">
  • <link rel="alternate" hreflang="x-default" href="https://www.webharu.com/posts/webflow">

x-defaultは、どの言語にも当てはまらない人に出す行き先です。

hreflangは、ページ同士が互いを指していないと無視されます

公式の決まりのうち、実装で外せないのは以下です。

  • 各言語のページが、自分自身と他の全言語を書く
  • 2つのページが互いを指していないと、タグは無視される
  • URLは https から始まる完全な形で書く(/foo は不可)
  • 値は言語コードから書く(国のコードだけは不可)

国のコードは、公式の例が分かりやすいです。be はベラルーシ語のコードなので、ベルギー向けのつもりで be と書くと、意図と違う指定になります。

日本語版だけ301で統合したら、hreflangエラーが16件出ました

2026年8月、日本語の旧講座14本とSEO記事1本をハブ記事へ301で統合しました。

翌日、Ahrefsが検出したのが「Hreflang to redirect or broken page: 16 URLs」です。

原因は、統合したのが日本語版だけだったことです。韓国語版と英語版は生きたままで、hreflangのjaが301先を指していました。

落とし穴は、hreflangを作るロジックが「日本語の原本は必ず存在する」前提だったことなんですよね。原本だけ消すと、翻訳ページが全部壊れます。

直し方は、記事の状態で2つに分けました。

  • 内容が古くて消した記事は、翻訳版も同じように301で統合する
  • 言語ごとに内容が統合されていない記事は、翻訳版を残して、hreflangを実在する言語だけで組み直す

組み直すときのx-defaultは、英語を優先しました。

hreflangは合格なのに、canonicalが日本語版を指していました

2026年8月には、原本1本から全言語を機械で作る仕組みを組みました。348URLを、hreflangの相互チェックまで通して本番に出しています。

「hreflangが緑なら安心でしょ」違います。

その後の点検で、翻訳ページのcanonicalが日本語版を指していたと分かりました。hreflangの検査とは別の項目なので、緑のままです。

Googleの公式ドキュメントは、hreflangを使うなら同じ言語のページをcanonicalに指定するよう書いています(2026年11月5日に確認)。

さらに、言語版があるのに日本語へ飛ぶ内部リンクが各言語961本ありました。英語の記事一覧をクリックすると、日本語の記事に着く状態です。

そこで、検査を2つ足しました。

  • canonicalが自分自身を指しているか
  • 言語版があるページへの日本語のリンクが0本か

言語切替リンクだけは他の言語を指すのが仕事なので、検査から外します。

韓国語57本が検索から消えた原因は、hreflangではなく転送の1行でした

hreflangより手前の事故も書いておきます。2026年7月に自社サイトを作り直したとき、韓国語のページ57本が検索結果から消えました。

AIへの僕の指示は「韓国語版は当面作り直さない」でした。AIは「/ko/ 以下は全部、日本語版へ301で転送する」という1行を書きました。

正直に書くと、僕もその1行をレビューで素通りさせています。

公開は7月16日で、7月20日を境に韓国語ページの表示回数は実質ゼロになりました。おかしいと気づいたのは8月1日、公開から16日後です。

サイトはふつうに表示されますし、日本語のページは検索にも出ています。見た目では、何も起きていないように見えるんですよね。

韓国の検索で「webflow」が平均5.6位、7週間で1万1,663回表示されていた記事もありました。

韓国語ページ全体の表示回数は、2026年8月の2,252回から9月は3,355回まで戻っています。経緯はサイトリニューアルのSEOへの影響の記事に書きました。

hreflangの確認は、全URLを機械でチェックします

Ahrefsの再クロールは待ちませんでした。sitemapの全URLをクロールして、hreflang先と内部リンク先のHTTPステータスを見るスクリプトで確かめました。

20並列で250URLが1分でした。修正前の16件が、修正後は0件です。

公開後の見張りも足しています。主要なURLがリダイレクトや404になっていないかを、自動で1日2回確かめる仕組みです。

Ahrefsの画面の見方はAhrefsサイト監査の使い方の記事にあります。

Weglotを使うなら、JavaScriptだけの方式では検索に出ません

翻訳ツールのWeglotには、DNSを触らずに始める「JavaScriptだけ」の方式があります。

Weglot公式は、この方式は検索エンジンに読まれず、SEOの効果はないと書いています(2026年11月5日に確認)。

翻訳ページを検索に出したいなら、言語ごとのURLができてhreflangも自動で付く、サブドメインかサブディレクトリーの方式を選びます。

手順はWeglotの使い方の記事に書きました。

制作の裏側や実測の続きはメルマガで書いています。

制作実績

よくある質問

hreflangとは何ですか?

同じ内容の言語違いのページをGoogleに伝える指定です。HTMLのhead・HTTPヘッダー・サイトマップのどれかで書きます。Googleから見ると3つの方法は同じです。

hreflangはどう書きますか?

headに link rel="alternate" を全言語ぶん並べます。hreflangに言語コード、hrefに https から始まる完全なURLを入れます。各言語のページが、自分自身も含めて全言語を書きます。

hreflangが無視されるのはどんなときですか?

2つのページが互いを指していないときです。Googleの公式ドキュメントに、その場合はタグが無視されると書かれています(2026年11月5日に確認)。

x-defaultは何のためにありますか?

どの言語にも当てはまらない人に出す行き先です。自社の韓国語ページでは日本語版を指定しています。日本語版が無いページを組み直したときは、英語を優先しました。

hreflangは正しいのに、翻訳ページの様子がおかしいです。

canonicalが別の言語を指していないか確かめてください。自社では翻訳ページのcanonicalが日本語版を指していました。Googleは、同じ言語のページをcanonicalに指定するよう書いています。

hreflangのエラーはどう確認しますか?

Ahrefsでは「Hreflang to redirect or broken page」として出ました。自社はsitemapの全URLをクロールして、hreflang先のHTTPステータスをスクリプトで確かめました。250URLで1分でした。