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

Google 検索によりサイトが効率的にクロールされるように、以下の要件を満たすクロール可能な URL 構造を使用してください。URL が以下の基準を満たしていない場合、Google 検索によるサイトのクロール効率が低下する可能性があります(クロール頻度が極端に高くなったり、まったくクロールされなかったりなど)。

クロール可能な URL 構造の要件

IETF STD 66 に準拠する

Google 検索は、IETF STD 66 で定義された URL をサポートしています。この規定で予約文字として定義されている文字には、パーセント エンコーディングを行う必要があります。

コンテンツを変更する際に URL フラグメントを使用しない

Google 検索は通常、URL フラグメントをサポートしていないため、ページのコンテンツを変更する際にフラグメントを使用しないでください。以下に、URL フラグメントの例を示します。

https://example.com/#/potatoes

JavaScript でコンテンツを変更する場合は、代わりに History API を使用してください。

URL パラメータには一般的なエンコードを使用する

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][sort:price-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,lowtohigh,,sid,789

URL 構造をわかりやすくする

Google 検索(およびユーザー)がサイトをより正しく理解できるように、可能な限りシンプルな URL 構造を作成して、以下のベスト プラクティスを適用することをおすすめします。

ベスト プラクティス

わかりやすい URL を使用する

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

推奨(シンプルでわかりやすい単語) 非推奨(意味のない長い ID 番号)
https://example.com/wiki/Aviation
https://example.com/index.php?topic=42&area=3a5ebc944f41daa6f849f730f1

オーディエンスの言語を使用する

オーディエンスの言語にある単語(必要に応じて文字変換を取り入れながら)を URL に使用します。たとえば、オーディエンスがドイツ語で検索している場合は、URL にドイツ語の単語を使用してください。

https://example.com/lebensmittel/pfefferminz

あるいは、オーディエンスが日本語で検索している場合は、URL に日本語の単語を使用してください。

https://example.com/ペパーミント

必要に応じて UTF-8 エンコードを使用する

サイト内のページにリンクする場合は、必要に応じてリンクの href 属性に UTF-8 エンコードを使用してください。予約されていない ASCII 文字はエンコードされない形式のまま残る可能性があります。また、ASCII に含まれない文字は、UTF-8 でエンコードする必要があります。次に例を示します。

推奨(UTF-8 エンコード) 非推奨(ASCII 以外の文字)
https://example.com/%D9%86%D8%B9%D9%86%D8%A7%D8%B9/%D8%A8%D9%82%D8%A7%D9%84%D8%A9
https://example.com/نعناع
https://example.com/%E6%9D%82%E8%B4%A7/%E8%96%84%E8%8D%B7
https://example.com/杂货/薄荷
https://example.com/gem%C3%BCse
https://example.com/gemüse
https://example.com/%F0%9F%A6%99%E2%9C%A8
https://example.com/🦙✨

単語を区切るのにハイフンを使用する

可能な限り、URL 内の単語は区切ることをおすすめします。具体的には、URL 内の単語を区切るにはアンダースコア(_)ではなくハイフン(-)を使うようおすすめします。それにより、ユーザーや検索エンジンが URL のコンセプトを理解しやすくなるからです。過去の経緯から、アンダースコアの使用はおすすめしません。このスタイルはすでに、まとめて扱うべきコンセプトを示す際によく使用されているからです(たとえば、さまざまなプログラミング言語で format_date などの関数名を付ける場合など)。

推奨 非推奨

単語を区切るのにハイフン(-)を使用します。

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 を短くします。

URL は大文字と小文字が区別されることに注意する

IETF STD 66 に準拠する他の HTTP クライアントと同様に、Google 検索の URL 処理は大文字と小文字を区別します(たとえば、Google は /APPLE/apple をそれぞれ独自のコンテンツを持つ別々の URL として扱います)。ウェブサーバーで URL の大文字と小文字が同じように扱われる場合、すべてをどちらかに変換すると、URL が同じページを参照していることを Google が判別しやすくなります。

複数の地域を対象とするサイトの場合

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

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

https://example.de

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

https://example.com/de/

URL に関する一般的な問題を回避する

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

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 に不必要なパラメータがあると、次のような 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/results?search_type=search_videos&search_query=tpb&search_sort=relevance&search_category=25
  • セッション ID:
    https://example.com/search/noheaders?sessionid=6EE2BF1AF6A3D705D5561B7C3564D9C2

robots.txt file を使用して、問題のある URL への Googlebot のアクセスをブロックできます。

カレンダーの問題

動的に生成されるカレンダーは、開始日や終了日の制限を設けずに、未来や過去の日付のリンクを生成することがあります。次に例を示します。

https://example.com/calendar.php?d=13&m=8&y=2011

サイトに無限のカレンダーがある場合、動的に作成される未来のカレンダー ページへのリンクに nofollow 属性を追加します。

親ディレクトリへの相対リンクを間違ったページに配置すると、存在しないページに対してサーバーが適切な HTTP ステータス コードを返さない場合、無限のスペースが作成される可能性があります。たとえば、https://example.com/category/community/070413/html/FAQ.htm<a href="../../category/stuff">...</a> のような親ディレクトリへの相対リンクが配置されると、https://example.com/category/community/category/stuff などの偽造 URL が生成される可能性があります。修正するには、リンクに(親ディレクトリへの相対ではなく)ルート相対 URL を使用してください。

クロール関連の URL 構造の問題を修正する

Google 検索がこのような問題のある URL をクロールしていることに気づいた場合、以下の対応をおすすめします。

  • robots.txt file を使用して、問題のある URL への Googlebot のアクセスをブロックできます。一般的には、検索結果を生成する URL などの動的 URL や、カレンダーなど無限のスペースを生成する可能性のある URL、並べ替え機能やフィルタ機能へのアクセスをブロックします。
  • サイトにファセット ナビゲーションがある場合は、ファセット ナビゲーション URL のクロールを管理する方法をご覧ください。