panelarrow

Сайт обо всём по-немногу

Сайт обо всём по-немногу

Генерация Турбо-страниц для Яндекса в WordPress'е

| 2 комментария

В марте я установил на сайт плагин «Accelerated Mobile Pages» для отдачи страниц моего сайта в виде AMP-страниц для смартфонов, что мне долго и упорно рекомендовал сделать Гугл. А в конце прошлой осени, Яндекс анонсировал свои «Турбо-страницы», технология ускоряющая доступ к текстам на сайте со смартфона, но уже от Яндекса. Я их сначала внедрять на сайт не планировал, но раз уже подключил к сайту AMP-страницы, то решил активировать и «Турбо-страницы».

Для генерации «Турбо-страниц» для worpress'а есть несколько плагинов. Я свой выбор остановил на плагине «RSS for Yandex Turbo». Плагин небольшой, ставится и настраивается он очень просто. После его установки и настройки, добавил ссылки в панель вебмастера в Яндексе. И, через некоторое время, после проверки моих фидов у меня вывалилось несколько предупреждений: «Cодержимое Турбо-страницы не соответствует оригинальной версии (в содержимом тега найдены закодированные символы) (2 предупреждения)». За разъяснениями пришлось обратиться в службу поддержки Яндекса, ибо мне не было понятно, из-за каких символов выдаётся предупреждение.

В результате, проблема оказалась в следующем — у меня для приведения в «правильный вид» написанных заметок на сайте используется плагин «ВП Типограф Лайт». Он после публикации делает коррекцию текста — ставит неразрывные пробелы там где надо, длинное тирэ, кавычки «ёлочки» и т.п. И добавляет эти символы он с помощью html-кодов. А уже плагин «RSS for Yandex Turbo» вытаскивает и отдаёт эти символы в тексте фидов. Поэтому, чтобы устранить предупреждения выдаваемые Яндексом, надо от этих символов избавиться. Для этого, полез в исходный код и дописал замену html-кодов на обычные символы. В итоге, код плагина стал таким:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//удаляем все unicode-символы (как невалидные в rss)
$content = preg_replace('/[\x00-\x1F\x7F]/u', '', $content);
$content = preg_replace('/«/', '"', $content);
$content = preg_replace('/»/', '"', $content);
$content = preg_replace('/'/', '\'', $content);
$content = preg_replace('/ /', ' ', $content);
$content = preg_replace('/—/', '-', $content);
$content = preg_replace('/&/', '&', $content);
$content = preg_replace('/&lt;/', '<', $content);
$content = preg_replace('/&gt;/', '>', $content);
//удаляем все атрибуты тега img кроме alt и src
$content = yturbo_strip_attributes($content,array('alt','src'));

$content = wpautop($content);

Мои добавления в код идут за строкой «$content = preg_replace ('/[\x00-\x1F\x7F]/u', '', $content);». После этого, генерируемый фид без проблем проходит валидацию Турбо-страниц в Яндексе.

Я пробовал связаться с автором, чтобы донести эту информацию до него, возможно, что такая проблема не только у меня. Но пока не получил ответа. А чтобы при обновлениях плагина у меня мои добавления не потерялись, сохраню их в этой записи.

2 comments

  1. Vitto:

    Привет,

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

    Пример, было в тексте до замены:

    1
    2
    3
    &amp;lt;script&amp;gt;
    alert('XSS');
    &amp;lt;/script&amp;gt;

    После замены, станет нормальным JS кодом, который выполнится браузером

    1
    2
    3
    &lt;script&gt;
    alert('XSS');
    &lt;/script&gt;

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

    P.S. Я уже связался по этому поводу с Яндексом, жду ответа от разработчиков.

    1. Спасибо за информацию, я за содержимым своих страницах приглядываю, чтобы подобного не случилось.

Добавить комментарий для Vitto Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *