JavaScriptでURLを正規化(canonical)する方法を徹底解説!初心者向けにわかりやすく解説
生徒
「先生、ウェブサイトのURLって同じ内容でもいろんな書き方がありますよね?これってSEOに影響するんですか?」
先生
「そうですね。例えば https://example.com/page と https://example.com/page/ は見た目はほぼ同じページですが、検索エンジンは別ページと判断することがあります。そこで『URLの正規化』、つまりcanonicalを設定することで、検索エンジンに正しいURLを伝えることができます。」
生徒
「canonicalって聞きなれない言葉です。どういう意味ですか?」
先生
「canonicalとは『正しい』『代表的な』という意味です。つまり複数の似たURLがある場合に、どれが公式で正しいURLかを検索エンジンに教える仕組みです。」
1. URL正規化(canonical)の基本とは?
URLの正規化とは、同じ内容のページが複数のURLでアクセスできる場合、検索エンジンに対して「こちらが正式なURLです」と示すことです。これにより、SEO対策として重複コンテンツの問題を防ぎ、検索順位を正しく評価してもらうことができます。
例えば、次のようなURLが存在する場合があります。
https://example.com/page
https://example.com/page/
https://example.com/page?utm_source=newsletter
https://www.example.com/page
これらは同じ内容を表示している場合、canonicalを設定することで検索エンジンに公式URLを知らせます。
2. HTMLでのcanonical指定の基本
HTMLでは、<link rel="canonical">タグを使って正規URLを指定します。headタグ内に書くことで、検索エンジンに正しいURLを伝えることができます。
<head>
<link rel="canonical" href="https://example.com/page">
</head>
この方法はシンプルで、SEO対策としても標準的です。
3. JavaScriptで動的にcanonicalを設定する方法
JavaScriptを使えば、ページが動的に生成される場合でもcanonicalを設定できます。例えば、ページがユーザーの操作によってURLパラメータが変わる場合です。
const link = document.createElement('link');
link.rel = 'canonical';
link.href = window.location.origin + '/page';
document.head.appendChild(link);
このコードは、現在のサイトのドメインを取得して公式URLとしてheadに追加しています。
4. URLの正規化で注意すべきポイント
URL正規化をする際には、以下の点に注意が必要です。
- 常に公式のURLを統一する
- パラメータ付きのURLはcanonicalで統一する
- wwwあり・なしを統一する
- HTTPとHTTPSも正規化を考える
例えば次のようにJavaScriptでwwwあり・なしを統一することも可能です。
let canonicalUrl = window.location.href;
if (!canonicalUrl.includes('www.')) {
canonicalUrl = canonicalUrl.replace('://', '://www.');
}
const link = document.createElement('link');
link.rel = 'canonical';
link.href = canonicalUrl;
document.head.appendChild(link);
5. パラメータ付きURLの正規化方法
ニュースレターや広告のURLには、?utm_source=xxxのようなパラメータがつくことがあります。これも正規化でSEO評価を正しく保つことが重要です。
function getCanonicalUrl() {
const url = new URL(window.location.href);
url.search = ''; // パラメータを削除
return url.href;
}
const link = document.createElement('link');
link.rel = 'canonical';
link.href = getCanonicalUrl();
document.head.appendChild(link);
このようにパラメータを除外することで、同じ内容のページを1つのURLとして評価させられます。
6. 動的サイトやSPAでのcanonical設定
シングルページアプリケーション(SPA)の場合、URLが画面遷移で変わってもページのHTMLは同じです。この場合もcanonicalをJavaScriptで動的に更新することがSEOに効果的です。
function updateCanonical(path) {
let link = document.querySelector('link[rel="canonical"]');
if (!link) {
link = document.createElement('link');
link.rel = 'canonical';
document.head.appendChild(link);
}
link.href = window.location.origin + path;
}
updateCanonical('/page/subpage');
このコードは、SPAでページが切り替わるときにcanonicalを更新して検索エンジンに正しいURLを知らせます。
7. 実際にSEO効果を確認する方法
canonicalを正しく設定したら、Google Search Consoleでインデックス状況を確認できます。また、SEO分析ツールで重複コンテンツが減っているかチェックすることも大切です。
// canonicalが設定されているか確認する簡単なチェック
console.log(document.querySelector('link[rel="canonical"]')?.href);
このように確認するだけでも、canonicalが意図通りに設定されているかがわかります。
8. まとめにかけての注意点とベストプラクティス
URL正規化はSEOの基本的な施策の一つです。HTMLでの固定canonicalとJavaScriptでの動的canonicalを状況に応じて使い分けましょう。ポイントは以下の通りです。
- 同じ内容のページは必ず1つのURLに統一する
- パラメータ付きURLやwwwあり・なし、HTTP/HTTPSも統一する
- SPAや動的ページではJavaScriptでcanonicalを更新する
- 設定後はGoogle Search Consoleなどで正しく反映されているか確認する
これらを守ることで、重複コンテンツによるSEO評価の分散を防ぎ、検索順位の安定化に役立ちます。
まとめ
JavaScriptを活用したURL正規化(canonical)の設定は、現代のSEO対策において非常に重要な手法です。今回学んだように、同じコンテンツが複数のURLでアクセス可能な場合、検索エンジンはそれぞれ別ページとして扱うことがあります。この重複コンテンツの問題を防ぎ、正しいページを評価してもらうためには、canonicalを適切に指定することが不可欠です。HTMLで固定canonicalを設定する方法から、JavaScriptで動的にcanonicalを生成する方法まで理解することで、静的サイトだけでなく、SPAや動的サイトでもSEO効果を最大化できます。さらに、wwwあり・なしやHTTP/HTTPSの統一、パラメータ付きURLの処理といった注意点を押さえることで、検索エンジンに正確な情報を伝えることができ、検索順位の安定化に貢献します。
サンプルコード例:JavaScriptで動的canonicalを設定
function setCanonical(path) { let link = document.querySelector('link[rel="canonical"]'); if (!link) { link = document.createElement('link'); link.rel = 'canonical'; document.head.appendChild(link); } link.href = window.location.origin + path; } setCanonical('/page/subpage'); console.log('現在のcanonical:', document.querySelector('link[rel="canonical"]')?.href); このコードでは、既存のcanonicalタグをチェックし、存在しない場合は新しく作成して、動的にページのURLに合わせて設定しています。SPAや動的にURLが変化するページでも、常に正しいURLを検索エンジンに通知することが可能です。
パラメータ付きURLを除去してcanonicalを設定する例
function getCanonicalUrl() { const url = new URL(window.location.href); url.search = ''; // クエリパラメータを削除 return url.href; } const link = document.createElement('link'); link.rel = 'canonical'; link.href = getCanonicalUrl(); document.head.appendChild(link); console.log('正規化されたcanonical:', link.href); ニュースレターや広告URLなどで追加されるパラメータを除去することで、同じコンテンツを1つの公式URLとして評価させることができます。これにより、SEO評価の分散を防ぎ、検索結果での順位安定化を図れます。
また、canonical設定後は必ずGoogle Search Consoleなどで確認することが推奨されます。document.querySelector('link[rel="canonical"]')?.hrefを使えば、実際に設定されているURLを簡単に確認可能です。これにより、意図したURLが正しく検索エンジンに伝わっているかを検証できます。
生徒
「先生、今回の学習でURL正規化の重要性がよくわかりました。同じ内容のページが複数あるとSEOに悪影響があるんですね。」
先生
「そうです。検索エンジンはURLごとにページを評価するため、canonicalを設定しないと重複コンテンツと判断され、SEO評価が分散してしまいます。」
生徒
「HTMLで固定canonicalを設定する方法も、JavaScriptで動的に設定する方法も理解できました。特にSPAでは動的設定が必須になるんですね。」
先生
「その通りです。SPAや動的サイトでは、ページ遷移に応じてcanonicalを更新することがSEO効果を維持する鍵になります。また、wwwあり・なしやHTTP/HTTPSの統一、パラメータ除去も重要なポイントです。」
生徒
「設定後はSearch Consoleで確認することも忘れずに行います。実際に正しいURLが反映されているかをチェックするのが大切ですね。」
先生
「その通り。こうして正しいURLを検索エンジンに伝えることで、重複コンテンツのリスクを減らし、検索順位の安定化に役立ちます。今回の内容を応用すれば、どんなサイトでもSEO評価を最大化できますよ。」