どのようにしてGoogleは重複URLを検出し正規化しているのか?

[レベル: 上級]

Google の Gary Illyes(ゲイリー・イリェーシュ)氏と John Mueller(ジョン・ミューラー)氏、Martin Splitt(マーティン・スプリット)氏の 3 人が『Search Off the Record』というタイトルで SEO をテーマにしたポッドキャストを配信しています。

エピソード 9 では、重複コンテンツの処理についてゲイリーが詳しく説明しました。
Google 検索の内部の動きに関心がある人にはとても興味深い内容です。
この記事で内容を完結にまとめます。

Google が重複を検出し正規化する仕組み

重複コンテンツの処理は次の 2 つのプロセスで成り立っています。

  • 重複検出
  • 正規化

それぞれを順に説明します。

重複検出

重複検出は、URL は異なるけれど中身が同一のページを識別するプロセスです。
同じあるいはほぼ同じとみなしたページたちを、1 つのまとまりとして束ねます。
この処理を “Clustering(クラスタリング)” と言います。

同一かどうかをみなす際には、ページ内のテキストをすべて比較するのではなく、ハッシュで作成したチェックサムを利用します。

すずき補足: 「チェックサム」はデータの整合性を検出する仕組みです。「ハッシュ」を用いて作成できます。ハッシュは、元の文字数に関わらず一定の文字数に変換する技術です。文字が 1 つでも変わるとできあがったハッシュはまったく別のものになります。不可逆的で、ハッシュから元の文字列に戻すことはできません。

たとえば、「アップル」と「アップルパイ」、「アップルパ」を SHA-256 という方式を用いてハッシュ変換した文字列は次のようになります。

  • アップル: C20586BADC313340CED37F3AF8263E27156A44DF842168730A9C693A515D1FB7D8F2BFD77EB82D55E39FD72AED41E55AAA4F08B09E70D96633AA2CA7B97CAA38
  • アップルパイ: C15F5B809892CCF1EEED5CCD16F6D6B6F2FF271E6920A4B78B57C4C5ACE2ED1D6FAC2C156678925DA8BC59B8147066CB9D53E0BD35DE3D034D035209CD68D62E
  • アップルパ: B48EFADBE47B4497B8A184224698CB2B5AA90A858493CBD10BAB5F05533693CBE59D84C3A9A84F21BAAFE5FC7B01C474D4DCCF10910CAC0077813689AAAD9E98

ちなみに、ハッシュは HTTPS でも使われていて、通信データの改ざんがないかどうかを調べるために利用されます(HTTPS はデータ暗号だけの技術ではない!)

ハッシュ変換したチェックサムを使うことにより、長い記事のページでも全文を比較する必要がなくなるしコンピュータリソースの消費も抑えられます。(4 文字の「アップル」であっても、100,000 文字の長文であってもハッシュの長さは同じです。短いほうが比較は簡単ですね)。

比較の対象になるのは、そのページの中心となるコンテンツです。
複数のページで共通しているテンプレート部分、たとえばサイドバーやフッターを除外してチェックサムを生成します。

チェックサムが同じかもしくは類似している URL はクラスタリングしてまとめられます。

すずき補足: チェックサムが「”かなり” 似ている」(fairly similar) ページもクラスタリングするとゲイリーは言っています。1 文字でも異なると(データが少しでも異なると)ハッシュは完全に違ったものになるので、データの整合性を調査するハッシュでは同一かどうかを知ることはできても似ているかどうかを調べることはできません。しかし、2 つのセットがどのくらい似ているかを調べる SimHash というハッシュ方式があり、重複コンテンツの検出に Google はこれを使っているようです。

これが重複検出のプロセスです。

正規化

正規化は、クラスタリングした重複ページのなかから代表となるページを選出するプロセスです。

正規化する理由は、内容が同じページをいくつも検索結果に出さないようにするためです。
また、同じページをいくつもインデックスしないようにすることでインデックスサイズを削減できます。

代表となるページ、つまり正規 URL を選ぶために複数のシグナルを用います。
正規化に使うシグナルには、たとえば次のようなものがあります。

  • コンテンツ
  • PageRank
  • rel="canonical"
  • リダイレクト
  • HTTPS か HTTP か
  • サイトマップ

正規 URL の選出に影響する重み付けはシグナルで異なってきます。
リダイレクトはとても強いシグナルです。
リダイレクト元の URL を検索結果に表示したら、結局ユーザーはリダイレクト先に転送されます。
であれば、リダイレクト先を正規 URL にして検索結果に出すべきで、リダイレクト元を検索結果に出すべきではありません。

一方、HTTP か HTTPS かはリダイレクトに比べれば弱い正規化のシグナルです。

rel="canonical" はかなり強いシグナルとして使われます(でも命令ではなくヒントでしたね)。

重み付けの調整には現在は機械学習を用いています(以前にこのブログで取りあげました)。

人の手で重み付けを設定した場合、1つのシグナルを強くすると、あるクラスターの正規化は改善されるけれど別のクラスターの正規化が悪くなってしまうというケースが発生しがちで調整が非常に困難です。
微妙で複雑な計算を機械学習に今は任せています。

なお、正規化に使われるシグナルはランキングに使われるシグナルとは完全に別ものです。
あくまでも、正規 URL の選択だけに利用されます。
いったん正規 URL が決定されると、その URL に対してランキングシグナルを用いてランキングを評価します。

以上が、ゲイリーが解説した Google の重複コンテンツの処理プロセスです。

日常のサイト運営においてすぐさま役立つ情報ではないかもしれませんが、SEO の知識を深めるうえではとても参考になるはずです。