[レベル: 上級]
JavaScript によってクライアントサイドでレンダリングした rel="canonical"
タグを Googlebot は無視することが Google I/O 2018 で明らかになりました(rel="amphtml"
も同様に無視される)。
しかしながら、JavaScript によって挿入された rel="canonical"
をきちんと処理するケースが実際にはあるようです。
JS 挿入した canonical を Googlebot が認識することを実験で検証
JavaScript によってクライアントサイドのレンダリングで挿入した rel="canonical"
を Google は本当に無視するのかどうかを Eoghan Henn(オーン・ヘン)氏がテストによって検証しました。
テストの手順と経過、結果の詳細はレポート記事で確認していただくとして、簡単にまとめると次のようなことが判明しました。
なお rel="canonical"
の挿入には、Google タグマネージャ (GTM) を利用しています。
- GTM で挿入した rel=”canonical” は検索結果においては想定どおりに処理された、つまりきちんと正規化された
- (ベータ版)Search Console のインデックスカバレッジでは、「送信された URL が canonical として選択されていません」の警告がレポートされた。
最終的な検索結果の状況は I/O での発表と一致しませんでした。
しかし、Search Console では I/O で言われた動きと一致しています。
JS 挿入の canonical が機能するケースもあるらしいが頼るべきではない
この実験結果について、Google の John Mueller(ジョン・ミューラー)氏は次のようにコメントしています。
- I/O での言及はどちらかというと注意喚起に近い。自分(ジョン)にとっても予想外のことだったので知らせたほうがいいと考えた
- JS で挿入した
rel="canonical"
が常にではないがうまく機能するケースがあるようだ - ただしそれに頼るべきではない。確実に処理させたいならサーバーサイドで最初から
rel="canonical"
をレンダリングさせておくべき - JS によってクライアントサイドで上書きした
rel="canonical"
がきちんと処理されるかどうかは不確か
This was a cool test setup, thanks for running it! A few things: what we said at I/O (re: rel-canonical via JS) was more of a warning. When I saw that internally, I wanted to let folks know, because it was unexpected to me (& imo it would be good to support it).
— John ☆.o(≧▽≦)o.☆ (@JohnMu) 2018年6月6日
Going through your example, it looks like it does work, at least sometimes (see? great test!). IMO I would not rely on this though, if you really want a URL as a canonical, do the work to get the signal in right from the start.
— John ☆.o(≧▽≦)o.☆ (@JohnMu) 2018年6月6日
If you're providing conflicting directives (overwriting an existing rel=canonical), that's always a bit iffy. It does look like we pick up rel-canonicals added via JS in many cases now though. Woot! Makes life a bit easier (and also more ways to self-foot-shoot ¯\_(ツ)_/¯ )
— John ☆.o(≧▽≦)o.☆ (@JohnMu) 2018年6月6日
原則として canonical はサーバーサイドで配信すべし
1つの実験、しかも検証のために準備した環境なので断定はできませんが、JavaScript でレンダリングさせた rel="canonical"
を Google が処理することがあるのは間違いないようです。
しかしそうは言っても、100%確実にという保証はありません。
また JS 挿入による rel=”canonical” が検索結果に反映されるまでには3週間ほどかかったとのことです。
JS をレンダリングしてインデックスするのは HTML のクロールとは別プロセスです。
検索結果に出るまでには時間がかかることがあるのはよく知られるところだし、Google I/O のセッションのなかでも触れられています。
サーバーサイドでも rel=”canonical” を配信し、クライアントサイドでも rel=”canonical”をレンダリングさせ、両者が一致していない場合は、おそらくクライアントサイドでの最終型が処理されるはずです。
しかし、これも保証はありません。
JavaScript によってレンダリングさせた rel=”canonical” を Google は実際には認識するようです。
ですが、そうしなければならないという特別な状況にない限りは、rel="canonical"
はサーバーサイドで配信するのが安全確実です。