この時点で、当社のウェブサイトは「en」などのURLの言語を使用し、URL自体をローカライズします(英語の「books」とオランダ語の「boeken」)。私たちのウェブサイトを多言語化する歴史があるため、URLに「en」などの言語が含まれていない場合、ローカライズにブラウザー言語を使用するシステムがあります。
これの意味は:
サイトマップの場合、どのhreflangがどのURLに使用されているのか、これは少し面倒です。
1)私が最初に考えたのは、ブラウザの言語を取得するすべてのURLにx-defaultを使用することでした。
<url>
<loc>http://www.test.com/books</loc>
<xhtml:link rel="alternate" hreflang="x-default" href="http://www.test.com/books" />
<xhtml:link rel="alternate" hreflang="x-default" href="http://www.test.com/boeken" />
<xhtml:link rel="alternate" hreflang="en" href="http://www.test.com/en/books" />
<xhtml:link rel="alternate" hreflang="nl" href="http://www.test.com/nl/boeken" />
</url>
しかし、ご覧のとおり、x-defaultの2倍になりました。
2)私が考えた別の解決策は、URLのローカライズを使用して、次のような言語を決定することだけでした:
<url>
<loc>http://www.test.com/books</loc>
<xhtml:link rel="alternate" hreflang="en" href="http://www.test.com/books" />
<xhtml:link rel="alternate" hreflang="nl" href="http://www.test.com/boeken" />
<xhtml:link rel="alternate" hreflang="en" href="http://www.test.com/en/books" />
<xhtml:link rel="alternate" hreflang="nl" href="http://www.test.com/nl/boeken" />
</url>
しかし、今では、同じページに対して各言語の2つを取得しました。
3)私が考えた最後の解決策は、URLに言語のないリンクを削除することでした(ホームページには例外がありますが、x-defaultがまだあります):
<url>
<loc>http://www.test.com/en/books</loc>
<xhtml:link rel="alternate" hreflang="en" href="http://www.test.com/en/books" />
<xhtml:link rel="alternate" hreflang="nl" href="http://www.test.com/nl/boeken" />
</url>
しかし、このソリューションでは、「削除」されたページに301を配置し、システムを301に変更して正しいページにする必要があります。最後のポイントは実際には問題ではありませんが、301で「ソポイント」の一部が失われるのではないかと心配しています(過去にドメインを変更したとき、301で悪い経験がありました古いドメイン)
SEOの最善の解決策は何だと思いますか?または、私が考えていない他の提案や解決策がありますか。
あなたがしたいことは、システムの動作方法を変えることだと思います。 URLに言語が指定されていないが、ブラウザ設定で言語を検出した場合、サイトはredirectユーザーがパスにその言語を含むURLに移動する必要があります。これには2つの理由があります。
1)コンテンツの複製。スパイダー/ボットはtest.com/books、test.com/booken、test.com/en/books URLにアクセスし、SpiderのAccept-Language
ヘッダーが英語の場合、3つのURLすべてで同じコンテンツを表示します。たとえば、Googlebotが来て、test.com/books、test.com/booken、およびtest.com/nl/bookenをオランダ語のAccept-Language
ヘッダーでクロールすると、Googleは3つのURLすべてでまったく同じコンテンツを表示します。 hreflang x-defaultは役に立ちません。なぜなら、あなたの場合、「デフォルト」は実際にはデフォルトの言語ではなく、表示する言語を検出するからです。
2)どのURLがどの言語に適用されるかわからないという問題を解決し、サイトの言語階層をボット(および人間)にはるかに理解しやすくします。したがって、リダイレクトなしで、ユーザーが実際に必要なページに到達する可能性がはるかに高くなります。
これには2つの方法があります。クライアントの1つで行う方法は、英語版(およびデフォルト)としてtest.com/booksがありますが、ユーザーが英語以外のAccept-Language
でそのURLにアクセスすると、サポートしているものは、test.com/nl/bookenに302リダイレクトします。英語の場合、test.com/booksに残します(基本的にはURLに英語を指定しません。これは私の選択ではありませんでしたが、単に「正しい」ことをしたくない上司です。彼自身の理由)。
または、あなたの場合、英語の話者をtest.com/en/booksにリダイレクトして、SpidersにどのURLがどの言語であるかをさらに明確にし、非言語URLを言語を実行する唯一のURLのままにすることもできます検出。このように、Googleは英語の話者がtest.com/en/booksに行き、オランダ語の話者がtest.com/nl/bookenに行き、検索者がどちらの言語でも作業していない場合、test.com/booksに行くことを知っています(「デフォルト」URLは1つだけにしてください)、Googleではウェブサイトの言語を整理できます。
次に、古いオランダのURLをクリーンアップし、それらからのリンクジュースを保持するには、おそらくtest.com/bookenをtest.com/nl/bookenに301リダイレクトする必要があります。
302は「found」の略であるため、リダイレクトは302ではなく301にする必要がありますが、301は永続的なリダイレクトを行い、アドレスバーに正しいURLを表示して、正しい言語でページをブックマークできるようにします。
また、acceptヘッダーでは、言語のリストから最も優先度の高い言語を選択する必要があります。
このRFC 2616-セクション14-ヘッダーフィールド定義を参照してください
http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
次のように述べています。
Accept-Language request-headerフィールドはAcceptに似ていますが、リクエストへの応答として優先される自然言語のセットを制限します。言語タグはセクション3.10で定義されています。
...
各言語範囲には、その範囲で指定された言語に対するユーザーの好みの推定値を表す関連する品質値が与えられる場合があります。品質値のデフォルトは「q = 1」です。例えば、
Accept-Language: da, en-gb;q=0.8, en;q=0.7
「デンマーク語が好きですが、イギリス英語と他の種類の英語を受け入れます。」
したがって、最善の策は、入力からaccept-languageヘッダーの値を取得するサーバー側コードを記述し、入力から優先名を取り除き、そのコードに基づいて適切なページに301リダイレクトを発行することです。