このページの本文へ

SEO:Googleが薦めるファセットナビゲーション設計のベストプラクティス

2014年02月17日 05時30分更新

記事提供:SEMリサーチ

  • この記事をはてなブックマークに追加
本文印刷

米Googleは2014年2月12日、通販サイトなどで良く見るファセットナビゲーションにおける、検索エンジン最適化(SEO)観点からのベストプラクティスを紹介する技術的記事を公開した。Maile Ohye 氏と Mehmet Aktuna 氏による共著の記事だ。

初めに:検索エンジンフレンドリーなファセットナビゲーションとは?

原文(英語)をお読み頂くとわかるが、極めて技術的で難解な内容で、上級者向けになっている。本記事では、 まずファセットナビゲーションを SEO 観点で捉える上で、問題となる要素と、最適化にあたっての基本的な方向性と考え方を紹介した上で、個別のベストプラクティスについて紹介したい。また、個別のベストプラクティスについても Google の説明は軽く触れつつ、私個人の意見として一般的に理解しておきたい要素や注意点について述べていく。

また、話をシンプルにするために、通販サイトを前提として「商品カテゴリ」「商品詳細ページ」という用語を用いている。他の業種業態のサイトでも当てはまるので、適宜置き換えて頂きたい。

先に要約しておくと、動的URLをどのように制御すべきか、というお話です。動的URLを扱う場合、絞り込み条件の追加とはパラメータの追加を意味します。そのパラメータをきちんとrj-ル付けしないと、同一コンテンツへのリンクとなる異なる(パラメータが微妙に異なる)動的URLが大量生成されるので、それを整理しましょうねということです。


ファセットナビゲーションとは

ファセットナビゲーション(Faceted Navigation)とは、あらかじめサイト側が用意した検索条件を選択することでコンテンツの絞り込みが出来るナビゲーションの仕組み。例えば通販サイトのカテゴリページを訪問すると、「色」「サイズ」「価格帯」「新着」「新品/中古」といった絞り込み条件のリンクが並んでいるのを良く見かけるだろう。ファセットナビゲーションはユーザーが目的のコンテンツを効率よく見つけ出すことを手助けしてくれる。


ファセットナビゲーションとSEOの問題

ファセットナビゲーションの実装に問題がある、すなわち URL生成及び処理ルールに問題があると、【重複コンテンツに起因する問題】と【価値のないページの大量生成】という2つの問題を招く可能性がある。以下、順を追って説明する。

【重複コンテンツ】ファセットナビゲーションの設計・実装において、SEO 観点からは特に URL構造設計について慎重に検討しなければならない。不適切なURL構造設計ルールで開発をすると、『同じコンテンツを表示する、多数のURLパラメータの組み合わせ』を生成してしまうからだ。いわゆる同一コンテンツが複数のURLに存在する重複コンテンツの問題が発生する。

重複コンテンツについては誤解も多いのでさらりと要点を整理しておこう。重複コンテンツが存在するという状況にあること自体は問題ではない。Googleのガイドラインに違反するわけでもなければ制裁が科されることもない。普通にウェブサイトを運営していれば様々な事情によりそれは生まれるからだ。基本的に Google がアルゴリズムで自動的に処理してくれるため、特に支障がなければ放置して良い。対処すべき時は、(1) 検索経由のランディングページ(≒検索結果に表示されるページ)を制御したいか (2) ユーザーに全く価値がないページが悪意の有無を問わず大量に生成されてしまっており、その原因が自サイトの設計に問題がある場合、以上2つのいずれかである。

さて、ファセットナビゲーションにおいて問題となるのは後者、(2) の問題を招く可能性があるからだ。パラメータの設計が不適切なために、無意味なパラメータをURLに延々と含めたり、トラッキングコードやセッションパラメータを URL に含めている eコマースサイトというのは相変わらず多い。

例えば「お菓子」カテゴリの「うまい棒」の商品詳細ページを指し示すのであれば、

【理想】お菓子カテゴリのURL:www.example.com/category.php?category=snack
【理想】うまい棒の詳細ページURL:www.example.com/product.php?item=umaibou

とシンプルなURL構造になることが望ましい。しかし現実には

【悪い例】お菓子カテゴリのURL:
www.example.com/category.php?category=snack?taste=wasabi
www.example.com/category.php?category=snack?price=10-1000
www.example.com/category.php?category=snack?stock=5?price=over-100
www.example.com/category.php?cat=snack?cat=japanese?cat=wakeari?taste=wasabi
...

【悪い例】うまい棒の詳細ページURL:
www.example.com/product.php?item=umaibou
www.example.com/product.php?item=umaibou?session_id=19408493
www.example.com/product.php?item=umaibou?session_id=19408493?category=snack
...

上記の【悪い例】のように、パラメータ構造に一貫性がない、論理的ではない作法でURLが生成されると、同じコンテンツを表示する URL が無限に生成されるために、特に超大規模サイト(=1億ページ以上のサイト)でこうした状況を放置すると、本来クロールさせたいページやカテゴリがインデックスされない自体を招いたり(※ クロールバジェット問題)、中身がないカテゴリページ、価値のないカテゴリページを延々とクロールされることで Google に品質に問題のあるサイトと判断される可能性もある(次の段落で説明する)。

【価値なきページの大量生成】 ファセットナビゲーションで様々な絞り込み条件を用意しておくと「条件に合致するコンテンツが存在しない」すなわちゼロ検索結果ページが表示されることもありうる。例えば宿泊予約サイトにおいて、東京駅から300メートル圏内で温泉があり朝食付きで1泊3000円以下の条件で絞り込みをしても該当施設は出てこないだろう。パラメータ及びURL構造設計に不備があると、こうした「ゼロ検索結果ページ」が延々とクロールされてしまうことがよくあるのだが※、度が過ぎると Google はこうしたサイトはコンテンツ品質に問題があると判断することがある。

※ 多かれ少なかれこういうページが存在してしまうことは仕方がないので、一般的な通販サイトが気にする必要はない。SKU(最小管理単位)で数千万にも及ぶような通販サイトであれば、気にした方が良い。


ファセットナビゲーション設計におけるSEOの基本的な考え方

ファセットナビゲーションの設計・開発における URL構造設計は、SEO的にはどうあるべきなのか、最初に全体的な考え方と方向性を提示する。

  1. 解決すべき問題は「無限に重複コンテンツへのクリックパスとなるURLが無限に生成される可能性」と「価値のないページばかりがクロールされ続ける可能性」を排除することにある。
  2. カテゴリや商品詳細ページそれぞれにアクセスするのに絶対に必要なパラメータを整理して、基本URL(正規化するURL)を決定する
  3. その基本URLをCanonicalタグとして全ページ記述する
  4. 単なる並び替えでかつ価値がない(≒検索要求が内)並び替えページに用いられるパラメータを含むURLへのリンクはできる限りクロールされないようにする

つまり、(1) 検索エンジンに登録して欲しい最優先URLをカテゴリ及び商品詳細ページそれぞれで決定をして、(2) Canonicalタグを記述して正規化する、(3) クロールされなくてもいい、どうでもいいページは極力クロールさせない、インデックスさせないようにする、というのが基本的な考え方です。

以上を踏まえた上で、ファセットナビゲーション設計のSEOのベストプラクティスの話に移ります。


ファセットナビゲーション設計におけるSEOのベストプラクティス

以上の基本的な考え方や方向性を理解してもらった上で個別の具体的な方法を見ていきましょう。

  1. 【商品詳細ページにアクセスするのに最低限必要となるパラメータの決定】検索エンジンが個々の商品詳細ページにアクセスするのに必要なURLパラメータを決定・分別する。つまり、商品詳細ページへのリンクを生成するのに絶対に必要となる最低限のパラメータを明確にする。例えば、productID が必要、catID と itemID の2つが必要といった具合。

  2. 【ユーザーに価値がある、検索意図に応えられるパラメータの決定】ユーザーにとって価値がある、有用性がある、検索意図に合致するページを表示出来るパラメータを決定・分別する。例えば、クチコミ一覧を表示するためのパラメータ review は、「うまい棒 レビュー」といった検索クエリに対するページを作り出すものとして意味があると判断出来る。

  3. 【重複を生み出し、クロールされなくても問題がないパラメータの決定】クローラにクローリングもインデクシングもさせる必要がない、単なる重複コンテンツを作り出すたけのパラメータを決定・分別する。例えば価格帯で区別するパラメータ price-range や 7日前に入荷した商品 stock=7-days-ago といったパラメータを持つ URL は、クロールさせる必要はない。そもそも、そのようなクエリで検索してくるユーザーはまずいない(だから検索エンジンに登録する必要がない)。

  4. 【クローラの制御(1) canonicalの設定】1.で区別した、商品詳細ページにアクセスするのに必要な、もっともシンプルなパラメータを持つ URL を Canonical URL(正規化するURL)として、1つ1つの商品詳細ページの Canonical URL としてアノテーションを記述する。Canonical URL は、あらかじめ定義したURLを挿入するようにしなければならない。決して、ユーザー(やgooglebot)がアクセスしてきたURLを Canonical として挿入するような設計は行ってはならない。大手ニュースメディアの多くがこの間違いを犯している。Canonical URL は常に一意でなければならない。

  5. 【クローラの制御(2) robots.txt による命令】クロールされる必要がないページは最初から robots.txt で弾くという方法もある。例えば、クロール不要なパラメータは全て /filtering/ というディレクトリ以下に展開されるようにした上で、robots.txt で disallow: /filtering/ と設定しておけば、望まないページがクロールされることはなくなる。/filtering/ というディレクトリを用意してもよいし、(こうしたクロール不要なパラメータURLは)サブドメインで分離してしまい、その上で robots.txt で弾いても良い。いずれにせよ、不必要なパラメータ持ちのURLはクローラのアクセス制御ができるように URL を変更して処理するという方法があるということは覚えておきたい。

  6. 【クローラの制御(3) rel=nofollow】クロールされる必要がないページへの動的URLへのリンクは、rel=nofollow を入れる。これはクロールを制御することが目的ではなく、「不要なパラメータ付URLの発見可能性を最小限にする」ことが目的だ。大規模な通販サイトで問題になるのは、クロール不要なURLに含まれるページから、更にまたクロール不要なURLを発見してしまい…無限ループに陥ってしまうこと。それを防止するための rel=nofollow だ。

  7. 【セッションID、トラッキングID、リファラIDの取り扱い】Session IDs、Tracking IDs、Referrer IDs、Timestamp といったコンテンツ表示制御には全く関係ないパラメータは、必ずURLのパラメータとして入れる。決してディレクトリ /session_id/ としてはならない。パラメータとして URL に入れることでむしろ Google はそれが「値にかかわらず表示には一切関係ないパラメータである」ことを判断しやすくなる。だから無駄なクローリングを避けるためにもパラメータとして入れるように設計する。なお、入れる場所は URL の後ろの方が望ましい(論理的に場所が固定されていれば Google は判断できると思われる。最悪なのは、URL生成が論理的ではなく、アクセス経路によってこれらパラメータの挿入される位置が変わってしまうこと)。


ファセットナビゲーションにおけるURL構造の決定方法(具体例)

技術的なベストプラクティスだけ提示されてもイメージがつかない人も多数いらっしゃると考えられるので、いくつか例示しておく。

  1. 例1)絞り込み条件が【並び順】【表示件数】【表示形式】を用意している場合

    まず、検索エンジンにインデックス登録させたい(≒検索経由で来訪するユーザーに見せたい画面レイアウト・表示)【並び順】【表示件数】【表示形式】を決定して、そのために必要なパラメータを整理する。サイト構築段階で本件の検討を行った場合は、パラメータなしでアクセスした時の画面、デフォルトの画面をそのインデックスさせたい条件ページと同じにしてしまうと、効率が良い。

  2. 例2)1ページあたりの表示件数が【10】【20】【40】【100】で選べる場合

    これはカテゴリあたりの平均掲載アイテム数に依存するが、適当に多めの表示件数をインデックス対象のURLにしておくと良い。例えばあるカテゴリに属するアイテムが3000件以上あるのに10件表示ページをインデックスさせるようにすると、他のページのクローリングが適切に行われなくなる場合もある。一方で、カテゴリごとに紐付くアイテム数の平均が最大でも50しかなければ、10件表示をデフォルトとしてインデックスさせるようにしても問題にはならない。従って、あなたのサイトが取り扱う情報数に応じて数値は異なるが、1つ選べば良い。

  3. 同じスカートだが【赤】【青】【黄色】【緑】【紫】の5色があり、それぞれパラメータがつく場合、デジタル一眼レフカメラのある商品について、【ボディ】【ダブルズームキット】【トリプルレンズキット】がある場合

    商品詳細ページで、他の色がある、他のセット商品があることを明示すると共にそれらの商品へのリンクを提示した上で、クロールさせるURLはいずれか1つに決めてしまうという方法がある。また、カラー指定は JavaScript で動的に処理する(URLは変わらない)という方法もある。色指定や特定バリエーションを指定する検索が少なからずある人気商品や希少商品の場合は、それ用にページを作ってしまうという別のアプローチを考えるのも一案。


動的URLではなく、静的URLにすれば済む話ではないのか?

ここまで動的URL(Dynamic URLs)で設計することを前提に話を進めているが、そもそも動的URLは静的URL(Static URLs)にしておけば済む話ではないのか?SEOにおいては、(疑似)静的URLが推奨ではないのか?という疑問をお持ちの方がいるかもしれない。

Google の意図としては、「同じ内容を表示する、異なるURLを大量に静的に出力されると検索アルゴリズムで自動的にクロールすべき/クロールすべきでないものを判断するのは困難だから、(余計なことせずに)動的に、パラメータをルールづけて吐き出すようにしてください」という話だ。つまり、SEO の観点から静的に見せかけた URL を出力するようになった、クローラブルなサイトが増えた一方で、その実装が拙いために延々と異なるURLだが内容が同一のコンテンツをクロールすることになり、結果として本来クロール/インデックスしたいコンテンツが拾えなくなるという自体が増えた状況を改善したいわけだ。

言い換えれば、ルール設計が適切に行われた上でクローラ制御が出来ていれば、疑似静的URLであっても問題はない。要は、クロールされるべきURL/コンテンツと、クローラから排除すべきURL/コンテンツを Google が明確に判断できるような最適化施策を実施すれば良い。

Faceted navigation best (and 5 of the worst) practices
http://googlewebmastercentral.blogspot.jp/2014/02/faceted-navigation-best-and-5-of-worst.html


cf.
「SEO的に優れた無限スクロールの実装方法」Googleからのアドバイス

タギング/サイト内検索結果ページは SEO に有効な手法なのか ? 歴史と背景


#
商品一覧ページにおける並び替えのSEO要件定義は、比較的大きなサイトであれば必須ですので、その手のサイトに携わっている方は今一度理解しておくと良いでしょう。サイトの規模というよりは、動的URL、パラメータの設定がどうなっているかが大きく影響してくる問題ではありますが、小規模なサイトであれば放置しておいても Google が適当にアルゴリズムで判断してくれますので…。

Web Professionalトップへ

WebProfessional 新着記事