概要
SEO ではURLに商品名を加えたものが良いとされます。 但し、英語圏ならまだしもマルチバイトな日本語では、
- 日本語のままURLへ含める
→重複の可能性、これをキーにするのは実装上問題が多そう
- URL用に英語名を入力
→重複の可能性と入力の手間とカタカナ英語以外で効果が低そう
と問題が考えられます。
SEO上の効果の程度や実装の手間を考慮すると、 「データベースの一意なIDをそのまま使用する」(オートインクリメントなIDやハッシュ値、UUID)実装が シンプルで変更に強く魅力的に思えてきます。
また、多数のパラメータを持つ商品(服ならばサイズ・色)をどこまでURLへ反映させているかが気になったので、 各社のURL構造を自分なりに調べました。
※URLの構造とその実装に興味があります。
※中の人ではないため、意図を読み違えている可能性があります。
※SEO上の効果を検証したり、また、それ自体について議論するものではありません。
クックパッド
シンプルな構成
http://cookpad.com/recipe/2221390
recipe のディレクトリの下に、シーケンシャルなIDの構成です。 レシピサイトのため、レシピへのオプションは存在しません。 また、他にキーとするならタイトルしかありませんが、レシピは投稿されるもののため、 タイトルの変更を考慮すると、IDしか使用できないと思われます。
ID がデータベースのキーになっている可能性が高く、実装や運用がシンプルに行えそうです。 IDがシーケンシャルに発行されているようなので、クックパッドの規模ですと、SPOFをどう回避しているかが気になります。
アスクル
シンプルな構成
http://www.askul.co.jp/v/4853/
http://www.askul.co.jp/p/5784852/
http://www.askul.co.jp/p/K302379/
v または p の1文字のディレクトリの直下にシーケンシャルなIDの構成です。 色・サイズ違いは別IDになります。
v と p の違いは不明です。v だけ、p だけのカテゴリもあれば、同じカテゴリ内でも混在する場合もあります。 IDは頭にアルファベットの頭文字がつくときがあります。この ID がデータベースのキーになっている可能性が高いです。
実装上の意図が分かりにくいところがありますが、考え方はシンプルです。
lighthouseapp
内部IDとタイトルを同時に表示している例
projects プロジェクトであることを示す 42648 アカウントID tickets チケットであることを示す 3891-cakeemail-cant-set-invalid-rfc-email-address 個別チケット(シーケンシャルなIDとタイトルのスラグの構成) ※正規化はされていないが、シーケンシャルなIDだけである
https://cakephp.lighthouseapp.com/projects/42648/tickets/3891
でも同じページを返すので、内部的には、3891だけを見ている可能性が高いです。
コンテンツの内容をURLに含めるが、管理上はなくても構わないという実装です。
アマゾン
内部IDとタイトルを同時に表示している例
書籍の場合
正規化されたURL
http://www.amazon.com/Quiet-Power-Introverts-World-Talking/dp/0307352153 http://www.amazon.co.jp/Quiet-power-introverts-world-talking/dp/0141029196 http://www.amazon.co.jp/内向型人間の時代-社会を変える静かな人の力-スーザン・ケイン/dp/4062178591
洋書のままではIDは同じで、翻訳の場合は異なります。 書籍の場合、商品IDはISBNになります。
上記の記述では、タイトルの内容を削ることが可能で、最小構成は以下になります。(リダイレクトされません)
http://www.amazon.co.jp/dp/4062178591
但し、サイト内では以下のようなタイトル部分が「gp」に置き換えられたURLが使用されています。(リダイレクトされません)
http://www.amazon.co.jp/gp/dp/4062178591
また、カート内からのリンクでは、「product」が含まれるURLが使用されています。(リダイレクトされません)
http://www.amazon.co.jp/gp/product/4062178591
おそらく、タイトル部分の容量を削減しているのでしょう。
ファッションの場合
サイズ・色毎に商品IDが用意されています。URLへはIDによって商品のオプションが反映されています。 但し、変わっているのは、これらの商品の正規化されるURLがサイズ・色毎の個別の商品IDでなく、全く別の商品IDになることです。
つまり、代表する商品IDがあり、これを直接注文することはできず、それらにぶら下がるサイズ・色が具体的に決まった商品IDで注文するという構成になっています。 おそらく、サイズ・色毎にURLを用意したいが、サイズ・色は生産計画や在庫の都合でなくなる可能性があるため、代表する商品IDを別途用意していると思われます。
カート内からの商品個別のURL(サイズ違いはなく、色違いが2種類のみ)
http://www.amazon.co.jp/dp/B00E97LP7W
http://www.amazon.co.jp/dp/B00E97LOO6
上記から正規化されたURL
http://www.amazon.co.jp/dp/B00E97LNLU
書籍以外の商品IDはB[0-9A-Z]{9}で構成され、1桁目から採番されているようです。 36の9乗≒10の14乗で約100兆のアイテムが登録可能になっています。
流石アマゾン、必要な要件をすべて取り揃えています。
楽天ブックス
内部IDとタイトルを同時に表示している例 正規化されたURL
http://books.rakuten.co.jp/rb/内向型人間の時代-社会を変える静かな人の力-スーザン・ケイン-9784062178594/item/12279831/
アマゾンより複雑な構成で、 rb は商品単位のディレクトリであることを示していますが、item の扱いが不明です。 また、タイトル後の 9784062178594 が何を示しているのかも不明です。 タイトル部分は削ることができ、アマゾン同様に以下まで削ることが可能です。
http://books.rakuten.co.jp/rb/item/12279831/
但し、削られたURLは正規化されたURLへリダイレクトされます。
サイト内では、
http://books.rakuten.co.jp/rb/12279831/
が使用されていますが、このURLも正規化されたURLへリダイレクトされます。
商品IDは、整数値がインクリメントされるもののようです。ちなみに、現在の最小idは以下の商品でした。
http://books.rakuten.co.jp/rb/ア-スアンカ-による圧入工法の設計と施工-角田安一-9784274099434/item/12/
zappos
タイトルだけを表示している例
正規化されたURL
http://www.zappos.com/oakley-full-auto-tour
http://www.zappos.com/oakley-full-auto-tour-black
ディレクトリなしで、商品名をスラグ(+属性[色])にした構成です。 商品名が色なしが正規化されたURLで、 デフォルトの色のURLや色違いのURLは色なしに正規化されます。 但し、サイズはURLに含まれず、HTMLから判断するに、個別の商品idを持っているようです。
後発ほど、商品名の重複を気にしなければならないので、運用はどうやっているのかが気になります。 また、 URLが任意に指定できる以上、変更があった場合、URLの永続化をどのようにしているかも気になりましたが、 外部からうかがい知ることはできませんでした。
Qiita
ハッシュで構成されているURL
http://qiita.com/dz_/items/55ae18f7fe3a873bace1
- dz_ はユーザー名
- items は固定
- 55ae18f7fe3a873bace1 TIPSを特定するID
DELL
商品の最小URL v323010dc2ojp でカスタマイズ前の商品構成を識別している模様
http://configure.apj.dell.com/dellstore/config.aspx?oc=v323010dc2ojp
カートから商品を編集する際に発行されるURL
UUIDの e66da8b6-2362-451c-89ff-a102f6eacea2 がカスタマイズされた内容を保持しているキーになるようです。 カートから削除したり、別のセッションでは利用できないことを考慮すると、セッションと一緒に管理されており、 カスタマイズ後のURLは提供されていないようです。
ゾゾタウン
オートインクリメントな商品IDを持つシンプルなURLです。 商品IDは、サイズ・色を統括する「商品」に振られ、サイズ・色毎の個別のURLは生成されないようです。
グラフィック
商品の選択が進んだ後のURL
http://www.graphic.jp/price/12_2_1/250_2
「12_2_1」について
- 12 はA4チラシのID
- 2 は用紙コート63kgのID
- 1 は5日納期のID
「250_2」について
- 250 は部数の数
- 2 は両面モノクロのID
と、ディレクトリ構造にはあまり意味がなく、実装側の都合のURLのようです。 オプションについては、URLに反映されませんでした。
納期・カラー数・部数を選ぶ画面
http://www.graphic.jp/price/12_2_3/
上記の価格一覧表では、行列の項目と生成されるURLに規則性があることから、すべて自動生成されているようです。 また、こんなにURLを生成していると、どうインデックスされているのかと思ったら、 「A4チラシ」と最初に仕様を選んだページまでがインデックスされるようになっており、 その後の用紙の種類以降は、「noindex,follow」とリンクは辿るけど、インデックスはしないという指定がされていました。
まとめ
各社とも考えられたURLの構造をしており、勉強になる部分が多かったです。
特に、 アマゾン、lighthouseapp、楽天のような、管理IDとコンテンツ内容をURLに含めつつ、 その実際は、管理IDだけでアクセス可能な仕組みは、SEO上のURLと実装・運用の妥協点となっているようでした。