Добрый день. Сообщение Яндекса «невозможно определить принадлежность данных полей» означает, что парсер микроразметки не может однозначно сопоставить элементы с itemprop с каким‑то itemscope на странице. Это общая формулировка — причин может быть несколько. Ниже — список самых частых причин и пошаговая инструкция, где и что проверить.
Что проверить в первую очередь
1. Правильное вложение itemprop в itemscope
- Каждый элемент с itemprop должен быть потомком (в дереве DOM) некоторого элемента с itemscope, либо явно связан через itemref. Если элемент физически не внутри itemscope — парсер не знает, кому он принадлежит.
- Частая ошибка: вы ожидаете, что itemprop «принадлежит» ближайшему визуально блоку, а на самом деле в HTML нарушена вложенность (например, незакрытый тег), и элемент оказался вне itemscope.
2. Неправильное использование itemscope + itemprop на одном элементе
- Если вы пишете <div itemscope itemprop="xyz"> … </div>, то этот элемент сам становится вложенным «item» (nested item) и все itemprop внутри него принадлежат уже этому вложенному item, а не родителю. Часто это приводит к тому, что ожидаемые свойства «родителя» оказываются «потеряны».
- Проверьте, не ставили ли вы случайно itemprop на контейнер, который должен просто быть itemscope.
3. Наличие нескольких itemscope, пересекающихся или неправильно вложенных
- Два соседних itemscope могут визуально выглядеть как один блок, но парсер видит их отдельно. Свойства могут «приписываться» не тому itemscope.
- Убедитесь в корректной иерархии и отсутствии непреднамеренной перекрывающей разметки.
4. Использование itemref
- Если вы используете itemref, проверьте, что id-ы, на которые ссылаются, существуют и уникальны. Некорректные или отсутствующие ссылки приводят к неясности принадлежности полей.
5. Некорректный/невалидный HTML
- Некорректные теги, пропущенные закрывающие теги, одинаковые id и пр. ломают дерево DOM; парсер микроразметки может увидеть другую структуру, чем вы ожидаете.
- Прогоните страницу через HTML-валидатор (W3C) и исправьте ошибки.
6. Динамически подгружаемый контент (JS)
- Валидатор Яндекса может не выполнять весь JS. Если itemprop вставляются скриптом, валидатор их может не видеть. Сравните «view-source» и «Elements» в DevTools.
7. Неподходящие теги/атрибуты для конкретных свойств
- Для некоторых тегов значение свойства берётся из специфичного атрибута (meta@content, img@src, a@href, time@datetime и т. п.). Если вы поставили itemprop на тег, не передающий значение корректно, парсер может не определить значение.
- Проверьте, что у тегов есть необходимые атрибуты, если вы рассчитываете на них.
8. Конфликт разных форматов разметки
- Если на странице одновременно используются microdata, RDFa и JSON‑LD с перекрывающимися свойствами, парсер может запутаться. Лучше не дублировать одно и то же несколькими форматами или делать это аккуратно.
Полезные инструменты и шаги для отладки
1. Откройте страницу в браузере → правой кнопкой → Inspect (DevTools). В Elements найдите все элементы с attributes itemscope, itemtype, itemprop.
- Ctrl/Cmd+F: ищите "itemscope" и "itemprop".
2. Сравните исходный код (View Source) и DOM (Elements) — возможно, разметка меняется JS.
3. Прогоните страницу через:
- Вебмастер Яндекса (validator), посмотрите, какие именно поля валидатор считает «неопределёнными».
- Google Rich Results / Structured Data Testing Tool / Schema.org validator — сравните результаты.
- W3C HTML Validator — для ошибок HTML.
4. Уберите/закомментируйте подозрительные itemprop по очереди — часто локализуется проблемный фрагмент.
5. Проверьте использование itemref и уникальность id.
6. Посмотрите на вложенные itemscope: если вы ожидали, что свойства внутри вложенного блока относятся к родителю, а не к вложенному item, это ошибка проекта разметки.
Примеры ошибок и правильной разметки
Неправильно (считается вложенным item, а вы этого не хотите):
<div itemscope itemtype="http://schema.org/Person">
<div itemscope itemprop="worksFor" itemtype="http://schema.org/Organization">
<span itemprop="name">Org</span>
</div>
<span itemprop="name">Иван</span>
</div>
Здесь свойства внутри внутреннего div относятся к Organization, а не к Person.
Правильно (свойства родителя находятся в его пределах, вложенный item — отдельный):
<div itemscope itemtype="http://schema.org/Person">
<span itemprop="name">Иван</span>
<div itemprop="worksFor" itemscope itemtype="http://schema.org/Organization">
<span itemprop="name">Org</span>
</div>
</div>
Другой пример ошибки — itemprop вне itemscope:
<div itemscope itemtype="http://schema.org/Organization">
<!-- забыли закрыть div ниже или тег выведен не там -->
</div>
<span itemprop="telephone">+7…</span> <!-- не видит принадлежность -->
Где смотреть на ваших страницах
- Проверьте header/footer: часто организация или хлебные крошки размечаются в шаблоне и могут «перекрывать» разметку страниц услуг.
- Посмотрите блоки с контактами (телефон, адрес) — они часто вынесены в footer и могут быть разметкой Organization, а другие itemprop на странице по ошибке «вне» этого itemscope.
- Проверьте боковые блоки, виджеты и include-файлы PHP — возможно, один и тот же элемент itemscope повторяется или закрывается неправильно в шаблоне.
Если хотите — могу помочь конкретно для ваших трёх страниц:
- Могу просмотреть HTML и показать точные места с проблемой и как исправить. Пришлите доступ к исходному коду или дайте разрешение на то, чтобы я проанализировал страницы (я сам могу открыть указанные URL и проанализировать DOM).
Краткая памятка для исправления
- Убедитесь, что все itemprop находятся внутри itemscope (или связаны через itemref).
- Проверьте вложенность: itemprop на элементе с itemscope делает его вложенным item.
- Исправьте HTML-ошибки, дублированные id и проверки itemref.
- Если разметка создаётся JS, убедитесь, что валидатор видит тот же DOM.
Напишите, хотите ли, чтобы я посмотрел конкретные фрагменты кода или сам проанализировал указанные страницы — тогда дам точечные рекомендации и правки.