これをできる限り簡潔にしようとします。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-me
はhttp://example.com/someone
になります)。
注意すべき点が1つあります。Webアプリで500サーバーエラーが発生するたびに、エラーのコピーが電子メールで送信されます。この電子メールには、訪問者(この場合はクローラー)が試行したURLが含まれています。 sitemap.xmlを切り替えて一重引用符をエンコードした後、これらのエラーレポートを受け取っていません。今のところ、それは単にGoogle Webmasterからの不満です。
ページ内のHTMLコーディングは、URLの一部として使用できません。
URLを破壊する可能性のある記号には、特殊文字コーディングを使用する必要があります。
エンコードでは、文字をパーセント記号で開始し、次に16進コードを使用します。これは、使用しようとしている実際の文字のASCIIコードを意味すると思います。
このページに移動し、フォームを使用して問題のURLを入力し、エンコード方法を確認します。
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でエンコードされており、これらの文字は実際にアポストロフィとコンマであり、中括弧や「類似した」ものではありませんか?!