ちょっと前から、気になっていたのが、「canonical属性」。
別URLだが同内容となってしまう重複ページがある場合、検索エンジンに正しいURLをインデックスしてもらう為のLinkタグです。
<link rel="canonical" href="http://mysite.com"/>
<head> ~ </head>内に記述する。
パンヤ用のメンバーリストCGIの初版を2年前から運用していて気になっていたのが、Googleウェブマスターツールで、メタデータとタイトルタグの重複を指摘される事。
ソート情報をURLパラメーターに含んだリンクを生成している為、一つのユーザーデータに対し、ソートキーの組み合わせの数だけURLが生成されてしまいます。
メタデータとタイトルの重複回避対策
二年ほど前に作った初版のメンバーリストCGIは、meta情報の keyword と description 及び、<title> のテキストを、全ユーザーデータ同一の内容で吐き出していました。もちろん検索エンジンには、複数のユーザー情報が、全て類似ページとして扱われている状態です。
googleさんから大量の重複指摘を受けておりましたが、spamサイトの警告もされませんでしたし、CGIを一般公開する気も無かったので放置しておりましたけど・・・。
今回CGIを書き直すにあたり、まずは、メタ情報とタイトルの重複を回避する為、ユーザー情報の表示ページそれぞれに、
[ユーザー名] -[更新日] - サイトタイトル
というようなユニークな表記を導入してみました。
今日で1ヵ月弱が経過しまして、googleさんからの重複指摘は激減しました。各ユーザーについて2から4件程度の重複を指摘されている程度です。対処をしてから反映されるまで、およそ二週間から一ヶ月ほどの時間がかかる様子です。
canonical属性の導入
さて、ここまで減ってくると、残った数件の重複も消したくなるのが人の性というもの。残った重複指摘は、どうしても避ける事のできないソートキー情報によるURLのバリエーションです。
これが、自分のサーバーだけの事であれば、.htaccessでリダイレクト設定したり、ウェッブマスターツールでパラメーターの個別設定をすれば何とかなりそうな気もするのですが、不特定多数の方に公開してしまっているCGIスクリプトですから、スクリプト側で対応できるところはしないといけません。
実装にあたっては、とってもベタなやり方で対応しました。
$canonical という変数を作りまして、HTMLヘッダを吐き出すコードの中に埋め込んでいます。
ユーザーページ : $canonicalに「ユーザーURLとデフォルトソートキーを放り込んだリンクタグ」を代入
ユーザーページ以外の単一ページの時 : $canonicalを空にする。
これで一応、どんなソートキーの組み合わせでユーザー情報を表示しても、検索エンジン側は、デフォルトソートキーで表示されるページを正しいページとして理解してくれる筈です。
少々気になっているのが、デフォルトソートキーで表示された(正しい)ページにも、自分自身を指定するcanonical属性がセットされてしまう事ですが、他でcanonical属性を導入しているページを何件か見たところ、自己指定を特に回避しているわけでは無いようですので、問題なさそうです。
この属性については、検索エンジン側も、参考情報として使用する程度の扱いのようなので、しばらくはこれで良いと考えています。
引き続きgoogleさんからの重複指摘をトレースしてみたいと思います。
コメントする