Google における URL 構造のベスト プラクティス

Google は RFC 3986 で定義された URL をサポートしています。この規定で予約文字として定義されている文字には、パーセント エンコーディングを行う必要があります。予約されていない ASCII 文字はエンコードされない形式のまま残る可能性があります。また、ASCII に含まれない文字は、UTF-8 でエンコードする必要があります。

可能な場合は、長い ID ではなく意味のある単語を URL に使用します。

推奨: シンプルでわかりやすい語句を URL に使用する。

https://en.wikipedia.org/wiki/Aviation

推奨: ローカライズした語句を URL に使用する(該当する場合)。

https://example.com/lebensmittel/pfefferminz

推奨: 必要に応じて UTF-8 エンコードを使用する。たとえば、次の例では、URL 内のアラビア文字に UTF-8 エンコードを使用しています。

https://example.com/%D9%86%D8%B9%D9%86%D8%A7%D8%B9/%D8%A8%D9%82%D8%A7%D9%84%D8%A9

次の例では、URL 内の中国語文字に UTF-8 エンコードを使用しています。

https://example.com/%E6%9D%82%E8%B4%A7/%E8%96%84%E8%8D%B7

次の例では、URL 内のウムラウトに UTF-8 エンコードを使用しています。

https://example.com/gem%C3%BCse

次の例では、URL 内の絵文字に UTF-8 エンコードを使用しています。

https://example.com/%F0%9F%A6%99%E2%9C%A8

非推奨: ASCII 文字以外を URL に使用する。

https://example.com/نعناع
https://example.com/杂货/薄荷
https://example.com/gemüse
https://example.com/🦙✨

非推奨: 意味のない長い ID 番号を URL に使用する。

https://example.com/index.php?id_sezione=360&sid=3a5ebc944f41daa6f849f730f1

Google は通常 URL フラグメントをサポートしていないため、ページのコンテンツを変えるためにフラグメントを使用しないでください。JavaScript を使用してコンテンツを変える場合は、代わりに History API を使用してください。

非推奨: URL フラグメントを使用する。

https://example.com/#/potatoes

複数の地域を対象とするサイトでは、サイトの地域ターゲティングが簡単になるような URL 構造の使用を検討してください。URL 構造に関する他の例については、地域ごとの URL を使用するをご覧ください。

推奨: 国別のドメインを使用する。

https://example.de

推奨: gTLD とともに国別のサブディレクトリを使用する。

https://example.com/de/

URL では、ハイフンを使用して単語を区切ることを検討してください。それにより、ユーザーや検索エンジンが URL のコンセプトを理解しやすくなります。URL にはアンダースコア(_)ではなくハイフン(-)を使用することをおすすめします。

推奨: ハイフン(-)を使用する。

https://example.com/summer-clothing/filter?color-profile=dark-grey

非推奨: アンダースコア(_)を使用する。

https://example.com/summer_clothing/filter?color_profile=dark_grey

非推奨: URL 内の単語をつなげる。

https://example.com/greendress

URL パラメータを指定するときは、次のような一般的なエンコードを使用します。Key-Value ペアを区切るには等号(=)を使用し、パラメータを追加するにはアンパサンド(&)を使用します。1 つの Key-Value ペア内で同じキーに複数の値を指定する場合は、カンマ(,)など、IETF STD 66 に抵触しない任意の文字を使えます。

推奨: Key-Value ペアを区切るには等号(=)を使用し、別のパラメータを追加するにはアンパサンド(&)を使用する。

https://example.com/category?category=dresses&sort=low-to-high&sid=789

推奨: 同じキーに複数の値を指定する場合はカンマ(,)を使用する。Key-Value ペアを区切るには等号(=)を使用し、パラメータを追加するにはアンパサンド(&)を使用する。

https://example.com/category?category=dresses&color=purple,pink,salmon&sort=low-to-high&sid=789

非推奨: Key-Value ペアを区切るのにコロン(:)を使用し、パラメータを追加するのにかっこ([ ])を使用する。

https://example.com/category?[category:dresses][sort:price-low-to-high][sid:789]

非推奨: Key-Value ペアを区切るのにカンマ 1 つ(,)を使用し、パラメータを追加するのに二重カンマ(,,)を使用する。

https://example.com/category?category,dresses,,sort,lowtohigh,,sid,789

URL に関するよくある問題

過度に複雑な URL(特に、複数のパラメータを含む URL など)は、サイト上の同じまたは同様のコンテンツを表す多数の URL が不必要に作成される原因となることがあります。その結果、クロールの際に問題が発生し、Googlebot が必要以上に帯域幅を消費したり、サイトのすべてのコンテンツがインデックスに登録されない状態を招いたりする可能性があります。

URL が不必要に多い場合、次のような原因が考えられます。

  • アイテムセットに対する複合条件でのフィルタリング。同じアイテムセットや検索結果をさまざまなビューで表示できる多くのサイトでは、定義済みの条件(たとえば「ビーチに面したホテルのリストを表示する」)を使用してアイテムセットをフィルタリングできるようにしています。複数のフィルタを足し算のように組み合わせることが可能な場合(たとえば「フィットネス センターがあり、かつ、ビーチに面したホテルのリストを表示する」など)、サイトの URL(データビュー)の数は急増します。Googlebot がすべてのホテルのページにアクセスするために必要なホテルリストがあれば十分で、内容に大差ないホテルのリストをたくさん作っても無駄になるだけです。次に例を示します。
    • 「割り引き価格」のホテル:
      https://example.com/hotel-search-results.jsp?Ne=292&N=461
    • 「割り引き価格」で「ビーチに面した」ホテル:
      https://example.com/hotel-search-results.jsp?Ne=292&N=461+4294967240
    • 「割り引き価格」で「フィットネス センターがある」、「ビーチに面した」ホテル:
      https://example.com/hotel-search-results.jsp?Ne=292&N=461+4294967240+4294967270
  • ドキュメントの動的な生成。カウンター、タイムスタンプ、広告などによって小さな変更が生じます。
  • 問題を起こしやすい URL パラメータ。たとえば、セッション ID は膨大な数の重複と URL を生成する可能性があります。
  • 並べ替えパラメータ。大規模なショッピング サイトなど、同じアイテムを複数の方法で並べ替えできるようにしているサイトでは、URL が多数生成されます。たとえば次のような URL です。
    https://example.com/results?search_type=search_videos&search_query=tpb&search_sort=relevance&search_category=25
  • 参照パラメータなど、URL に含まれる不必要なパラメータ。次に例を示します。
    https://example.com/search/noheaders?click=6EE2BF1AF6A3D705D5561B7C3564D9C2&clickPage=OPD+Product+Page&cat=79
    https://example.com/discuss/showthread.php?referrerid=249406&threadid=535913
    https://example.com/products/products.asp?N=200063&Ne=500955&ref=foo%2Cbar&Cn=Accessories.
  • カレンダーの問題。動的に生成されるカレンダーは、開始日や終了日の制限なく、未来または過去の日付のリンクを生成することがあります。次に例を示します。
    https://example.com/calendar.php?d=13&m=8&y=2011
  • 破損した相対リンク。相対リンクが壊れていると、無限のスペースが生じることがあります。多くの場合、パスの要素の繰り返しによって生じます。次に例を示します。
    https://example.com/index.shtml/discuss/category/school/061121/html/interview/category/health/070223/html/category/business/070302/html/category/community/070413/html/FAQ.htm

URL に関する問題の解決

URL 構造による問題を回避する方法は次のとおりです。

  • シンプルな URL 構造を作成する。論理的かつ人間が理解できる方法で URL を構成できるよう、コンテンツを分類します。
  • robots.txt ファイルを使用して、問題のある URL への Googlebot のアクセスをブロックできます。一般的には、検索結果を生成する URL などの動的 URL や、カレンダーなど無限のスペースを生成する可能性のある URL へのアクセスをブロックします。robots.txt ファイルで正規表現を使用すると、多くの URL を簡単にブロックできます。
  • 可能な限り、URL でセッション ID は使用せず、代わりに Cookie を使用します。
  • ウェブサーバーで URL の大文字と小文字が同じように扱われる場合、すべてをどちらかに変換すると、URL が同じページを参照していることを Google が判別しやすくなります。
  • 可能な限り、不必要なパラメータを削除して URL を短くします。
  • サイトに期間制限のないカレンダーがある場合、動的に作成される未来のカレンダー ページへのリンクに nofollow 属性を追加します。
  • サイトに壊れた相対リンクがないかどうか確認します。