如何使页面头部的网站地图链接通过W3C验证器?

12

我正在尝试通过W3C验证器检测一个页面。但是由于我像这样包含了网站地图,因此验证未能通过:

<link rel="sitemap" type="application/xml" title="Sitemap" href="../sitemap.xml" />

我得到的错误是:

在元素link的属性rel中使用了错误的值sitemap:不是一个绝对IRI。字符串sitemap不是已注册的关键字或绝对URL。

我一直在努力解决它,但是我尝试的所有方法似乎都不起作用,而且这是Google和Html5 Boilerplate推荐的布局。

我的语法有什么问题吗?看起来正确,但为什么不能通过呢?


删除了我的评论,因为我想再次检查我的事实。但是它说:这不是你的错。是验证器的问题。它需要通过在此页面上列出为“建议”的有效名称:http://microformats.org/wiki/existing-rel-values#HTML5_link_type_extensions,但它已过时,并且没有像应该做的那样识别“站点地图”。 - Alohci
5个回答

19

来自未来的问候(2021年6月)。

条目:

<link rel="sitemap" type="application/xml" title="Sitemap" href="/sitemap.xml">

现在被W3 HTML5验证器接受。

也就是说:

rel="sitemap"

现在是一个有效的属性+值.

验证以下HTML文件:

<!DOCTYPE html>
<html lang="en-gb">
<head>
<meta charset="utf-8">
<title>My Rel Sitemap Test</title>
<link rel="sitemap" type="application/xml" title="Sitemap" href="/sitemap.xml">
</head>

<body>
<h1>My Rel Sitemap Test</h1>
<p>This is my Rel Sitemap Test.</p>
<p>The document passes.</p>
<p>This document is valid HTML5 + ARIA + SVG 2 + MathML 3.0</p>
</body>
</html>

这里:https://validator.w3.org/nu/

返回的响应是:

文档检查已完成。没有错误或警告需要显示。


它可能会通过验证(这就是问题所在),但rel中的任何其他内容也会通过,因此这并不能真正反映正确的HTML。 - Mike Lewis
不用担心,@MikeLewis。根据WHAT-WG的要求,在HTML5链接类型扩展中列出了rel="sitemap" - Rounin
它在那里的状态被列为“建议”,只是让你知道。虽然浏览器仍然会接受它,但据我所知,它尚未正式被接受。 - Mike Lewis
1
@MikeLewis - 是的,“提议”而不是“批准”,你说得对。但是,WHAT-WG指出:“符合性检查器必须使用微格式页面中给出的现有rel值的信息来确定一个值是否被允许:在本规范中定义或标记为“提议”或“批准”的值必须被接受”(我加粗了)。 - Rounin

12

简而言之,您不能这样做。

HTML 5定义了您可以在rel中使用的值,而sitemap不是验证器所识别的值之一。

错误消息确实说您可以在维基上注册新的链接类型,但是站点地图已经存在,因此您只需等待验证器开发人员更新验证器以反映维基百科的新状态(假设没有人删除该条目)。

(基本问题在于规范将维基页面用作标准资源是不合理的,HTML 5仍然是草案,HTML 5验证器仍被视为实验性工具。)


这能解释很多问题。我没注意到他在谈论HTML5(也不知道w3c验证器也无法处理它)。 - Bruno Vieira
1
使用维基页面作为规范资源是不可思议的,但有一个工作组的决定,并且没有正式的反对意见来阻挠它,所以我想我们只能与之相处了。 - Alohci

3
如果您只需要通过w3c验证器,也许可以检测其用户代理并修改应用程序的输出,以便它能够通过。对于像这样的小问题,我认为严格的验证更多是一种营销利益。如果其他开发人员使用w3c验证器来说您客户的网站充满错误,那就很烦人。
您可以检查HTTP_USER_AGENT是否包含“W3C_Validator”并删除非标准代码。
在CFML中,我编写了以下代码,使我的Google作者链接仍然能够在w3c验证器上进行验证:
<cfif cgi.HTTP_USER_AGENT CONTAINS "W3C_Validator">data-</cfif>rel="publisher"

我刚在谷歌论坛上发布了一个问题,询问他们是否可以开始支持data-rel,或者确认谷歌搜索是否已经支持它。他们提供的结构化数据测试工具在我测试时无法解析data-rel。 http://www.google.com/webmasters/tools/richsnippets 希望有人能跟进: https://groups.google.com/a/googleproductforums.com/d/msg/webmasters/-/g0RDfpFwmqAJ

感谢您的贡献。目前还没有找到一个好的解决方案,让我们拭目以待。 - frequent

1
“字符串sitemap不是已注册的关键字或绝对URL。”
“你的问题就在这里:”
href="../sitemap.xml" 

你正在使用相对路径 URL 指示站点地图的位置。请尝试放置类似于以下内容的东西:
<link rel="sitemap" type="application/xml" title="Sitemap" href="/myfolder/sitemap.xml" />

编辑

由于机器人首先爬行您的根目录,因此最好的方法确实是在您的根目录中使用sitemap.xml文件:

<link rel="sitemap" type="application/xml" title="Sitemap" href="/sitemap.xml" />

或者

<link rel="sitemap" type="application/xml" title="Sitemap" href="http://yoursite.com/sitemap.xml" /> <!-- No www -->

另外,
请确保您的标签是标签的子元素。

是的。顺便说一下,机器人首先搜索您网站的根目录,因此像“/sitemap.xml”这样的东西确实更好。 - Bruno Vieira
1
刚刚尝试了/sitemap.xml,仍然不起作用。我还尝试了https://www.msite.com/sitemap.xml,结果相同。你确定是href而不是rel属性吗? - frequent
XML文件只有完整的链接https://www.mysite.com/...。它已经通过了Google和Bing的检查,所以我想应该没问题。感谢使用www。我会尝试一下。 - frequent
1
你的网站运行在哪里?唯一剩下的就是SSL了,你是否已经按照这里描述的设置了验证器以接受SSL:http://cpansearch.perl.org/src/GAAS/libwww-perl-6.04/README.SSL 来源:http://validator.w3.org/docs/install.html - Bruno Vieira
好的主意。这是一个SSL网站,但我必须在星期一联系我的管理员,因为证书似乎有问题。等我尝试SSL。 - frequent
显示剩余2条评论

-2

试一试!

<link rel="alternate" type="application/xml" title="Site Map" href="http://yoursite.com/sitemap.xml" />

rel属性的alternate值也被RSS和ATOM订阅源所识别。我个人在所有XML文档中都使用它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接