Piwik 跟踪代码中断 HTML 验证

Piwik tracking code breaks HTML Validation

我正在使用 Piwik 来跟踪我博客的访问者。这是 Piwik 跟踪代码:

<!-- Piwik -->
<script type="text/javascript">
  var _paq = _paq || [];
  _paq.push(["setDomains", ["*.example.com"]]);
  _paq.push(['trackPageView']);
  _paq.push(['enableLinkTracking']);
  (function() {
    var u="//example.com/pwt/";
    _paq.push(['setTrackerUrl', u+'piwik.php']);
    _paq.push(['setSiteId', '1']);
    var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
    g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s);
  })();
</script>
<noscript><p><img src="//example.com/pwt/piwik.php?idsite=1" style="border:0;" alt="" /></p></noscript>
<!-- End Piwik Code -->

他们建议将该代码粘贴到结束 </head> 标记之前。

所以我添加了代码并且它工作正常,但我只是注意到它破坏了我的 HTML 验证。基本上,它不喜欢页眉中的 <p><img> 标记。我应该将整个 <noscript> 部分移动到页面主体吗?这会破坏我对禁用 Javascript 的人的跟踪吗?如果禁用 javascript 的浏览器甚至看不到 <noscript> 部分,为什么 HTML 验证器会抱怨。

谢谢!

页眉中不允许使用 <p><img> 标记,您说得对。 HTML 验证器当然应该抱怨。它不知道您的访问者是否会启用脚本。

我会将整个 <noscript> 部分移到结束 </body> 标记之前。该部分的工作方式是,如果有人禁用了 JavaScript,它会加载一个小的不可见图像。 Piwik 将这张正在加载的图片记录为一次访问(注意图片来源是 Piwik PHP 脚本)。

https://developer.piwik.org/guides/tracking-javascript-guide

copy and paste the Javascript tracking code into your pages, just after the opening <body> tag (or within the <head> section)

如果你想把它放在 <head> 里,把 <script> 块放在那里,<noscript> 块放在 <body> 的顶部。不过,没有必要这样做——正如官方文档所说,将整个代码块放在 <body> 的顶部就可以了。

Why does an HTML Validator complain if the section won't even been seen by browsers with javascript disabled.

因为禁用 JS 的浏览器仍然是期望有效的浏览器 HTML。