AMP 驗證錯誤
有效的 AMP 文件不得包含任何驗證錯誤。本文件的目的是協助您更瞭解並修正您在驗證 AMP 頁面時遇到的任何驗證錯誤。如需驗證錯誤的完整總覽,請參閱 AMP 驗證器規格。
AMP HTML 標記和屬性錯誤
遺失必要標記
程式碼 | MANDATORY_TAG_MISSING |
格式 | 「遺失或不正確的必要標記 '%1'。」 |
修正 | 新增 (或修正) 必要 HTML 標記。 |
所有 AMP 文件中都必須存在下列標記
<!doctype html>
<html amp> 或 <html ⚡>
<head>
<link rel="canonical" href="$SOME_URL">
<meta charset="utf-8">
<meta name="viewport" content="...">
<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>
<script async src="https://cdn.ampproject.org/v0.js"></script>
<body>
這些必要標記在 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 標記具有允許名稱的屬性,但值不允許。例如,此錯誤的一個常見觸發因素是網址的無效值。所有網址值 (在 href
和 src
屬性中) 都必須符合這些可能的屬性值之一。
重要事項: AMP 中的許多網址值都需要 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」
-
「不允許 CSS 中的 @viewport」
標記內不允許的文字
程式碼 | CDATA_VIOLATES_DENYLIST |
格式 | 「標記 '%1' 內的文字 (CDATA) 符合 '%2',此為不允許的項目。」 |
修正 | 移除不允許的文字。 |
特定 CSS 資料已加入拒絕清單,以驗證基本 CSS AMP 規則。
以下是不允許的 CSS 資料清單 (另請參閱 AMP 驗證器規格中的 disallowed_cdata_regex
)
"\\.i?-amp-"
("CSS -amp- 類別名稱前置字元")「!important」
「charset」
「@import」
「@namespace」
「@document」
-
「@page」
-
「@viewport」
標記中屬性內不允許的屬性
程式碼 | DISALLOWED_PROPERTY_IN_ATTR_VALUE |
格式 | 「標記 '%3' 中屬性 '%2' 的屬性 '%1' 不允許。」 |
修正 | 移除指定屬性中不允許的屬性。 |
當屬性內的屬性名稱不允許時,就會發生此錯誤。在此內容中,屬性一詞表示屬性內結構化的鍵/值資料。
例如,下列程式碼會導致錯誤
<meta http-equiv="X-UA-Compatible" content="invalidfoo=edge">
應為:<meta http-equiv="X-UA-Compatible" content="ie=edge">
。另一個範例,在
<meta name="viewport content="width=device-width;minimum-scale=1">
中,width
和 minimum-scale
是屬性名稱。
下列程式碼會導致 DISALLOWED_PROPERTY_IN_ATTR_VALUE 錯誤
<meta name="viewport content="width=device-width;invalidfoo=1">
屬性值無效
程式碼 | INVALID_PROPERTY_VALUE_IN_ATTR_VALUE |
格式 | 「標記 '%3' 中屬性 '%2' 的屬性 '%1' 設定為 '%4',此為無效的值。」 |
修正 | 修正無效的屬性值。 |
當屬性內的屬性值無效時,就會發生此錯誤。在此內容中,屬性一詞表示屬性內結構化的鍵/值資料。
例如,在 <meta name="viewport content="width=device-width;minimum-scale=1">
中,device-width
和 1
是屬性值。
下列程式碼會導致 INVALID_PROPERTY_VALUE_IN_ATTR_VALUE 錯誤
<meta name=viewport content="width=device-width;minimum-scale=invalidfoo">
請注意,如果您嘗試輸出無值屬性 (例如,amp-video
等元件的 autoplay
、controls
或 loop
等屬性),但您的 HTML 建置程序產生預設 (但無效) 值,例如 true
(例如,React 會預設產生 <amp-video autoplay="true" ...>
),解決方法是將屬性的名稱輸出為值。例如,<amp-video autoplay="autoplay" ...>
。
遺失網址
程式碼 | MISSING_URL |
格式 | 「標記 '%2' 中屬性 '%1' 的網址遺失。」 |
修正 | 新增有效的網址。 |
當需要網址的屬性遺失時,就會發生此錯誤,例如,空的 href
或 src
屬性。
網址無效
程式碼 | INVALID_URL_PROTOCOL |
格式 | 「標記 '%2' 中屬性 '%1' 的網址 '%3' 格式錯誤」 |
修正 | 修正損壞的網址。 |
當屬性具有網址,但網址無效時,就會發生此錯誤。
網址協定無效
程式碼 | INVALID_URL_PROTOCOL |
格式 | 標記 '%2' 中屬性 '%1' 的網址協定 '%3:' 無效。 |
修正 | 變更為有效的協定,例如,http 可能需要變更為 https 。 |
當標記具有必須設定為特定協定的 href
或 src
時,就會發生此錯誤。例如,許多標記都需要 https
。
屬性中遺失必要屬性
程式碼 | MANDATORY_PROPERTY_MISSING_FROM_ATTR_VALUE |
格式 | 「標記 '%3' 中屬性 '%2' 遺失屬性 '%1'。」 |
修正 | 新增遺失的屬性。 |
目前,如果遺失下列必要屬性,就會發生此錯誤
content="...ie=..."
content="...width=..."
content="...minimum-scale=..."
它們參照預期的標記
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<meta name=viewport content="width=device-width;minimum-scale=1">
互斥屬性
程式碼 | MUTUALLY_EXCLUSIVE_ATTRS |
格式 | 「在標記 '%1' 中遇到互斥屬性 - 從 %2 中選取一個。」 |
修正 | 移除其中一個互斥屬性。 |
當標記同時具有互斥屬性時,就會發生此錯誤。例如,下列標記只允許一個
amp-iframe
:src
或srcdoc
amp-jwplayer
:data-media-id
或data-playlist-id
從清單中遺失必要屬性
程式碼 | MANDATORY_ONEOF_ATTR_MISSING |
格式 | 「標記 '%1' 遺失必要屬性 - 從 %2 中選取一個。」 |
修正 | 從提供的屬性選項中新增遺失的必要屬性。 |
當標記從多個選項中遺失一個必要屬性時,就會發生此錯誤。例如,下列標記需要從兩個可能的選項中選取一個屬性
amp-twitter
:data-tweetid
或src
amp-instagram
:data-shortcode
或src
amp-iframe
:src
或srcdoc
amp-youtube
:src
或data-videoid
父標記錯誤
程式碼 | 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-audio
、amp-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
的子系。
具有提示的必要標記祖系
程式碼 | MANDATORY_TAG_ANCESTOR_WITH_HINT |
格式 | 「標記 '%1' 只能作為標記 '%2' 的子系出現。您是否意指 '%3'?」 |
修正 | 移除標記、使其成為特定標記的子系,或將標記取代為提示的標記。 |
當在 AMP 文件中找到下列其中一個標記,且未正確巢狀在其必要父系中時,就會發生錯誤
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">
-
<meta viewport>
* <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 標記都有 AMP 驗證器規格中定義的 supported_layouts
清單。驗證器會針對不支援的版面配置擲回錯誤,並檢查預先定義版面配置的驗證規則。
樣式表過長
程式碼 | STYLESHEET_TOO_LONG |
格式 | 「標記 'style' 中指定的作者樣式表太長 - 我們看到 %1 個位元組,而限制為 %2 個位元組。」 |
修正 | 將樣式表大小縮減到 75,000 個位元組以下。 |
當 AMP 驗證器測量 <style amp-custom>
內樣式內容的大小超過 75,000 個位元組限制時,就會擲回此錯誤。
CSS 語法錯誤
程式碼 | CSS_SYNTAX |
格式 | 「標記 '%1' 中的 CSS 語法錯誤 - %2。」 |
修正 | 修正 CSS 語法錯誤。 |
當您在指定的標記中發生 CSS 語法錯誤時,就會發生此錯誤。如果您不確定錯誤的原因,請嘗試透過線上 CSS 驗證器 (例如 csslint) 執行 CSS。
特定規則的 CSS 語法錯誤
程式碼 | CSS_SYNTAX_INVALID_AT_RULE |
格式 | 「標記 '%1' 中的 CSS 語法錯誤 - 看到無效的 at 規則 '%2'。」 |
修正 | 修正指定的 CSS 語法錯誤。 |
此錯誤參照 CSS 內的 @-rules,AMP 只允許少數規則。(另請參閱 AMP 規格)。例如,不允許 @import
。驗證錯誤會明確告訴您無效的規則,讓您可以更輕鬆地修正該規則。
AMP 標記不支援隱含版面配置
程式碼 | IMPLIED_LAYOUT_INVALID |
格式 | 「標記 '%2' 不支援隱含版面配置 '%1'。」 |
修正 | 為標記提供有效的版面配置屬性。 |
當您未指定 AMP 標記的版面配置,且隱含版面配置 (根據寬度、高度和大小) 不受支援時,就會發生此錯誤。請檢查 AMP 驗證器規格中標記的 supported_layout
值。
實際版面配置行為由 layout
屬性決定。如需版面配置運作方式的詳細資訊,請參閱如何控制版面配置和 AMP HTML 版面配置系統規格。
width
和 height
值,則版面配置預設為 CONTAINER。驗證器會擲回錯誤,因為任何 AMP 標記都不支援 CONTAINER。指定 CONTAINER 以外的版面配置,或新增 width
和/或 height
值,錯誤就會消失。隱含版面配置不允許的屬性
程式碼 | ATTR_DISALLOWED_BY_IMPLIED_LAYOUT |
格式 | 「隱含版面配置 '%3' 不允許標記 '%2' 中的屬性 '%1'。」 |
修正 | 從標記中移除不允許的屬性,或指定允許該屬性的版面配置。 |
當您未指定 AMP 標記的版面配置,且隱含版面配置包含不允許的屬性時,就會發生此錯誤。版面配置類型的不允許屬性在 AMP HTML 版面配置系統規格中說明。
AMP 標記不支援指定的版面配置
程式碼 | SPECIFIED_LAYOUT_INVALID |
格式 | 「標記 '%2' 不支援指定的版面配置 '%1'。」 |
修正 | 指定標記支援的版面配置。 |
當標記的指定版面配置不受支援時,就會發生此錯誤。請檢查 AMP 驗證器規格中標記的 supported_layout
值。
實際版面配置行為由 layout
屬性決定。如需版面配置運作方式的詳細資訊,請參閱如何控制版面配置和 AMP HTML 版面配置系統規格。
指定版面配置不允許的屬性
程式碼 | ATTR_DISALLOWED_BY_SPECIFIED_LAYOUT |
格式 | 「隱含版面配置 '%3' 不允許標記 '%2' 中的屬性 '%1'。」 |
修正 | 從標記中移除不允許的屬性,或指定允許該屬性的版面配置。 |
當您為 AMP 標記指定版面配置,且版面配置包含不允許的屬性時,就會發生此錯誤。版面配置類型的不允許屬性在 AMP HTML 版面配置系統規格中說明。
版面配置所需屬性的值無效
程式碼 | ATTR_VALUE_REQUIRED_BY_LAYOUT |
格式 | 「標記 '%3' 中屬性 '%2' 的值 '%1' 無效 - 對於版面配置 '%4',將屬性 '%2' 設定為值 '%5'。」 |
修正 | 將屬性設定為指定的值。 |
當屬性值對於指定的版面配置無效時,就會發生此錯誤。若要瞭解觸發此錯誤的原因,您需要熟悉版面配置的不同行為。
假設您將版面配置設定為 fixed-height
,並且在 height
和 width
中都包含數值。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 局部時,就會發生此錯誤。
淘汰錯誤
已淘汰的標記
程式碼 | DEPRECATED_TAG |
格式 | 尚未定義錯誤訊息 (沒有已淘汰的標記)。 |
修正 | 移除已淘汰的標記。 |
當在 AMP 文件中找到先前有效的 AMP 標記時,就會發生此警告。這只是一個警告;具有警告的 AMP 文件仍然有效。目前沒有已淘汰的標記;此警告保留供未來淘汰使用。
已淘汰的屬性
程式碼 | DEPRECATED_ATTR |
格式 | 「標記 '%2' 中的屬性 '%1' 已淘汰 - 請改用 '%3'。」 |
修正 | 根據最佳做法,移除已淘汰的屬性。 |
當在 AMP 文件中找到先前有效的 AMP 屬性時,就會發生此警告。這只是一個警告;具有警告的 AMP 文件仍然有效。
透過在 AMP 驗證器規格中搜尋 deprecation
,找出每個 AMP 標記的已淘汰屬性。