Yoast SEO Неизвестный тег image:image в яндекс вебмастере

У замечательного плагина для WordPress он называется SEO by Yoast или даже иногда WordPress-seo плагин, хороший самый известный и стал уже стандартом де факто в своей нише. Но как обычно у него нашелся один фатальный недостаток (известная шутка) но проблема связана не с плагином, а с Яндексом об этом далее и пойдет речь.

Сут поста описать следующем образом, зарегистрировавшись в сервисе для вебмастеров от яндекса — webmaster.yandex.ru появился один интересный инструмент который призван показать возможные проблемы в индексации сайта, он проверяет многие аспекты в том числе SitemapXML сайта и если у вас карта сайта создается при помощи плагина Yoast SEO то панель яндекс вебмастер в разделе «Возможные проблемы» выдаст что то типо это

«В одном или нескольких файлах Sitemap обнаружены ошибки, которые могут повлиять на обработку файлов индексирующим роботом.»

яндекс вебмастер ошибка - Неизвестный тег image:image yoast seo sitemap

Если посмотреть подробности выяснится что краулер Яндекса на способен распознать тег xml
строка с ошибкой выглядит как то так

...image:image...

Конечно тег не совсем стандартный (язык XML предпологает возможность расширения синтаксиса) и консервативный бот Яндекс не воспринимает его как валидный, хотя он вполне валидный и Google его нормально воспринимает, поэтому авторы плагина не используя Яндекс (в их стране Яндекс не популярен) не видят проблемы в этом и ничего не исправляют.

Есть два сценария развития событий:

1. так как Яндекс оценивает это как «Возможные проблемы» и синтаксис xml как я выяснил не нарушен, то можно просто забить и ничего странного не произойдет, я сам так делал и ничего ужасного не случилось, Яндекс
не пессимизировал мои сайты из-за этого.

2. не менее хорошее решение — пытаться исправить ситуацию и убрать все проблемные для яндекса теги из SitemapXML, этот можно сделать например если вам не важно наличие в каком либо виде индексирование гуглом карты сайта вашего сайта именно с приложенными картинками.

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

Первых плох тем что там там предлагается хакнуть вендорный код плагина и огрести проблем при каждой обновлении плагина, которые выходят регулярно.

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

По третей ссылки предлагается не использовать Yoast SEO для создания карты сайта, но мене он нравится не вижу смысла страдать если проблема не во мне а в Яндексе

Поэтому я решил написать свой код который бы удалил ненужный тег и при обновлении точно бы ничего не поломал, сделать я это решил при помощи одной регулярки, анонимной функции и фильтра который нашел в плагине Yoast SEO

<?php
/*
* Plugin Name: Yoast SEO Helper
* Plugin URI: https://alkoweb.ru/?p=1018
* Version: 1.0.0
* Author: petrozavodsky
* Author URI: https://alkoweb.ru
*/

add_filter(
	'wpseo_sitemap_url',
	function ( $output, $url ) {
		return preg_replace( "'<image:image[^>]*?>.*?</image:image>'si", '', $output );
	},
	10,
	2
);

* Файл можно назвать yoast-seo-helper.php например это не важно .

Что происходит после генерации готового XML и прямо перед его выводом моя регулярка вырезает все что находится внутри тега включая сам тег, так же она вырежет тег не зависимо от наличия у него атрибутов (а вдруг) и уже после этого готовый код отдается клиенту.
Вставить этот сниппет я предлога в отдельный файл расположенный в каталоге wp-content/mu-plugins/ не вкоем случае не в function.php активной темы как это бывает, почему так я уже как то писал в этом блоге , если интересно можете почитать предыдущие посты или крайнем случае спросить в комментариях.

Есть ценное дополнение о том как проверить работает ли наш сниппет.

Для этого отключаем кеш на сайте открываем новое окно в браузере в режиме инкогнито, смотрим в вебмастере яндекса на какой sitemap он ругался, допустим это url

https://site.ru/post-sitemap1.xml

значит открываем его в приватной вкладке

view-source:https://brodude.ru/post-sitemap1.xml[.code]
ищем там такую строку image:image, для надежности искать можно воспользовавшись поиском браузера по содержимому нажав (ctrl+f) .

Возможные проблемы сайта Яндекс вебмастер ...image:imag...

Если такой строки не нашлось значит у нас все получилось, нажимаем в вебмастере кнопку «проверить»

 

P.S.  как подсказали в комментариях есть способ проще   

add_filter( 'wpseo_xml_sitemap_img', '__return_false' );

UPD: Евгений в комментария пишет что первый вариант кода тоже имеет свои плюсы, думаю можно поверить ему на слово.

  1. Приветствую, Владимир. Для меня данная проблема тоже весьма актуальна. У меня премиум версия плагина Yoast SEO и все методы решения вопроса, найденные до этого, были не действенны, т.к. код отличается от версии простой. Хотел, с вашего позволения, уточнить — файл, создаваемый в каталоге wp-content/plugins/, должен называться как-то определённо и нужно ли его подвязывать где-то в структуре сайта? Надеюсь на ответ. С благодарностью, Павел.

    • Немного обновил пост — Файл можно назвать yoast-seo-helper.php например это не важно.

      Важно то что если его закинуть в wp-content/plugins/ то его потом нужно активировать как обычный плагин , а если в wp-content/mu-plugins/ то он сам активируется и выключить можно будет только удалив файл.

      Мне второе удобней.

      Если в премиум версии есть фильтр ‘wpseo_sitemap_url’ то с ним тоже заработает в обычной версии этот фильтр тут лежит wordpress-seo/inc/sitemaps/class-sitemaps-renderer.php строка 274. можно сравнить с премиум.

  2. Спасибо большое за ответ. У меня нет каталога wp-content/mu-plugins/ , но его, как понимаю , можно создать под файл. Что касательно wordpress-seo/inc/sitemaps/class-sitemaps-renderer.php , то такого нет в премиум версии , есть только wordpress-seo/inc/class-sitemaps.php . Вы , как я понимаю, уже разобрались,что я не особо понимающий в этом деле и только исходя из этого обращаюсь за помощью. Спасибо большое за участие и если что-то сможете подсказать, прежде чем я попробую ваш метод , буду очень признателен!

  3. День добрый, Владимир. Результат не очень — сайт перестаёт отображаться и на белом экране эта надпись
    Parse error: syntax error, unexpected ‘return’ (T_RETURN) in /home/bpave748/public_html/wp-content/mu-plugins/yoast-seo-helper.php on line 14

    • это потому что при обновлении поста я часть сниппета случайно стер ,
      вот так попробуйте :

      < ?php
      /*
       * Plugin Name:       Yoast SEO Helper
       * Plugin URI:        https://alkoweb.ru/?p=1018
       * Version:           1.0.0
       * Author:            petrozavodsky
       * Author URI:        https://alkoweb.ru
       */
       
      add_filter(
          'wpseo_sitemap_url',
          function ($output, $url) {
              $output = preg_replace("']*?>.*?'si", '', $output);
              return $output;
          },
          10,
          2
      );
      

      должно получится.

  4. Теперь на странице одни цифры и буквы, вместо картинок,темы и всего остального. Что-то не так — может снова что-то вырезали?

  5. Верхняя часть, описывающая автора и остальное до фильтра — она обязательна? Если да,то как у вас определился такой урл плагина, если фактически он лежит по другому адресу? Возможно моя ошибка лежит в этом вопросе.

    • можно вобще удалить верхнюю часть и без нее должно работать
      можно так переписать:

      function wpseo_sitemap_url_helper ($output, $url) {
          $output = preg_replace("']*?>.*?'si", '', $output);
          return $output;
      },
      add_filter( 'wpseo_sitemap_url', 'wpseo_sitemap_url_helper', 10,  2 );
       

      Для большей совместимости со старыми версиями php особой разницы быть не должно.

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

  7. Чего-то его режет. В общем начинается так,как нужно — это видно на скрине. Даже не знаю,что ещё сделать нужно.

  8. Попробовал. В начале вроде ничего, не виден код, как ранее, но после того,как сбросил кэш, сайт перестал отображаться полностью — просто белый экран.

  9. создавал его в блокноте. из-за этого проблема,думаете? если есть ноуттпад++ — скопируйте,пожалуйста, туда и кидайте, я попробую выставить.

    • отключаем кеш на сайте открываем новое окно в браузере в режиме инкогнито, смотрим в вебмастере яндекса на какой сайт мап он ругался, допустим это
      https://site.ru/post-sitemap1.xml
      значит открываем в этой приватной вкладке такой url
      view-source:https://brodude.ru/post-sitemap1.xml
      ищем там такое image:image, для надежности искать через ctrl+f если его там нет то все нормально, нажимаем в вебмастере кнопку » пересканировать sitemap»
      Всё.

  10. Нажал перепроверку в яндексе — глянем результат, отпишусь. Ещё такой вопрос — как в категориях, при работающем ёсте, прописывать метатеги для каждой свои? С таким не сталкивались?

  11. Добрый день. Это дело у меня включено,но редактирования нет. Может где-то в таксономии ещё что-то нужно включить? Могу сделать скрин — у меня есть название, ярлык, родительская, описание, приоритет сайтмап, Change Frequency , Always include this category into sitemap , тип отображения и миниатюра. Больше ничего я редактировать не могу.

    • нет от шаблона ничего не зависит моет плагин нужно обновить до последней версии, а может премиум веся плагина хуже обычно и не умеет метатеги для таксономий либо это в платной версии где то в другом месте включается например во вкладке «архивы»

  12. Использую премиум плагин
    Пока все отлично работает
    Сейчас уведомлю яндекс и посмотрим дальше
    Спасибо

  13. На сайте плагина есть совет — добавить в фанкшн
    /* Remove Images From Yoast Sitemap */

    add_filter( 'wpseo_xml_sitemap_img', '__return_false' );
    

    А потом отключить и включить карту. И у меня все заработало

    • Вот и я искал.. искал.. А тут сам разработчик дает решение.

    • Объясните что надо сделать ?
      куда это добавлять?
      add_filter( ‘wpseo_xml_sitemap_img’, ‘__return_false’ );

  14. Что нужно делать с фильтром и куда его вставить?

    /* Remove Images From Yoast Sitemap */
    add_filter( ‘wpseo_xml_sitemap_img’, ‘__return_false’ );

    не нашел понятного объяснения на сайте плагина
    можете объяснить?

    • Здравствуйте, а можно с последним немного пояснить? Добавить в каталог wp-content/mu-plugins. Там где его добавить?
      Благодарю. С уважением

    • Появляется эта надпись над шапкой сайта. Сделал как вы сказали создал файл с расширением php и вставил в каталог wp-content/mu-plugins

      add_filter( ‘wpseo_xml_sitemap_img’, ‘__return_false’ );

  15. попробовал создать в каталоге wp-content/ каталог mu-plugins/
    в нем сделал файл RemoveImages.php
    в который поместил текст
    /* Remove Images From Yoast Sitemap */
    add_filter( ‘wpseo_xml_sitemap_img’, ‘__return_false’ );

    включил-выключил создание карты сайта. проверил что она создает, и получил ошибку
    ————————————————————————————
    This page contains the following errors:

    error on line 1 at column 1: Document is empty
    Below is a rendering of the page up to the first error.
    ———————————————————————————-

    что я сделал не так?

    • ты вставил в php файл
      add_filter( ‘wpseo_xml_sitemap_img’, ‘__return_false’ );

      а надо было как написал Роман
      add_filter( ‘wpseo_xml_sitemap_img’, ‘__return_false’ );

      P.S. обрати внимание на кавычки ;)

  16. Объяснять по человечески не умеете.

    Берём код
    <?php
    add_filter( 'wpseo_xml_sitemap_img', '__return_false' );

    Создаём любой .php файл, с любым названием, вставляем вышеназванный код в .php файл, загружаем его в site.ru/wp-content/mu-plugins

    Для проверки открываем свой сайтмап файл, например http://site.ru/post-sitemap.xml смотрим значения в столбце images, теперь они все 0, а без нашего .php файла у всех было значение 1 (это если удалить наш .php файл и выключить/включить сайтмап Yoast в админке)

  17. Сегодня типа была проверка, и Яндекс опять говорит что проблема не устранена, залил ваш Владимир файл, посмотрим как с ним будет. Иначе придётся sitemap менять.

  18. Лучше перебдеть, чем недобдеть, знаем мы эти Яндексы и их пессимизации, так что хоть рекомендация, хоть требование.

    И да, радуйся алкоголик, твой код, чо лежит в этой файле https://gist.github.com/petrozavodsky/b42f649139c7675aaf350a499393add3/archive/acf7a2b009273dfd93b1cd05b1dd3407a9ef5302.zip таки сработал, убралась эта рекомендация требование. (Юзать надо именно Yoast_SEO_twicks.php из архива)

    Всем спасибо, все свободны.

  19. Yoast_SEO_twicks.php — работает! гут! У кого не будет получаться — не надо никаких движений с кешом и страницами в режиме инкогнито))) — ОТКЛЮЧИТЕ формирование XML-карты в этом драном YOAST и затем опять включите — чудо произойдет!

  20. Роман же пишет добавить в факшен!
    Т.е. в файл functions.php вашей темы добавляем:

    /* Remove Images From Yoast Sitemap */
    add_filter( ‘wpseo_xml_sitemap_img’, ‘__return_false’ );

    Для тех, кто не знает верхняя строчка это просто комментарий к функции, чтобы вы помнили что это такое. Если хотите можете, например, написать:
    /* Удаление картинок из карты сайта от Yoast */
    или вообще не вставлять строку с комментарием.

    Ну, а так способ работает! Только что проверил на своём сайте. Всё ОК.

  21. Здравствуйте. Спасибо за статью. Ваш вариант кода лучше, потому что короткий, предложенный в комментариях, работает только в карте постов (post-sitemap.xml), а изображения в картах категорий и тегов ( /category-sitemap.xml /post_tag-sitemap.xml ) и прочих таксономиях продолжают создавать ошибки в Яндекс вебмастере.
    Ваш код исправляет и их.
    И как правильно заметили нужно после этого вкл/выкл карту сайта.

  22. Доброго времени суток.
    а не подскажете как избавиться от таких ошибок:
    Неизвестный тег video:width
    Неизвестный тег video:height
    видео карту генерирует тот же Yoast SEO
    видимо есть такого же плана (как описанные выше) решение этого вопроса, но пок анигде не нашёл как именно стоит действовать.

  23. Ну тогда понятно, у меня же этого дополнения нет. Если палцем в небо то как то так наверное как то так можно попробовать сделать:

    add_filter(
    	'wpseo_sitemap_url',
    	function (  $output, $url ) {
    		$output = preg_replace( "'<video:width[^>]*?>.*?'si", '', $output );
    		$output = preg_replace( "'<video:height[^>]*?>.*?'si", '', $output );
    
    		return  $output;
    	},
    	10,
    	2
    );
    
  24. неа, не работает. и надо ведь оба тэга убирать (открывающий и закрывающий) и их содержимое тоже.
    в исходном коде карты блок с видео выглядит так:

    Страховочный канат купить в Москве по лучшей цене — Канаты.ру
    2016-10-11T06:03:22+00:00
    Страховочный канат. Подробная информация о продукции и цены от Канаты.ру. Обращайтесь и узнавайте о скидках!
    https://www.youtube.com/embed/k6QpwKMpCzU
    https://kanaty.ru/wp-content/uploads/2016/10/k6qpwkmpczu.jpg
    643
    332576
    480
    270
    yes
    admin

    вот ссылка view-source:https://kanaty.ru/video-sitemap.xml
    т.е. убирать надо весь этот блок:
    480
    270
    но как сформулировать ума не приложу, не очень дружен с ВПшными функциями, чистым preg_replace тоже не выходит пока :(

  25. неа, не хочет убирать ширину и высоту, перепробовал разные варианты.
    может урл не так надо задвать, но я по-разному пробовал, результата нет.
    видимо стоит забить)

Добавить комментарий

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