Зачем нужна пакетная проверка
Разметка формируется шаблоном, поэтому ошибка в шаблоне повторяется на всех страницах этого типа. Проверять по одной странице с помощью валидатора: проверка разметки валидаторами — полезно, но не покрывает изменений после релизов. Пакетная проверка берёт выборку страниц каждого шаблона и сверяет разметку с ожиданиями.
Как выбрать страницы
- По нескольку десятков страниц каждого шаблона: карточка, категория, статья, контакты.
- Включайте разные случаи: товары с отзывами и без, со скидкой и без, в наличии и нет.
- Добавьте недавно опубликованные страницы: ошибки чаще появляются у новых.
Скрипт извлечения
import json
import re
import requests
pattern = re.compile(r'<script type="application/ld[+]json">(.*?)</script>', re.S)
required = {"Product": ["name", "offers"], "Article": ["headline", "datePublished"]}
def check(url):
html = requests.get(url, timeout=10).text
problems = []
for block in pattern.findall(html):
try:
data = json.loads(block)
except ValueError:
problems.append("invalid json")
continue
items = data if isinstance(data, list) else [data]
for item in items:
for field in required.get(item.get("@type"), []):
if field not in item:
problems.append("missing " + field)
return problems
Скрипт скачивает страницу, находит блоки разметки, разбирает их и проверяет наличие обязательных полей для типов, перечисленных в словаре. Он не заменяет валидатор: реальные требования зависят от типа разметки и сервиса, поэтому набор обязательных полей заполните по документации.
Что проверять
| Проверка | Как выполнить | Признак проблемы |
|---|---|---|
| Корректность формата | Разобрать блок как JSON | Ошибка разбора |
| Обязательные поля | Сверить со списком для типа | Поля отсутствуют или пусты |
| Соответствие странице | Сравнить цену, название и наличие в разметке и на странице | Расхождения |
| Дубли блоков | Посчитать блоки одного типа | Два блока Product на одной странице без причины |
| Типы значений | Число, дата, адрес в нужном формате | Цена текстом, дата в неверном формате |
Регулярность
- Запускайте проверку после каждого релиза, затрагивающего шаблоны.
- Раз в неделю проверяйте выборку по расписанию: изменения данных тоже ломают разметку.
- Сохраняйте результаты и сравнивайте с прошлым запуском.
Связанные материалы. Типичные ошибки и их причины — в статье про ошибки разметки, список проверок для магазина — в чек-листе микроразметки, а пример разметки товара — в статье Product: цена, наличие, рейтинг.
Как оформить результат
- Сгруппируйте ошибки по типам разметки и шаблонам страниц: исправлять нужно шаблон.
- Для каждой группы укажите число затронутых страниц из выборки и пример адреса.
- Отдельно выделите критичные ошибки — сломанный формат и отсутствие обязательных полей — от рекомендаций.
- После исправления повторите проверку на той же выборке и сохраните результат.
Частые вопросы
Зачем проверять разметку пакетом, если есть валидаторы?
Валидатор проверяет одну страницу, а ошибка шаблона повторяется на тысячах; пакетная проверка находит её сразу и после каждого релиза.
Как выбрать страницы для пакетной проверки?
Взять по нескольку десятков страниц каждого шаблона, включая разные случаи и недавно опубликованные страницы.
Заменяет ли скрипт валидатор?
Нет: он проверяет заданные поля и формат, а полные требования к типу разметки проверяет валидатор и документация поисковой системы.
Готовый адрес можно собрать прямо сейчас: откройте генератор ЧПУ — он транслитерирует фразу по таблице Яндекса, уберёт служебные слова и покажет длину адреса.