Main > Abyss > Яндекс турбо-страницы: В содержимом тега CDATA найдены закодированные символы

Яндекс турбо-страницы: В содержимом тега CDATA найдены закодированные символы

18.07.2018 2 comments » Views: 3,378

Яндекс турбо-страницы

Пару дней назад подключил к этому блогу Яндекс турбо-страницы и добавил фид в Яндекс Вебмастер. Спустя какое-то время, увидел, что в разделе "Турбо страницы > Источники" есть довольно много однотипных предупреждений "Cодержимое Турбо-страницы не соответствует оригинальной версии (в содержимом тега найдены закодированные символы". Решил разобраться в чем проблема...

Проблема

Выглядит ошибка вот так

Яндекс турбо страницы: в содержимом тега CDATA найдены закодированные символы

Яндекс турбо страницы: в содержимом тега CDATA найдены закодированные символы

Справка по ошибкам, которую можно найти тут "Часто встречающиеся ошибки RSS-канала" (https://yandex.ua/support/webmaster/turbo/troubleshooting.html), ясности не внесла.

Поиск ошибки

Для того, чтобы понять в чем проблема, нужно скопировать код фида статьи и вставить в валидатор который находится в разделе Яндекс.Вебмастера "Турбо-страницы > Отладка"

Яндекс турбо-страницы, отладка

Яндекс турбо-страницы, отладка

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

Проблема стала ясна: Яндекс хотел, чтобы в фиде не кодировали html, для этого ввели валидацию по экранированным закрывающимся тэгам (вероятнее всего по регулярке "~</\s*\S+\s*>~"). Все бы хорошо, если бы не блоги с исходным кодом, в которых встречаются примеры исходников. Например, в моем случае, ошибки нет и кодированный тэг должен быть именно кодированным, т.к. это не тэг страницы, а тэг исходного кода - т.е., по свое сути это текст, а не тэг.

Могу конечно ошибаться, но валидатор не пройдет любая страница содержащая исходный код с закрывающимся тэгом: любой html, xml, конфиг virtualhost апача и все в таком роде, это миллионы страниц.

Решение

Я описал проблему и написал в поддержку Яндекса, с детальным описанием и предложением отключить валидацию внутри тегов <pre> и <code>, которые всеми используются для отображения исходных кодов. Теперь жду ответа, как они и рекомендуют.

Яндекс, турбо-страницы, форма обратной связи

Яндекс, турбо-страницы, форма обратной связи

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

Как видите, такой код без проблем проходит валидацию

Яндекс, турбо страницы, валидацию пройдена

Яндекс, турбо страницы, валидацию пройдена

Будьте внимательны

Изучая проблему, я наткнулся на этот пост "Редактирование турбо страниц для Яндекса в WordPress" (https://www.baf.ru/2018/04/19/generacija-turbo-stranic-dlja-jandeksa-v-wordpress-e), там описано решение, при котором "невалидные символы", конвертируют обратно в html.

Для простых текстовых статей/комментариев, это подойдет. Но, в случае с исходным кодом, такой подход грозит XSS уязвимостями, т.к. такой безобидный  исходный код:

будет конвертирован в следующее

А это уже потенциальная уязвимость, поэтому, будьте внимательны.

--[добавлено 20.07.2018]--

Сегодня получил ответ от команды Яндекса, пообещали разобраться. Так же заметили, что несмотря на предупреждения валидатора турбо версия страницы находится в индексе, т.е. если у Вас похожая проблема, то не спешите расстраиваться по поводу того, что турбо-страницу не проиндексируют.

Так же в письме был пример на проверку турбо страницы, ссылка в таком формате:
https://yandex.ru/turbo?text=<url>
При необходимости с помощью этой ссылки можно проверить свою страницу, например: турбо версия этой страницы - https://yandex.ru/turbo?text=https://it-rem.phpdev.one/yandeks-turbo-stranitsyi-v-soderzhimom-tega-cdata-naydenyi-zakodirovannyie-simvolyi.html

Author: | Rating: 4/5 | Tags: , ,

2 comments.

Write a comment
  1. Антон Reply
    15.10.2018 в 8:57 pm
    Яндекс так и не стал нормально воспринимать кодированные символы в CDATA?
    • Vitaliy Orlov Reply
      17.10.2018 в 11:40 am
      Да, проблема все еще есть. Предупреждения "Cодержимое Турбо-страницы не соответствует оригинальной версии (в содержимом тега найдены закодированные символы)" все еще есть в вебмастере. Пока ничего с ними не делаю.

Leave a Reply to Антон Cancel reply

Your email address will not be published. Required fields are marked *

Allowed HTML-tags: <a>, <code>, <i>, <em>, <strong>, <b>, <u>, <strike>