canonicalタグは、どのURLをマスターコピーとして扱ってほしいかを検索エンジンに伝えるものです - 通常は従われますが、上書きされることもあるヒントです。301リダイレクトは選択の余地をまるごと取り除きます。訪問者とクローラーの全員を1つのURLへ送り、旧URLは応答をやめます。判断はこの一文に尽きます。両方のURLが人間にとって機能し続ける必要があるならcanonicalタグを使い、存在すべきURLが1つだけならば301を使います。
この2つが混同されるのは、ほぼ同一のURLにランキングシグナルが分散してしまう重複コンテンツという同じ問題に、異なる仕組みで立ち向かっているからです。canonicalはページのhead内に残されている提案です。リダイレクトはブラウザが従うしかないHTTPレスポンスです。この2つを取り違えると、生かしておく必要があったURLを殺してしまうか、同じページの複数バージョンがインデックス内で互いに競合したまま残ってしまうか、どちらかになります。
私はこの説明を、301対302の疑問よりも頻繁に繰り返してきました。だからこれは、初めて誰かに聞かれたときにあってほしかったバージョンです。もしステータスコードの疑問のためにここに来たのなら、301 vs 302リダイレクトがその話を完全にカバーしています。この記事が扱うのは、また別の分かれ道についてです。
canonicalタグ vs 301リダイレクト:ヒントと命令の違い
rel=canonicalタグはページの<head>内に置かれます:<link rel="canonical" href="https://example.com/preferred-url" />。これはcanonical URLを選ぶために使われる複数のシグナルのうちの1つで、強力ではあるものの、他の根拠と食い違えば検索エンジンに上書きされることもあります。両方のURLは生きたままで、人はどちらを訪れても200レスポンスを受け取れます。このタグが変えるのは検索結果に表示される内容だけで、ブラウザが到達できる範囲ではありません。
301リダイレクトは提案ではありません。リクエストそのものに応答します。旧URLを求めれば、新しいURLへ送られる、それで終わりです。訪れるべき旧ページのバージョンはもう残っていません。ブラウザはそれを試すのをやめ、検索エンジンはそれ自体のコンテンツにもう解決しないという理由でインデックスから外します。
実務上の判断は、2つの条件に集約されます。
- 実際の訪問者にとって両方のURLが解決し続ける必要があるなら、canonicalを使います。
- 今後1つのURLだけが存在すべきなら、リダイレクトを使います - どのコードがどの種類の永続性に合うかはURLリダイレクトの種類を参照してください。
この2つのツールは、同じ問題に正反対の方向から立ち向かっています。リダイレクトは、人が二度と到達すべきでないURLのためのものであり、canonicalは、人が正当な理由で到達するかもしれないURLのためのものです。
重複コンテンツに異なる対処が必要な4つの状況
4つの状況が絶えず起こり、それぞれにちょうど1つの正しいシグナルがあります。この対応関係を逆にしてしまうと、生きているワークフローを行き詰まらせてしまうか、おとりのページをインデックスに居座らせてしまうか、どちらかになります。
パラメータ付きURL
トラッキングパラメータやセッションIDが付いたURL - ?ref=partnerや?sessionid=abc123など - は、余計な荷物を背負っているだけで、機能的にはクリーンなバージョンと同じページです。これをリダイレクトで消してしまうのはたいてい間違いです。紹介コード、A/Bのバケット、セッションの引き継ぎなど、パラメータがリクエストを生き延びる必要がある場合が多いからです。正しい対処は、クリーンなURLに自己参照型のcanonicalを置くことです。そうすればパラメータ付きバージョンは到達可能なまま残り、タグが検索エンジンにノイズのないバージョンをインデックスするよう伝えます。
キャンペーンタグ付きURL
これはマーケティングチームが毎日ぶつかるケースです。elido.app/pricing?utm_source=newsletter&utm_medium=email&utm_campaign=august-launchのようなリンクは、タグ付けされたとおりに動き続ける必要があります。UTMパラメータこそが、キャンペーンやチャネルを横断して、その訪問をニュースレターに帰属させる仕組みだからです。例外はいっさいありません。裸の/pricingURLにリダイレクトしてしまうと、アトリビューションが記録される前に失われてしまいます。
canonicalタグはリンクにではなく、到達先のページに置きます。/pricingが<link rel="canonical" href="https://elido.app/pricing" />を宣言し、すべてのUTMタグ付きバリエーションが同じ到達先を継承します。タグはブラウザがリクエストする内容には一切触れないため、検索エンジンは1つのクリーンな/pricingURLをインデックスしつつ、アナリティクス側は依然としてキャンペーンごとのバリエーションを別々に把握できます。1つ注意点があります。一部のブラウザは、アトリビューションが記録される前にUTMパラメータを取り除いたり、それを読み取るスクリプトをブロックしたりするようになっています - キャンペーンの数字が物足りなく見えるなら、FirefoxとBraveがUTMアトリビューションを壊す仕組みを確認してください。これはトラッキングの問題であって、canonicalの問題ではありません。
ページネーションやファセットのページ
正直な答えは、その組み合わせに検索クエリが実際に求め得るコンテンツがあるかどうかで決まります。アーカイブの2ページ目は1ページ目とは本当に異なるコンテンツなので、ページネーションされたすべてのページを1ページ目にcanonicalizeしてしまうと、実際には裏目に出がちです。同じカタログを並べ替えているだけのファセットフィルターはその逆のケースです - フィルターなしのカテゴリページにcanonicalizeするのが正解です。そのURLには個別にインデックスする価値のあるものが何もないからです。普遍的なルールはなく、同じテストを当てはめるだけです。
廃止したページの統合
ここではcanonicalタグは誤った道具であり、正しいのはリダイレクトだけです。ページが完全に廃止される場合 - 新しい記事に統合された、カタログの変更後に削除された - 旧URLが何かに解決し続ける理由はもうありません。301はランキングシグナルをきれいに引き継ぎ、使われなくなったページを流通から外します。削除するつもりのページにcanonicalタグを置いても、孤立したURLがクロール可能なまま、劣化し続けられるまま、よろよろと生き残るだけです - これはまさにリンク切れ防止が捕まえようとしている失敗パターンです。旧ページが本当になくなっているなら、リダイレクトしましょう。死体をcanonicalizeしてはいけません。
canonicalとリダイレクトが食い違うとき
URLが両方のシグナルを同時に持っていて、それらが食い違っていることがあります。ページAは301でページBへリダイレクトしますが、ページBは自分自身のcanonicalとしてページCを指し示しています - 最初のクリックが始まった場所から、何ホップも離れたところです。
Googleのガイダンスは明確です。リダイレクトはcanonicalタグよりも強く、より文字どおりのシグナルです。すでに代替を取り除いてしまっているため、再考すべきページAはもう残っていないからです。この2つが食い違う場合、リダイレクト先が実質的な到達先として勝ち、その到達先にあるcanonicalタグが、検索エンジンが評価する実際のシグナルになります。クローラーがチェーンの終わりにたどり着くころには、それより手前にあるものはすべてノイズです。
実務上の失敗が哲学的な問題であることはめったにありません - たいていは誰も監査していないチェーンであり、最終到達先のcanonicalが何年も前の別の移行のために設定されたまま、一度も見直されていないというだけです。それをほどくには、200を返し自分自身をcanonicalとして宣言しているURLに到達するまですべてのホップを追跡し、古くなっているリンクを直すことです。1回のきれいなホップ、たどり着いた場所と一致するcanonicalタグが1つ、それが目指すべき状態のすべてです。
なぜすべてのページに自己参照型canonicalが必要なのか
自己参照型canonicalとは、canonicalタグが自分自身を指しているページのことです。/pricingが何も宣言せずに黙っている代わりに<link rel="canonical" href="https://elido.app/pricing" />を宣言する、それだけのことで、うまく運営されているページの多くが、まさにその理由でこれを備えています。不思議なことは何もありません。一見すると冗長に見えます - なぜページが自分自身であることをわざわざ確認する必要があるのか、と。しかしこれは、URLが偶然に重複してしまうあらゆる経路 - 末尾のスラッシュ、大文字小文字の混じったパス、プラグインが付け足した紛れ込みのクエリ文字列、httpsと並んで残り続けるhttp版 - に対する安価な保険です。どれが本物のコピーかを何も示していなければ、そのどれもが別の、ほぼ重複したURLとしてインデックスされてしまう可能性があります。
これを設定していないと、選択はGoogle自身のシグナルの重み付けに委ねられます。たいていは正しく選ばれますが、たまに間違うこともあり、それに気づくのは間違ったURLがランキングされているのを見つけたときで、これは気づき方として好ましくありません。インデックス対象になり得るすべてのページに明示的に設定しておけば、その曖昧さが問題になる機会自体がなくなります。
1つのページを十数個のチャネル向けにタグ付けしていて、canonicalがレポートの集計内容と一致しているかどうか分からないなら、Elidoのアナリティクスがすべてのタグ付きバリエーションを、実際に計測している対象のURLへとまとめ直してくれます。紛れ込んだパラメータが、気づかないうちにトラフィックを2つに分けてしまうこともありません。
短縮リンクはcanonical URLとどう関係するのか
短縮リンクは、この話に含まれるように見えて、実はほとんど含まれない疑問を持ち込みます。elido.app/abc123は、到達先を指すcanonicalタグを必要とするのでしょうか。答えはノーです。リダイレクトドメインは、訪問者を送り届ける先のページの重複ではありません - それ自体のコンテンツを持たない、canonicalタグが解消すべきものが何もないアドレスです。canonicalizationは、コンテンツとしてインデックスされる可能性があるページのためのものであり、短縮リンクは最初からその候補ではありません。
意味のあるcanonicalタグは、到達先のページに置かれるべきもので、それは訪問者が他のどんな経路でたどり着いた場合とも変わりません。elido.app/summer-saleが人々をyoursite.com/sale?utm_source=twitterへ送るとしても、canonicalの作業は先ほどのキャンペーンタグ付きURLのケースと同じで、同じようにタグ付けするどんなキャンペーンリンクとも変わりません。それはyoursite.com/sale側で起きることであり、短縮リンク側ではありません。同じ短縮リンクをキャンペーンや地域ごとに異なる到達先へ振り分けたとしても、答えは変わりません。スマートリンクはクリックをルーティングするだけで、canonicalの作業は依然として、訪問者が実際に着地した場所で行われます。リダイレクト自体が正しいかどうかという疑問は、301 vs 302リダイレクトとURLをリダイレクトする方法がカバーしています。
短縮リンクをめぐるSEOの不安が、この2つのシグナルを切り分けてしまえばほとんど根拠のないものになるのは、これが理由です。リダイレクトは自分のシグナルを引き継ぎ、到達先のcanonicalは自分のシグナルを処理し、どちらも互いを汚染しません。URL短縮サービスはSEOを傷つけるかがその疑問の残りをカバーしています。
ページが実際にどのシグナルを送っているかを確認する方法
思い込みで判断してはいけません。まずリダイレクトから、両方のシグナルを直接確認しましょう。
curl -sI "https://example.com/old-page"
Locationヘッダーを伴う301は、そのURLが完全になくなったことを意味します。3xxステータスがなければリダイレクトは存在せず、その場合はcanonicalタグだけが機能しているシグナルです。canonicalタグ自体を見るには、ページを取得してソースを検索します。
curl -s "https://example.com/page" | grep -i 'rel="canonical"'
あるURLが両方を送ってきているなら、どちらが本当の到達先かを決めつける前に、チェーンを最後まで追跡してください。この2つが一致している場合 - リダイレクトが、自分自身を指すcanonicalを持つURLに着地する場合 - シグナルは曖昧さのない状態になります。これは、ランキングにとって重要なすべてのURLがあるべき状態です。
ブログの関連記事
よくある質問
canonicalタグと301リダイレクトの違いは何ですか。
canonicalタグは、両方のURLが生きたまま到達可能な状態を保ったうえで、検索エンジンにどちらのURLを優先すべきかを伝える、ページのhead内に置かれるヒントです。一方301リダイレクトは、訪問者とクローラーの全員を新しいURLへ送り届け、旧URLをサービスから外すHTTPステータスコードです。Googleはcanonicalを強いシグナルとして扱いますが、他の根拠と食い違えば上書きすることもあります。対してリダイレクトには比較検討すべき相手が残りません。再考すべき旧ページ自体がもう存在しないからです。両方のURLがリクエストに応え続ける必要があるならcanonicalタグを使い、片方だけが存在すべきならリダイレクトを使います。
重複コンテンツにはcanonicalタグと301リダイレクトのどちらを使うべきですか。
重複しているURLをそもそも存在させたくないなら - 廃止したページ、古いドメイン、恒久的な移転など - リダイレクトを使います。リダイレクトはランキングシグナルを一本化すると同時に、使われなくなったURLを流通から外してくれるからです。UTMタグ付きのキャンペーンリンク、セッションパラメータ、ほぼ重複しているフィルター済みページなど、正当な理由があって重複URLを到達可能なままにしておく必要があるなら、canonicalタグを使います。判断の分かれ目は、canonicalとして選ばなかった方のURLに、人間が訪れ続ける正当な理由があるかどうかです。
canonicalタグとリダイレクトが食い違っている場合、何が起こりますか。
リダイレクトが勝ちます。リダイレクトはすでに代替URLを選択肢から取り除いてしまっているため、そのチェーンの時点でcanonicalタグが矛盾を唱える相手はもう残っていないからです。Googleはまずリダイレクトをたどって到達先まで行き、その到達先が宣言しているcanonicalタグを実際に効くシグナルとして読み取ります。食い違いを直すには、200を返し、かつ自分自身をcanonicalとして宣言しているURLにたどり着くまで、すべてのホップを追跡します。
UTMパラメータの付いたURLにcanonicalタグは必要ですか。
はい。canonicalタグは到達先のページに置くべきもので、トラッキングパラメータの付いていないクリーンなURLを指すようにします。/pricingのようなページは、何種類のUTMタグ付きバリエーションからリンクされていようと、自分自身をcanonicalとして宣言すべきです。そうすることで、検索エンジンは1つのクリーンなURLだけをインデックスしつつ、アナリティクス側はタグ付きバリエーションをそれぞれ別々に記録し続けられます。UTMタグ付きのURLをリダイレクトしてしまうと、アナリティクスツールが訪問を計測する前にパラメータが失われてしまいます。
なぜすべてのページに自己参照型のcanonicalタグを置くべきなのですか。
自己参照型のcanonical、つまりページが自分自身を優先URLとして宣言することは、末尾のスラッシュから紛れ込んだクエリパラメータ、httpsと並んで残り続けるhttp版まで、ページが意図せず重複してしまうあらゆる経路を塞いでくれます。これを設定していないと、Googleは自分自身のシグナルを使ってcanonical URLを選びますが、たいていは正しいものの、まれに間違ったバリエーションを選んでしまうことがあります。インデックス対象になり得るすべてのページに明示的に設定しておけば、その曖昧さをタダで取り除けます。
短縮リンクにcanonicalタグは必要ですか。
いいえ。短縮リンクはそれ自体にコンテンツを持たない純粋なHTTPリダイレクトなので、そのURL上にはcanonicalタグが解消すべきものが何もありません。canonicalizationが意味を持つのは、コンテンツとしてインデックスされる可能性があるページに限られます。意味のあるcanonicalタグは、短縮リンクがリダイレクトする先の到達先ページに置かれるべきものであり、それは訪問者が他のどんな経路からたどり着いた場合とも変わりません。
Elidoを試す
URLを貼り付けて短縮リンクを取得
登録不要。リンクは30日間有効。永久に保存するには登録してください。
Free、登録不要 · 1日あたり2件