AMP

AMP 验证错误

有效的 AMP 文档不得包含任何验证错误。本文件的目的是帮助您更好地理解和修复在验证 AMP 页面时遇到的任何验证错误。有关验证错误的完整概述,请参阅AMP 验证器规范

AMP HTML 标签和属性错误

缺少必填标签

代码 MANDATORY_TAG_MISSING
格式 “必需的标签 '%1' 缺失或不正确。”
修复 添加(或更正)必需的 HTML 标签。

这些必需的标签在AMP 验证器规范中包含一个 mandatory: true 字段;它们也在AMP 规范中被引用。

缺少其他标签所需的标签

代码 TAG_REQUIRED_BY_MISSING
格式 “标签 '%1' 缺失或不正确,但 '%2' 需要它。”
修复 添加(或更正)必需的 HTML 标签。

当验证器在 AMP 文档中找到一个扩展组件,但找不到其等效的 <script> 时,它会抛出 TAG_REQUIRED_BY_MISSING 错误。

扩展组件必须作为自定义元素明确包含在 AMP 文档中。要修复这些错误,请导航到扩展组件的参考页面,复制其必需的脚本,并将其粘贴到 AMP 文档 <head> 中。

不允许的标签

代码 DISALLOWED_TAG
格式 “标签 '%1' 不允许。”
修复 移除不允许的标签。

标签是允许的,因此没有所有不允许的标签的明确列表;但是,AMP 规范广泛定义了不允许的标签集。

不允许自定义 JavaScript

代码 DISALLOWED_SCRIPT_TAG
格式 “不允许自定义 JavaScript。”
修复 移除 javascript 标签或使用 amp-script。

AMP 格式不允许通过 <script> 元素将自定义 JavaScript 添加到页面中。JavaScript 的许多常见用法都有 AMP HTML 库等效的实现。请参阅AMP 组件,了解可用于增强 AMP HTML 页面的组件集。

如果没有任何可用的组件涵盖您的用例,则可以使用amp-script来运行您的自定义 JavaScript。

缺少必填属性

代码 MANDATORY_ATTR_MISSING
格式 “标签 '%2' 中缺少必需的属性 '%1'。”
修复 为标签添加强制属性。

AMP 标签的强制属性在 AMP 验证器规范 中定义。只需搜索标签,查看列出的属性,然后检查 mandatory: true。每个 AMP 标签的强制属性也会在标签规范中列出。

无效的属性值

代码 INVALID_ATTR_VALUE
格式 “标签 '%2' 中的属性 '%1' 设置为无效值 '%3'。”
修复 将属性值修复为有效值。

此错误表示 HTML 标签具有名称允许但值不允许的属性。例如,此错误的一个常见触发因素是 URL 的无效值。所有 URL 值(在 hrefsrc 属性中)都必须匹配其中一个 可能的属性值

重要提示:AMP 中的许多 URL 值需要 HTTPS。如果您收到此错误,并且不确定原因,请查看相关的 AMP 标签规范,以了解该属性是否需要 HTTPS。

不允许的属性

代码 DISALLOWED_ATTR
格式 “属性 '%1' 可能不会出现在标签 '%2' 中。”
修复 从 HTML 标签中删除该属性。

属性已列入允许列表,因此没有所有不允许属性的明确列表。要检查每个特定标签支持的属性,请在 AMP 验证器规范 中搜索 HTML 标签,然后搜索 attrs

除了每个标签的特定属性允许列表之外,所有 AMP 标签都可以使用在 $GLOBAL_ATTRS 下列入允许列表的任何属性;所有前缀为 "data-" 的属性也列入允许列表。

缺少或不正确的必填文本

代码 MANDATORY_CDATA_MISSING_OR_INCORRECT
格式 “标签 '%1' 中的强制文本 (CDATA) 缺失或不正确。”
修复 添加或更正标签内的强制文本。

CDATA 是开始和结束 HTML 标签之间的内容数据,目前使用允许列表和拒绝列表进行评估。具有强制 CDATA 的标签包括

<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>

<style amp-custom>

对此的详细消息可能是以下之一

  • “强制样式样板(已启用 js)”
  • “强制样式样板(noscript)”
  • “不允许 -amp- CSS 类名前缀”
  • “CSS 中不允许 !important 属性”
  • “CSS 中不允许 @charset”
  • “CSS 中不允许 @import”
  • “CSS 中不允许 @namespace”
  • “CSS 中不允许 @supports”
  • “CSS 中不允许 @document”
  • “CSS 中不允许 @page”

    标签内不允许的文本

    代码 CDATA_VIOLATES_DENYLIST
    格式 “标签 '%1' 中的文本 (CDATA) 匹配 '%2',这是不允许的。”
    修复 删除不允许的文本。

    特定 CSS 数据已列入禁止列表,以验证必要的 CSS AMP 规则。

    以下是禁止列表中的 CSS 数据(另请参阅 disallowed_cdata_regex AMP 验证器规范

    • "\\.i?-amp-"(“CSS -amp- 类名前缀”)
    • "!important"
    • "charset"
    • "&#64;import"
    • "@namespace"
    • "@document"
    • "@page"

      无效的属性值

      代码 INVALID_PROPERTY_VALUE_IN_ATTR_VALUE
      格式 “标记 '%3' 中属性 '%2' 中的属性 '%1' 设置为 '%4',该值无效。”
      修复 更正无效的属性值。

      当属性内的属性值无效时,会发生此错误。在此上下文中,属性一词表示属性内的结构化键/值数据。

      缺少 URL

      代码 MISSING_URL
      格式 “标记 '%2' 中属性 '%1' 的 URL 缺失。”
      修复 添加有效的 URL。

      当需要 URL 的属性缺失 URL(例如,空的 hrefsrc 属性)时,会发生此错误。

      无效的 URL

      代码 INVALID_URL_PROTOCOL
      格式 “标记 '%2' 中属性 '%1' 的 URL '%3' 格式错误。”
      修复 修复损坏的 URL。

      当属性具有 URL 但 URL 无效时,会发生此错误。

      无效的 URL 协议

      代码 INVALID_URL_PROTOCOL
      格式 标记 '%2' 中属性 '%1' 的 URL 协议 '%3:' 无效。
      修复 更改为有效的协议,例如,`http` 可能需要更改为 `https`。

      对于必须设置为特定协议的 hrefsrc 的标记,会发生此错误。例如,许多标记需要 https

      互斥属性

      代码 MUTUALLY_EXCLUSIVE_ATTRS
      格式 “在标记 '%1' 中遇到互斥属性 - 请从 %2 中选择一个。”
      修复 移除一个互斥属性。

      当标记同时具有两个互斥属性时,会发生此错误。例如,以下标记只允许一个

      缺少列表中的必填属性

      代码 MANDATORY_ONEOF_ATTR_MISSING
      格式 “标记 '%1' 缺少一个必需的属性 - 请从 %2 中选择一个。”
      修复 从提供的属性选项中添加缺少的必需属性。

      当标记缺少多个选项中一个必需的属性时,会发生此错误。例如,这些标记需要两个可能选项中的一个属性

      错误的父标签

      代码 WRONG_PARENT_TAG
      格式 “标记 '%1' 的父标记是 '%2',但它只能是 '%3'。”
      修复 使标记成为必需父标记的直接子标记。

      特定标记需要一个直接父标记(而不是远祖)。以下是特定标记(标记、父标记)所需的父标记

      • !doctype 需要父级标签 root
      • html 需要父级标签 !doctype
      • head 需要父级标签 html
      • body 需要父级标签 html
      • link 需要父级标签 head
      • meta 需要父级标签 head
      • style amp-custom 需要父级标签 head
      • style 需要父级标签 boilerplate (noscript)
      • noscript 需要父级标签 head
      • script 需要父级标签 head
      • source 需要一个媒体标签(amp-audioamp-video 等)。

      不允许的标签祖先

      代码 DISALLOWED_TAG_ANCESTOR
      格式 “标签 '%1' 不能作为标签 '%2' 的后代出现。”
      修复 移除(或移动)不允许的嵌套标签。

      当一个标签是另一个未验证标签的后代时,会发生此错误。目前,唯一的示例是 template 标签,它不能嵌套在另一个 template 标签下。

      必填的标签祖先

      代码 MANDATORY_TAG_ANCESTOR
      格式 “标签 '%1' 只能作为标签 '%2' 的后代出现。”
      修复 移除该标签或使其成为特定标签的后代。

      AMP 验证器规范 中,强制后代被定义为 mandatory_ancestor

      当以下标签缺少其 mandatory_ancestor(标签、祖先)时,会发生错误

      • img 必须是 noscript 的后代。
      • video 必须是 noscript 的后代。
      • audio 必须是 noscript 的后代。
      • noscript 必须是 body 的后代。

      重复的唯一标签

      代码 DUPLICATE_UNIQUE_TAG
      格式 “标签 '%1' 在文档中出现多次。”
      修复 从 AMP 文档中移除其中一个重复的标签。

      当只允许标签的一个实例且找到重复项时,会发生此错误。

      已知唯一标签的完整列表

      • <doctype html>
      • <html amp>
      • <head>
      • <link rel=canonical href=...>
      • <link rel=amphtml href=...>
      • <meta charset="utf-8"> * <style amp-custom> * <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> * <body> * <script src="https://cdn.ampproject.org/v0.js">

        样式和布局错误

        在深入了解样式和布局错误之前,值得了解 AMP 中的 样式布局 的工作原理。由于 AMP 页面是 HTML 页面,因此样式与任何 HTML 页面非常相似。但为了确保页面快速加载,有一些限制,并且 AMP 验证器会强制执行这些限制。

        AMP 页面中的布局受到更多控制。在页面上显示的任何标签都需要预定义的高度和宽度,从而显著减少渲染和滚动抖动。这并不意味着您必须手动包含这些属性。对于某些布局类型,AMP 验证器不会抛出错误,因为假定默认值。

        每个 AMP 标签都有一个 supported_layouts 列表,如 AMP 验证器规范 中所定义。验证器会为不受支持的布局抛出错误,并且会检查预定义布局的验证规则。

        样式表过长

        代码 STYLESHEET_TOO_LONG
        格式 “标签 'style' 中指定的作者样式表太长 - 我们看到 %1 字节,而限制为 %2 字节。”
        修复 将样式表的尺寸减小到 75,000 字节以下。

        当 AMP 验证器测量 <style amp-custom> 中的样式内容的尺寸超过 75,000 字节限制时,会抛出此错误。

        CSS 语法错误

        代码 CSS_SYNTAX
        格式 “标签 '%1' 中的 CSS 语法错误 - %2。”
        修复 修复 CSS 语法错误。

        当指定标签中出现 CSS 语法错误时,会发生此错误。如果您不确定是什么导致了错误,请尝试通过在线 CSS 验证器运行 CSS,例如 csslint

        特定规则的 CSS 语法错误

        代码 CSS_SYNTAX_INVALID_AT_RULE
        格式 “标签 '%1' 中的 CSS 语法错误 - 发现无效的 @ 规则 '%2'。”
        修复 修复指定的 CSS 语法错误。

        此错误指的是 CSS 中的 @ 规则,AMP 仅允许少数规则。(另请参阅 AMP 规范)。例如,不允许使用 @import。验证错误会明确告诉您无效的规则,从而更容易修复该规则。

        AMP 标签不支持隐式布局

        代码 IMPLIED_LAYOUT_INVALID
        格式 “标签 '%2' 不支持隐式布局 '%1'。”
        修复 为标签提供有效的布局属性。

        当您未为 AMP 标签指定布局,且隐含布局(基于宽度、高度和大小)不受支持时,会发生此错误。在 AMP 验证器规范 中检查标签的 supported_layout 值。

        实际布局行为由 layout 属性决定。有关布局工作原理的更多信息,请参阅 如何控制布局AMP HTML 布局系统规范

        注意 – 如果您未指定布局,且未包含 widthheight 值,则布局默认为 CONTAINER。验证器会抛出一个错误,因为 CONTAINER 在任何 AMP 标签中都不受支持。指定除 CONTAINER 之外的布局,或添加 width 和/或 height 值,错误就会消失。

        隐式布局不允许的属性

        代码 ATTR_DISALLOWED_BY_IMPLIED_LAYOUT
        格式 “标签 '%2' 中的属性 '%1' 被隐含布局 '%3' 禁止。”
        修复 从标签中移除禁止的属性,或指定允许该属性的布局。

        当您未为 AMP 标签指定布局,且隐含布局包含禁止的属性时,会发生此错误。布局类型的禁止属性在 AMP HTML 布局系统规范 中进行了描述。

        AMP 标签不支持指定的布局

        代码 SPECIFIED_LAYOUT_INVALID
        格式 “指定的布局 '%1' 不受标签 '%2' 支持。”
        修复 指定标签支持的布局。

        当标签的指定布局不受支持时,会发生此错误。在 AMP 验证器规范 中检查标签的 supported_layout 值。

        实际布局行为由 layout 属性决定。有关布局工作原理的更多信息,请参阅 如何控制布局AMP HTML 布局系统规范

        指定布局不允许的属性

        代码 ATTR_DISALLOWED_BY_SPECIFIED_LAYOUT
        格式 “标签 '%2' 中的属性 '%1' 被隐含布局 '%3' 禁止。”
        修复 从标签中移除禁止的属性,或指定允许该属性的布局。

        当您为 AMP 标签指定布局,且布局包含禁止的属性时,会发生此错误。布局类型的禁止属性在 AMP HTML 布局系统规范 中进行了描述。

        布局所需的属性无效值

        代码 ATTR_VALUE_REQUIRED_BY_LAYOUT
        格式 “标签 '%3' 中属性 '%2' 的无效值 '%1' - 对于布局 '%4',将属性 '%2' 设置为值 '%5'。”
        修复 将属性设置为指定的值。

        当属性值对于指定的布局无效时,会发生此错误。要了解是什么触发了此错误,你需要熟悉布局的不同行为

        假设你将布局设置为 fixed-height,并且为 heightwidth 都包含数字值。fixed-height 布局采用 height 值。width 属性必须不存在,否则设置为 auto。验证器会抛出 ATTR_VALUE_REQUIRED_BY_LAYOUT。

        宽度和高度的单位不一致

        代码 INCONSISTENT_UNITS_FOR_WIDTH_AND_HEIGHT
        格式 “标签 '%1' 中的宽度和高度单位不一致 - 宽度以 '%2' 指定,而高度以 '%3' 指定。”
        修复 提供一致的单位宽度和高度。

        除了 layout=fixed 之外,宽度和高度属性需要以相同的单位表示。如果不相同,则会触发此错误。

        例如,<amp-img src="" layout="responsive" width="42px" height="42rem"> 会导致以下错误消息

        “标签 'amp-img' 中的宽度和高度单位不一致 - 宽度以 'px' 指定,而高度以 'rem' 指定。”

        模板错误

        AMP 页面不能包含模板化语法,除非该语法位于专门设计为包含模板的 AMP 标签中,例如 amp-mustache

        在源文件中包含模板是可以的,只要这些文件的生成输出不包含模板(另请参阅 使用 CSS 预处理器)。

        属性包含模板语法

        代码 TEMPLATE_IN_ATTR_NAME
        格式 “标签 '%2' 中的属性名称 '%1' 中的 Mustache 模板语法。”
        修复 从属性中删除 Mustache 模板语法。

        每当验证器在属性值中找到 Mustache 模板语法 时,就会发生此错误。

        属性包含未转义的模板语法

        代码 UNESCAPED_TEMPLATE_IN_ATTR_VALUE
        格式 “标签 '%2' 中的属性 '%1' 设置为 '%3',其中包含未转义的 Mustache 模板语法。”
        修复 转义 Mustache 模板。

        每当验证器在属性值中找到 未转义的 Mustache 模板语法 时,就会发生此错误。

        属性包含模板部分

        代码 TEMPLATE_PARTIAL_IN_ATTR_VALUE
        格式 “标签 '%2' 中的属性 '%1' 设置为 '%3',其中包含 Mustache 模板部分。”
        修复 删除 Mustache 部分。

        每当验证器在属性值中找到 Mustache 部分 时,就会发生此错误。

        弃用错误

        已弃用的标签

        代码 已弃用标签
        格式 尚未定义错误消息(无已弃用标签)。
        修复 移除已弃用标签。

        当在 AMP 文档中找到先前有效的 AMP 标签时,会出现此警告。这只是个警告;带有警告的 AMP 文档仍然有效。目前不存在已弃用标签;该警告保留用于将来的弃用。

        已弃用的属性

        代码 已弃用属性
        格式 “标签 '%2' 中的属性 '%1' 已弃用 - 请改用 '%3'”。
        修复 作为一项良好做法,移除已弃用属性。

        当在 AMP 文档中找到先前有效的 AMP 属性时,会出现此警告。这只是个警告;带有警告的 AMP 文档仍然有效。

        通过在 AMP 验证器规范 中搜索 deprecation 来识别每个 AMP 标签的已弃用属性。