今回は、こんな疑問にお答えします。
- 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分でした。





