В AMP-документах не должно быть ошибок кода. В этом документе рассказывается, как устранить ошибки, возникающие при проверке AMP-страниц. Полный список неполадок приведен в спецификации.

Ошибки в HTML-тегах и атрибутах на AMP-страницах

Отсутствует обязательный тег

Код MANDATORY_TAG_MISSING
Формат "The mandatory tag '%1' is missing or incorrect."
Действия Добавьте необходимый HTML-тег или исправьте ошибку в нем.

Следующие теги должны присутствовать во всех AMP-документах:

  • <!doctype html>
  • <html amp> or <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>

Обязательные теги включают в себя поле mandatory: true в спецификации валидатора AMP. Также они приведены в документации по AMP.

Отсутствует тег, который требуется для работы другого тега

Код TAG_REQUIRED_BY_MISSING
Формат "The '%1' tag is missing or incorrect, but required by '%2'."
Действия Добавьте необходимый HTML-тег или исправьте ошибку в нем.

Валидатор выводит ошибку TAG_REQUIRED_BY_MISSING, когда обнаруживает в AMP-документе расширенный компонент без соответствующего тега <script>.

Расширенные компоненты должны быть включены в AMP-документ как специальные элементы. Чтобы исправить эту ошибку, перейдите на справочную страницу расширенного компонента, скопируйте нужный скрипт и вставьте его в тег <head> AMP-документа.

Недопустимый тег

Код DISALLOWED_TAG
Формат "The tag '%1' is disallowed."
Действия Удалите недопустимый тег.

Теги вносятся в белый список, так что единого списка всех недопустимых тегов не существует. Однако в документации по AMP в целом описано, какие теги могут быть недопустимыми.

Отсутствует обязательный атрибут

Код MANDATORY_ATTR_MISSING
Формат "The mandatory attribute '%1' is missing in tag '%2'."
Действия Добавьте обязательный атрибут для тега.

Обязательные атрибуты перечислены в спецификации валидатора AMP. Найдите нужный тег, просмотрите атрибуты и убедитесь, что для них задан параметр mandatory: true. Обязательные атрибуты для каждого тега AMP также перечислены в его описании.

Неверное значение атрибута

Код INVALID_ATTR_VALUE
Формат "The attribute '%1' in tag '%2' is set to the invalid value '%3'."
Действия Укажите действительное значение атрибута.

Эта ошибка говорит о том, что в теге HTML есть атрибут с допустимым названием, но неверным значением. Например, часто встречаются ошибки в URL. Все значения URL в атрибутах href и src должны быть указаны в одном из допустимых форматов.

ВАЖНО. Для многих URL требуется протокол HTTPS. Если вы не можете понять причину ошибки, проверьте спецификацию соответствующего тега AMP. Возможно, необходимо изменить протокол.

Недопустимый атрибут

Код DISALLOWED_ATTR
Формат "The attribute '%1' may not appear in tag '%2'."
Действия Удалите атрибут из HTML-тега.

Атрибуты вносятся в белый список, так что единого списка всех недопустимых атрибутов не существует. Чтобы узнать, какие атрибуты поддерживаются определенным тегом, найдите тег HTML, а затем выполните поиск по запросу attrs в спецификации валидатора AMP.

Помимо атрибутов из белого списка для каждого конкретного тега, поддерживаются также все атрибуты из белого списка для $GLOBAL_ATTRS. Атрибуты с префиксом "data-" также разрешены.

Отсутствует или неверно указан обязательный текст

Код MANDATORY_CDATA_MISSING_OR_INCORRECT
Формат "The mandatory text (CDATA) inside tag '%1' is missing or incorrect."
Действия Добавьте в тег обязательный текст или исправьте его.

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"
  • "Недопустимый атрибут !important в CSS"
  • "Недопустимая директива @charset в CSS"
  • "Недопустимая директива @import в CSS"
  • "Недопустимая директива @namespace в CSS"
  • "Недопустимая директива @supports в CSS"
  • "Недопустимая директива @document в CSS"
  • "Недопустимая директива @page в CSS"
  • "Недопустимая директива @viewport в CSS"

Недопустимый текст внутри тега

Код CDATA_VIOLATES_BLACKLIST
Формат "The text (CDATA) inside tag '%1' matches '%2', which is disallowed."
Действия Удалите недопустимый текст.

Определенные данные CSS были внесены в черный список, чтобы проверить соответствие важным правилам CSS для AMP.

Черный список данных CSS (см. также blacklisted_cdata_regex в спецификации валидатора AMP):

  • "\\.i?-amp-" ("префикс имени для класса -amp- в CSS")
  • "!important"
  • "charset"
  • "@import"
  • "@namespace"
  • "@document"
  • "@page"
  • "@viewport"

Недопустимое свойство атрибута внутри тега

Код DISALLOWED_PROPERTY_IN_ATTR_VALUE
Формат "The property '%1' in attribute '%2' in tag '%3' is disallowed."
Действия Удалите недопустимое свойство из указанного атрибута.

Эта ошибка возникает, если в атрибуте обнаруживается недопустимое свойство. Свойством в данном случае считается структурированная пара "ключ-значение". Например, в атрибуте <meta name="viewport content="width=device-width;minimum-scale=1"> есть свойства width and minimum-scale.

Ошибка возникает в следующем случае:

<meta name="viewport content="width=device-width;invalidfoo=1">

Ещё один пример недопустимого свойства:

<meta http-equiv="X-UA-Compatible" content="invalidfoo=edge">

Правильный вариант: <meta http-equiv="X-UA-Compatible" content="ie=edge">

Недопустимое значение свойства

Код INVALID_PROPERTY_VALUE_IN_ATTR_VALUE
Формат "The property '%1' in attribute '%2' in tag '%3' is set to '%4', which is invalid."
Действия Исправьте недопустимое значение свойства.

Эта ошибка возникает, если в атрибуте обнаруживается недопустимое значение свойства. Свойством в данном случае считается структурированная пара "ключ-значение". Например, в атрибуте <meta name="viewport content="width=device-width;minimum-scale=1"> есть значения свойств device-width и 1.

Ошибка возникает в следующем случае:

<meta name=viewport content="width=device-width;minimum-scale=invalidfoo">

Ещё один пример недопустимого значения свойства:

<meta http-equiv="X-UA-Compatible" content="ie=invalidfoo">

Правильный вариант: <meta http-equiv="X-UA-Compatible" content="ie=edge">

Отсутствует URL

Код MISSING_URL
Формат "Missing URL for attribute '%1' in tag '%2'."
Действия Добавьте действительный URL.

Эта ошибка возникает, когда в атрибуте, таком как href или src, должен быть URL, но его нет.

Недействительный URL

Код INVALID_URL_PROTOCOL
Формат "Malformed URL '%3' for attribute '%1' in tag '%2'"
Действия Исправьте URL.

Эта ошибка возникает, когда для атрибута задан недействительный URL.

Неверный протокол URL

Код INVALID_URL_PROTOCOL
Формат Invalid URL protocol '%3:' for attribute '%1' in tag '%2'.
Действия Укажите правильный протокол, например `https` вместо `http`.

Эта ошибка возникает, если в атрибутах href или src должны быть указаны URL с определенным протоколом. Например, многие теги поддерживают только https.

Отсутствует обязательное свойство атрибута

Код MANDATORY_PROPERTY_MISSING_FROM_ATTR_VALUE
Формат "The property '%1' is missing from attribute '%2' in tag '%3'."
Действия Добавьте отсутствующее свойство.

В настоящее время эта ошибка указывает на отсутствие следующих обязательных свойств:

  • 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
Формат "Mutually exclusive attributes encountered in tag '%1' - pick one of %2."
Действия Удалите один из взаимоисключающих атрибутов.

Эта ошибка возникает, если в теге обнаружены взаимоисключающие атрибуты. Например, для следующих тегов допускается только один из указанных атрибутов:

Отсутствует обязательный атрибут из списка

Код MANDATORY_ONEOF_ATTR_MISSING
Формат "The tag '%1' is missing a mandatory attribute - pick one of %2."
Действия Найдите в списке отсутствующий обязательный атрибут и добавьте его.

Эта ошибка возникает, если в теге отсутствует какой-либо из обязательных атрибутов, перечисленных в списке: Например, для следующих тегов необходимо указать любой из двух атрибутов:

Неверный родительский тег

Код WRONG_PARENT_TAG
Формат "The parent tag of tag '%1' is '%2', but it can only be '%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
Формат "The tag '%1' may not appear as a descendant of tag '%2'."
Действия Удалите или переместите недопустимый вложенный тег.

Эта ошибка возникает, если тег включен в неподходящий родительский тег. В настоящее время есть только одно такое правило: один тег template нельзя помещать в другой аналогичный тег.

Обязательный родительский тег

Код MANDATORY_TAG_ANCESTOR
Формат "The tag '%1' may only appear as a descendant of tag '%2'."
Действия Удалите тег или сделайте его дочерним для подходящего тега.

Требования к родительским и дочерним тегам приведены в спецификации для валидатора AMP в разделе mandatory_ancestor.

Ошибка возникает, когда для следующих тегов не указан mandatory_ancestor (родительский тег):

  • Тег img может быть дочерним только для тега noscript.
  • Тег video может быть дочерним только для тега noscript.
  • Тег audio может быть дочерним только для тега noscript.
  • Тег noscript может быть дочерним только для тега body.

Обязательный родительский тег с подсказкой

Код MANDATORY_TAG_ANCESTOR_WITH_HINT
Формат "The tag '%1' may only appear as a descendant of tag '%2'. Did you mean '%3'?"
Действия Удалите тег или сделайте его дочерним для подходящего тега. Можно также заменить тег на другой, с подсказкой.

Ошибка возникает, если в AMP-документе обнаруживается одна из следующих проблем:

  • Тег img не заключен в родительский тег noscript.
  • Тег video не заключен в родительский тег noscript.
  • Тег audio не заключен в родительский тег noscript.
  • Тег noscript не заключен в родительский тег body.

Повтор уникального тега

Код DUPLICATE_UNIQUE_TAG
Формат "The tag '%1' appears more than once in the document."
Действия Удалите из 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 есть свои поддерживаемые шаблоны (supported_layouts). Подробнее о них читайте в спецификации. Если используется недопустимый шаблон, валидатор выдаст ошибку. Проверяются только правила для предварительно заданного шаблона.

Слишком большая таблица стилей

Код STYLESHEET_TOO_LONG
Формат "The author stylesheet specified in tag 'style' is too long - we saw %1 bytes whereas the limit is %2 bytes."
Действия Уменьшите таблицу стилей, чтобы ее объем составлял не более 50 000 байт.

Эта ошибка возникает, если объем контента в теге <style amp-custom> превышает 50 000 байт.

Ошибка синтаксиса CSS

Код CSS_SYNTAX
Формат "CSS syntax error in tag '%1' - %2."
Действия Исправьте ошибку синтаксиса CSS.

Эта ошибка возникает, если в указанном теге обнаруживаются ошибки CSS. Если вы не знаете, почему это происходит, попробуйте проверить CSS в Интернете, например с помощью инструмента csslint.

Ошибка синтаксиса CSS в конкретном правиле

Код CSS_SYNTAX_INVALID_AT_RULE
Формат "CSS syntax error in tag '%1' - saw invalid at rule '%2'."
Действия Исправьте указанную ошибку синтаксиса CSS.

Эта ошибка относится к директивам CSS. Для них существует совсем немного правил, относящихся к AMP-страницам (см. также требования к AMP). Например, директива @import не поддерживается. Ошибка валидации указывает на недействительное правило.

Предполагаемый макет не подходит для тега AMP

Код IMPLIED_LAYOUT_INVALID
Формат "The implied layout '%1' is not supported by tag '%2'."
Действия Укажите действительный атрибут макета для тега.

Эта ошибка возникает, если для тега AMP не указан макет либо если указанный макет (ширина, высота и размеры) не поддерживается. Допустимые значения атрибута supported_layout для тегов приведены в спецификации для валидатора AMP.

Поведение макета определяется атрибутом layout. Подробнее о том, как работает макет, читайте в этом разделе нашей спецификации.

Примечание. Если макет не указан или в нем отсутствуют значения width и height, по умолчанию используется вариант CONTAINER. Валидатор выдает ошибку, поскольку этот вариант не поддерживается тегами AMP. Чтобы устранить ошибку, укажите другой макет либо значение атрибутов width и/или height.

Предполагаемый макет не поддерживает атрибут

Код ATTR_DISALLOWED_BY_IMPLIED_LAYOUT
Формат "The attribute '%1' in tag '%2' is disallowed by implied layout '%3'."
Действия Удалите из тега недопустимый атрибут или укажите совместимый макет.

Эта ошибка возникает, если для тега AMP не указан макет либо же указанный макет содержит недопустимый атрибут. Списки недопустимых атрибутов для разных макетов приведены в нашей спецификации.

Указанный макет не подходит для тега AMP

Код SPECIFIED_LAYOUT_INVALID
Формат "The specified layout '%1' is not supported by tag '%2'."
Действия Укажите макет, который поддерживается тегом.

Эта ошибка возникает, если тег не поддерживает указанный макет. Допустимые значения атрибута supported_layout для тегов приведены в спецификации для валидатора AMP.

Поведение макета определяется атрибутом layout. Подробнее о том, как работает макет, читайте в этом разделе нашей спецификации.

Указанный макет не поддерживает атрибут

Код ATTR_DISALLOWED_BY_SPECIFIED_LAYOUT
Формат "The attribute '%1' in tag '%2' is disallowed by implied layout '%3'."
Действия Удалите из тега недопустимый атрибут или укажите совместимый макет.

Эта ошибка возникает, если для тега AMP указан макет, но он содержит недопустимый атрибут. Списки недопустимых атрибутов для разных макетов приведены в нашей спецификации.

Недопустимое значение обязательного атрибута

Код ATTR_VALUE_REQUIRED_BY_LAYOUT
Формат "Invalid value '%1' for attribute '%2' in tag '%3' - for layout '%4', set the attribute '%2' to value '%5'."
Действия Укажите необходимое значение атрибута.

Эта ошибка возникает, когда значение атрибута не поддерживается указанным макетом. Чтобы понять, в чем проблема, ознакомьтесь с вариантами поведения макетов.

Допустим, вы используете макет fixed-height и указали числовые значения для атрибутов height и width. Макет fixed-height принимает значение height. Атрибут width должен отсутствовать, либо же иметь значение auto. Иначе валидатор выдает ошибку.

Несоответствие единиц измерения ширины и высоты

Код INCONSISTENT_UNITS_FOR_WIDTH_AND_HEIGHT
Формат "Inconsistent units for width and height in tag '%1' - width is specified in '%2' whereas height is specified in '%3'."
Действия Обеспечьте единообразие единиц измерения ширины и высоты.

За исключением варианта layout=fixed ширина и высота должны быть заданы в одних и тех же единицах измерения. Иначе появляется эта ошибка.

Пример неверного кода: <amp-img src="" layout="responsive" width="42px" height="42rem">.

В теге "amp-img" разные единицы измерения ширины и высоты – "px" и "rem" соответственно.

Ошибки, связанные с шаблонами

AMP-страницы не могут содержать синтаксис шаблонов, если он не включен в тег, специально созданный для таких случаев, например amp-mustache.

Вы можете включать шаблоны в исходные файлы, если при выходе контент отображается без них (см. раздел об использовании препроцессоров CSS).

Атрибут содержит синтаксис шаблона

Код TEMPLATE_IN_ATTR_NAME
Формат "Mustache template syntax in attribute name '%1' in tag '%2'."
Действия Удалите из атрибута синтаксис шаблона Mustache.

Эта ошибка возникает, если валидатор обнаруживает синтаксис шаблона Mustache в значении атрибута.

Атрибут содержит неэкранированный синтаксис шаблона

Код UNESCAPED_TEMPLATE_IN_ATTR_VALUE
Формат "The attribute '%1' in tag '%2' is set to '%3', which contains unescaped Mustache template syntax."
Действия Экранируйте шаблон Mustache.

Эта ошибка возникает, если валидатор обнаруживает неэкранированный синтаксис шаблона Mustache в значении атрибута.

Атрибут содержит подшаблон

Код TEMPLATE_PARTIAL_IN_ATTR_VALUE
Формат "The attribute '%1' in tag '%2' is set to '%3', which contains a Mustache template partial."
Действия Удалите подшаблон Mustache.

Эта ошибка возникает, если валидатор обнаруживает подшаблон Mustache в значении атрибута.

Неподдерживаемые элементы

Тег не поддерживается

Код DEPRECATED_TAG
Формат No error message defined as yet (no deprecated tags).
Действия Удалите тег, который больше не поддерживается.

Это предупреждение отображается, если в AMP-документе обнаружен устаревший тег. Оно не считается ошибкой. В настоящее время устаревших тегов нет, эта функция предусмотрена на будущее.

Атрибут не поддерживается

Код DEPRECATED_ATTR
Формат "The attribute '%1' in tag '%2' is deprecated - use '%3' instead."
Действия Рекомендуется удалить атрибут, который больше не поддерживается.

Это предупреждение отображается, если в AMP-документе обнаружен устаревший атрибут. Оно не считается ошибкой.

Устаревшие атрибуты для каждого тега можно найти по запросу deprecation в спецификации валидатора AMP.