wordpress:添加 <noscript> 标签会使 <head> 标签自动关闭
wordpress: adding a <noscript> tag makes the <head> tag autoclose
大家好。
我在 wordpress 网站上使用 "amp" 生成器,该插件的其中一项操作是在 </head>
之前添加一个 biolerplate 标签和一个带有回退的 <noscript>
标签。
Google 搜索控制台不断警告我特定错误:
"The mandatory tag 'noscript enclosure for boilerplate' is missing or incorrect."
所以我开始调查。
我发现 "something" 在 <noscript>
开始标记之前注入 </head><body>
,如果我更改放置 noscript 标记的位置,其他两个也会移动。
这是呈现的代码:
<style amp-boilerplate>body{-webkit-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-moz-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-ms-animation:-amp-start 8s steps(1,end) 0s 1 normal both;animation:-amp-start 8s steps(1,end) 0s 1 normal both}@-webkit-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-moz-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-ms-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-o-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}</style>
</head><body><noscript><style amp-boilerplate>body{-webkit-animation:none;-moz-animation:none;-ms-animation:none;animation:none}</style></noscript>
我做了很多测试,似乎 <noscript>
标签是这个错误的关键。
我还读过一些其他的答案,这些答案说文档不应该是严格的 xhtml 1.1,但事实并非如此,事实上,这些是页面上呈现的第一件事:
<!DOCTYPE html>
<html amp lang="it-IT"><head><meta charset="utf-8"><link rel="dns-prefetch" href="https://cdn.ampproject.org">
我想弄清楚我能做些什么来解决这个错误,这个错误存在于许多站点,使用不同的插件和主题(以及 wordpress 版本)。
更新:
我试图在代码中手动添加一个 <noscript>
标记,每次我将它添加到 <head>
部分时,该部分都会关闭,并且 <body>
部分会打开,没有任何class(所以这看起来像是一个错误)。
如果您想查看错误,请到此处查找代码:
https://www.assistenzamalasanita.com/2015/07/errori-medici-durante-il-parto-come-si-valutano/amp/
更新 2
禁用所有插件并切换到默认主题对此没有影响。
另外,我已经将整个网站复制到另一台服务器上,问题不存在,WP 网站是相同的,而且服务器配置应该是,BUT 在网站上这是有效的我可以看到 HTTP 请求有一个关于 php 版本 (7.0.2) 的属性,而另一个站点没有。
这是否会影响页面的呈现??
查看有效的网站:
https://www.doors.it/iride/2017/10/risarcimento-malasanita/amp
更新 3
这是插件的一部分,实际上是编写样板代码(其中有 head 和 body 错误的标签)。
add_action( 'amp_post_template_head', 'amp_post_template_add_boilerplate_css' );
function amp_post_template_add_boilerplate_css( $amp_template ) {
?>
<style amp-boilerplate>body{-webkit-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-moz-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-ms-animation:-amp-start 8s steps(1,end) 0s 1 normal both;animation:-amp-start 8s steps(1,end) 0s 1 normal both}@-webkit-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-moz-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-ms-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-o-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}</style><noscript><style amp-boilerplate>body{-webkit-animation:none;-moz-animation:none;-ms-animation:none;animation:none}</style></noscript>
<?php
}
您可能会注意到,整个块是一次插入的,背后没有任何逻辑,页面应该按原样呈现(在该代码中,我尝试将标签更改为 <nonscript>
一切都很好,head 标签没有关闭,body 标签在正确的位置打开,正确的 classes.
正如评论和第三次编辑所说,这是由挂钩函数引起的。幸运的是,这通常是一个非常简单的修复!
就像评论中提到的@sally-cj 一样,使用remove_action( 'amp_post_template_head', 'amp_post_template_add_boilerplate_css' );
完全停止此函数的触发。
如果我们不想在管理员中输入样式,您可以在主题代码中复制过滤器,而不要使用有问题的 </noscript>
标签。
add_action( 'amp_post_template_head', 'so_52185596_custom_boilerplate_css' );
function so_52185596_custom_boilerplate_css( $amp_template ) {
?>
<style amp-boilerplate>body{-webkit-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-moz-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-ms-animation:-amp-start 8s steps(1,end) 0s 1 normal both;animation:-amp-start 8s steps(1,end) 0s 1 normal both}@-webkit-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-moz-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-ms-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-o-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}</style><noscript><style amp-boilerplate>body{-webkit-animation:none;-moz-animation:none;-ms-animation:none;animation:none}</style>
<?php
}
大家好。
我在 wordpress 网站上使用 "amp" 生成器,该插件的其中一项操作是在 </head>
之前添加一个 biolerplate 标签和一个带有回退的 <noscript>
标签。
Google 搜索控制台不断警告我特定错误:
"The mandatory tag 'noscript enclosure for boilerplate' is missing or incorrect."
所以我开始调查。
我发现 "something" 在 <noscript>
开始标记之前注入 </head><body>
,如果我更改放置 noscript 标记的位置,其他两个也会移动。
这是呈现的代码:
<style amp-boilerplate>body{-webkit-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-moz-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-ms-animation:-amp-start 8s steps(1,end) 0s 1 normal both;animation:-amp-start 8s steps(1,end) 0s 1 normal both}@-webkit-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-moz-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-ms-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-o-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}</style>
</head><body><noscript><style amp-boilerplate>body{-webkit-animation:none;-moz-animation:none;-ms-animation:none;animation:none}</style></noscript>
我做了很多测试,似乎 <noscript>
标签是这个错误的关键。
我还读过一些其他的答案,这些答案说文档不应该是严格的 xhtml 1.1,但事实并非如此,事实上,这些是页面上呈现的第一件事:
<!DOCTYPE html>
<html amp lang="it-IT"><head><meta charset="utf-8"><link rel="dns-prefetch" href="https://cdn.ampproject.org">
我想弄清楚我能做些什么来解决这个错误,这个错误存在于许多站点,使用不同的插件和主题(以及 wordpress 版本)。
更新:
我试图在代码中手动添加一个 <noscript>
标记,每次我将它添加到 <head>
部分时,该部分都会关闭,并且 <body>
部分会打开,没有任何class(所以这看起来像是一个错误)。
如果您想查看错误,请到此处查找代码:
https://www.assistenzamalasanita.com/2015/07/errori-medici-durante-il-parto-come-si-valutano/amp/
更新 2 禁用所有插件并切换到默认主题对此没有影响。 另外,我已经将整个网站复制到另一台服务器上,问题不存在,WP 网站是相同的,而且服务器配置应该是,BUT 在网站上这是有效的我可以看到 HTTP 请求有一个关于 php 版本 (7.0.2) 的属性,而另一个站点没有。
这是否会影响页面的呈现?? 查看有效的网站: https://www.doors.it/iride/2017/10/risarcimento-malasanita/amp
更新 3 这是插件的一部分,实际上是编写样板代码(其中有 head 和 body 错误的标签)。
add_action( 'amp_post_template_head', 'amp_post_template_add_boilerplate_css' );
function amp_post_template_add_boilerplate_css( $amp_template ) {
?>
<style amp-boilerplate>body{-webkit-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-moz-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-ms-animation:-amp-start 8s steps(1,end) 0s 1 normal both;animation:-amp-start 8s steps(1,end) 0s 1 normal both}@-webkit-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-moz-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-ms-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-o-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}</style><noscript><style amp-boilerplate>body{-webkit-animation:none;-moz-animation:none;-ms-animation:none;animation:none}</style></noscript>
<?php
}
您可能会注意到,整个块是一次插入的,背后没有任何逻辑,页面应该按原样呈现(在该代码中,我尝试将标签更改为 <nonscript>
一切都很好,head 标签没有关闭,body 标签在正确的位置打开,正确的 classes.
正如评论和第三次编辑所说,这是由挂钩函数引起的。幸运的是,这通常是一个非常简单的修复!
就像评论中提到的@sally-cj 一样,使用remove_action( 'amp_post_template_head', 'amp_post_template_add_boilerplate_css' );
完全停止此函数的触发。
如果我们不想在管理员中输入样式,您可以在主题代码中复制过滤器,而不要使用有问题的 </noscript>
标签。
add_action( 'amp_post_template_head', 'so_52185596_custom_boilerplate_css' );
function so_52185596_custom_boilerplate_css( $amp_template ) {
?>
<style amp-boilerplate>body{-webkit-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-moz-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-ms-animation:-amp-start 8s steps(1,end) 0s 1 normal both;animation:-amp-start 8s steps(1,end) 0s 1 normal both}@-webkit-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-moz-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-ms-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-o-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}</style><noscript><style amp-boilerplate>body{-webkit-animation:none;-moz-animation:none;-ms-animation:none;animation:none}</style>
<?php
}