我正在为搜索引擎抓取工具制作网站地图,我遇到了一个问题。
Google通过为其他语言添加备用XHTML标记来允许多语言站点地图,如下所示:
<xhtml:link rel="alternate" hreflang="es" href="http://example.org/" />
为此,我必须在我的urlset中添加一个xhtml命名空间。但是,当我这样做时,我的XML不再作为XML提供,而是作为XHTML提供。查看源代码时看起来很好,但浏览器仍然无法将其识别为XML文档。
示例PHP代码:
$xml = <<<'XML'
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url>
<loc>http://example.com</loc>
<xhtml:link rel="alternate" hreflang="en_US" href="http://example.net" />
<xhtml:link rel="alternate" hreflang="es" href="http://example.org/" />
<xhtml:link rel="alternate" hreflang="zh_CN" href="http://example.edu/" />
</url>
</urlset>
XML;
header('Content-Type: text/xml');
echo $xml;
如果我略微更改xhtml命名空间的URL(比如添加斜杠),浏览器将再次将该文件识别为XML,但Google将不再接受它。将标题Content-Type更改为application / xml也不起作用。
此问题发生在Internet Explorer,Firefox和Chrome等。
答案 0 :(得分:0)
首先,您应该了解xhtml IS xml:它只是应用于XML文档的特定XML模式。
您使用的浏览器识别您使用的属性的问题,并决定最好将其显示为呈现的页面而不是通用的XML布局。像你一样添加斜杠确实打破了属性,因此浏览器决定它看到一些通用XML而不是xhtml页面。 Google当然会验证入站xml,并且对于格式错误感到不满。
您尝试更改内容类型似乎是合理的(您应该保留它),但浏览器依赖多个地方告诉他们如何显示文档。内容类型的优先级可能太低而且被覆盖。
我相信如果你在你的xml中使用&lt;!DOCTYPE定义声明它是xml文档而不是html,那么浏览器可能会被说服以不同方式显示它。 Google会忽略&lt;!DOCTYPE声明作为评论。
如果&lt;!DOCTYPE未在您的文档中声明,那么浏览器可以自由选择文档类型,因为它看起来合适并且您观察到了什么。