web-dev-qa-db-ja.com

Sitemap.xmlは、単一引用符とコンマを含むURLの404を生成します

これをできる限り簡潔にしようとします。URL内の単一引用符とコンマに関しては、エンコードする場合は気にせず、エンコードしない場合は気にします。

Sitemap.xml locエントリに単一引用符をエンコードしないでおくと、一部のクローラー(特にBing)は、単一引用符の直前までURLを切り捨てます。

このガイド に従って'として一重引用符をエンコードすると、一部のクローラーはアンパサンドまでURLを切り捨てます。 Bingは、テクニカルサポートに連絡するまでこれを行っていました。

しかし、ガイドによると、sitemap.xmlが「適切」であるため、Google Webmasterは404のがらくたを表示します。そのほとんどは、GoogleクローラーがXMLエンコード形式のURLを使用していることを示します(例:http://example.com/someone'-lucky-day)デコードされた形式(http://example.com/someone's-lucky-day)の代わりに。他の404'd URLにはコンマが含まれます(例、http://example.com/someone,-really-hates-mehttp://example.com/someoneになります)。

注意すべき点が1つあります。Webアプリで500サーバーエラーが発生するたびに、エラーのコピーが電子メールで送信されます。この電子メールには、訪問者(この場合はクローラー)が試行したURLが含まれています。 sitemap.xmlを切り替えて一重引用符をエンコードした後、これらのエラーレポートを受け取っていません。今のところ、それは単にGoogle Webmasterからの不満です。

2
JakeTheSnake

ページ内のHTMLコーディングは、URLの一部として使用できません。

URLを破壊する可能性のある記号には、特殊文字コーディングを使用する必要があります。

エンコードでは、文字をパーセント記号で開始し、次に16進コードを使用します。これは、使用しようとしている実際の文字のASCIIコードを意味すると思います。

このページに移動し、フォームを使用して問題のURLを入力し、エンコード方法を確認します。

http://www.w3schools.com/tags/ref_urlencode.asp

1
Mike

FWIW ...それに直面して、Googleは私の意見では間違っているように思えます。むしろ、 標準(RFC 3986) の実装は厳しすぎます。 (システムはこの点で異なりますが。)

URLは常に適切にURLエンコードされる必要があります/ - パーセントエンコード (@mikeステートとして)特別な意味を持つ文字をエンコードし、XMLドキュメントで使用される場合はXMLエンティティエンコード(またはHTMLドキュメントで使用されます)。

一重引用符とコンマはURLで「 予約文字 」と見なされますが、 RLのパス部分 には特別な意味はなく、そのまま使用できます。パーセントエンコードされています。したがって、http://example.com/someone's-lucky-dayなどのURLはそのままで完全に有効です-'はここでエンコードする必要はありません XML sitempでエンコードされたXML)。明確にするために、これらの文字をパーセントエンコードしても害はありません。実際には、必要に応じてすべてをパーセントエンコードできます

参照: StackOverflow quesion-URLのディレクトリ部分の有効な文字

また、Googleの実装と競合するのは、JavaScriptメソッドencodeURI()(URLのパス部分をエンコードするため)ではなく、単一のパーセントエンコード引用符とコンマ文字。ただし、対応するPHP関数rawurlencode()は対応しています。これらの関数の出力を調べると、JavaScriptは標準に厳密に従っているようです。 PHPはサポートしていません。

しかし、別の考え...エンコードの問題はありますか? XMLドキュメントはUTF-8でエンコードされており、これらの文字は実際にアポストロフィとコンマであり、中括弧や「類似した」ものではありませんか?!

1
MrWhite