リーマンとブロガーの二重生活をかれこれ8ヶ月ほど続けている不良会社員のゴロドクです、どうも。
当ブログの移転にともない、移転以前の記事については旧ブログと新ブログでコンテンツが重複することになってしまいましたが、新ブログのほうを優先してgoogleの検索結果に反映させるための方法を調べてみました。
スパムでなくとも重複コンテンツが発生する場合はある
ウェブ上にはいわゆる重複コンテンツ(同一/異ドメイン問わず、異なる2つ以上のページで同一のコンテンツが掲載されること)なるものが存在する事がしばしばありますが、Googleの検索結果では似たような内容のページのうち原則的にいずれか一つを表示するような仕様になっています。
ときどきこれは「故意に重複したコンテンツを設置して検索結果上位を占有するためのスパムに対するペナルティ」と解釈される文献を見かける事がありますが、私が思うにこれは単に検索ユーザーに対して無駄な結果を見せない(同じ内容何度も見ても意味がないよね)ためのGoogle側の単なる配慮だと理解しています。
その辺のGoogle側の意図はさておき、今回の当ブログの移転のようにブログに限らずウェブサイト一般においてもURL変更にともなって重複コンテンツが存在せざるを得ない場合はときに発生します。
ブログのようにコンテンツが逐次増えていくようなものは、放っておいてもいずれはサイトボリュームの大きくなってサイトの価値が高いと判断されたほうが自然に検索結果に表示されるようになるとは思うのですが、もっと明示的に優先すべきページを指定して検索結果に反映させる方法はないかと調べたら以下のような文献が見つかりました。
Google ウェブマスター向け公式ブログ: クロスドメイン URL の選択 – 複数のドメイン間の重複コンテンツの正規化について
クロスドメイン URL の選択 – ウェブマスター ツール ヘルプ
rel=”canonical” 属性について – ウェブマスター ツール ヘルプ
いずれもGoogle側の公式なアナウンスですので十分あてにして良い内容だと思います。特に3つ目は具体的な方法論が書かれているので、ウェブサイト移転にともなう重複コンテンツが発生する場合にはぜひ読んでおくと良いでしょう。
canonicalという考え方
上記3つ目の文献冒頭にはこんな事が書かれています。
canonical ページとは。canonical ページを指定する理由
canonical ページとは、複数の類似した内容のページの中で優先されるページです。
(中略)
内容の重複が Google によって検知された場合は、インデックスに登録され、検索結果として表示されるページは重複のページの 1 つのみである可能性があります。Google のアルゴリズムは、ユーザーの検索クエリを元に最適なページのみを表示します。しかし現在では、検索エンジンに「canonical ページ」を指定できるようになりました。canonical ページは、正規化されていないページの <head> セクションに、rel=”canonical” 属性を指定した <link> 要素を追加することで指定できます。リンク要素と属性を追加することで、サイト所有者は重複ページのリストと、その中で最も重要な情報が含まれ、優先されるページを Google に通知することができます。このページは、検索結果上でも優先表示するようにリクエストされます。
つまり、意図しない第三者によるコピーコンテンツでない限り、自分の管理する重複コンテンツについては明示的に優先度を指定できる、ということです。
より具体的には、優先度が最上位でないページの<head>~</head>タグ内に、以下のようなコードでlink要素を挿入し、最優先すべきページへのリンクを指定します。
<link rel="canonical" href="検索エンジンに最優先して表示されるべきページのURL"/>
作業としてはこれだけです。
重複ページの数が沢山ある場合は大変な作業になるかもしれませんが、WordPressをはじめとしたCMSを利用している場合は関数等を、一般のブログサービスでも独自タグを利用することでテンプレート上からさほど手間をかけずに設定することも可能かと思います。
当ブログの場合を例に挙げると、最優先でない旧ブログ(http://56doc.blog.shinobi.jp/)のテンプレート<head>~</head>タグ内に以下のコードを挿入しました。
<!--検索結果優先度の指定-->
<!--if_entry-->
<!--entry-->
<link rel="canonical" href="http://blog.56doc.net<!--$entry_link-->"/>
<!--/entry-->
<!--/if_entry-->
<!--if_page-->
<link rel="canonical" href="https://blog.56doc.net/"/>
<!--/if_page-->
<!--検索結果優先度の指定ここまで-->
忍者ブログの独自タグが含まれているので若干長くなっていますが、やっていることは同じです。
解説すると<!–if_entry–>~<!–/if_entry–>というのは「もし個別記事ページならば」という条件分岐です。該当する場合にこのタグ内を実行します。
<!–$entry_link–>は「(ドメイン部分を除いた)個別記事ページのURL」です。個別記事ページのURLは単に記事番号であり、新旧ブログで同一の記事番号になるようインポートしたのは前の記事で書いた通りですので、優先表示ページのドメインを新ブログのものにしてあると言うことです。
後半部分の<!–if_page–>~<!–/if_page–>というのは「もしメインページならば」という条件分岐です。当然これは優先表示ページに新ブログのトップページを指定しています。
応用など
冒頭に示した参考文献にもありますが、これは同一サイト内のページのコントロールにも応用できます。例えば物販サイトなどで商品検索結果に一覧が表示されるページと商品の個別紹介を行っているページのどちらを優先的にウェブ検索エンジンの結果に反映させるか、といった場合などです。
私も物販サイトなどは管理した事がないのでアレですが、例えばphpの商品検索システムで誰かが検索した結果をたまたまクローラが拾ってインデックスされている場合もしばしば見かけます。
しかし管理者サイドとしてはそんな誰かさんの一時的な商品検索結果よりも個別の商品紹介のほうを優先してウェブ検索の結果に残したいですよね。
そういった場合には商品検索システムの結果ページを表示する際、「canonical」を指定(この場合は商品検索システムのトップか、あるいは一押しの商品紹介ページが適切でしょうか)するスクリプトを組んでおくと、管理者としても魅せたいものを指定できるし、ユーザー側もなんだか良くわからない商品羅列を見ないで済む、ということです。
あるいはブログシステムにおいても、日月別ページやカテゴリページを敢えて表示させずにブログトップページを優先的に表示させる、などと言うようなことも可能でしょう。
まとめ
ウェブサイト移転にともない旧サイト側に「canonical」を指定しても、それが実際に検索結果に反映されるのは当然検索エンジンにクロールされてから後と言うことになりますので、今回のようなコード追加後は一応更新pingをGoogleへ送っておくと良いかもしれません。
SEOというほど大げさなものではないでしょうが、サイト流入をある程度管理したい場合は旧ページからのリダイレクトとあわせて実施しておくと無難かと思います。
コメント