У замечательного плагина для WordPress он называется SEO by Yoast или даже иногда WordPress-seo плагин, хороший самый известный и стал уже стандартом де факто в своей нише. Но как обычно у него нашелся один фатальный недостаток (известная шутка) но проблема связана не с плагином, а с Яндексом об этом далее и пойдет речь.
Сут поста описать следующем образом, зарегистрировавшись в сервисе для вебмастеров от яндекса — webmaster.yandex.ru появился один интересный инструмент который призван показать возможные проблемы в индексации сайта, он проверяет многие аспекты в том числе SitemapXML сайта и если у вас карта сайта создается при помощи плагина 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) .
Если такой строки не нашлось значит у нас все получилось, нажимаем в вебмастере кнопку «проверить»
P.S. как подсказали в комментариях есть способ проще
add_filter( 'wpseo_xml_sitemap_img', '__return_false' );
UPD: Евгений в комментария пишет что первый вариант кода тоже имеет свои плюсы, думаю можно поверить ему на слово.
Приветствую, Владимир. Для меня данная проблема тоже весьма актуальна. У меня премиум версия плагина 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. можно сравнить с премиум.
Спасибо большое за ответ. У меня нет каталога wp-content/mu-plugins/ , но его, как понимаю , можно создать под файл. Что касательно wordpress-seo/inc/sitemaps/class-sitemaps-renderer.php , то такого нет в премиум версии , есть только wordpress-seo/inc/class-sitemaps.php . Вы , как я понимаю, уже разобрались,что я не особо понимающий в этом деле и только исходя из этого обращаюсь за помощью. Спасибо большое за участие и если что-то сможете подсказать, прежде чем я попробую ваш метод , буду очень признателен!
могу сказать что возможно фильтр wpseo_sitemap_url гдеп нибудь в другом файле расположен в премиум версии , а так пробуйте, и поделитесь результатами в комментариях если не трудно.
День добрый, Владимир. Результат не очень — сайт перестаёт отображаться и на белом экране эта надпись
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 особой разницы быть не должно.
попробовал — этот код отображается вверху любой страницы в теме. посмотрел в опере — страница первый раз отображается цифрами и буквами, после перегрузки появляется тема и остальное, но код виден тоже вверху.
очень странно , скрин требуется, так не понять
Скрин не прикрепляется в форму комментария. Мне его прикрепить где?
Например в Яндекс диск загрузить можно , а тут ссылку
https://yadi.sk/i/g9IyA_vgxrwDo код будет виден сверху под панелью админа. если присмотреться, на чёрном фоне.
Полагаю файл плагина не начинается с < ?php
если да то нужно добавить
https://yadi.sk/i/AcOK0sY0xstGz — так и начинается. Может закрываю не правильно? Вот код, который я размещаю в файле
.*?’si», », $output);
return $output;
},
add_filter( ‘wpseo_sitemap_url’, ‘wpseo_sitemap_url_helper’, 10, 2 );
.*?’si», », $output);
return $output;
},
add_filter( ‘wpseo_sitemap_url’, ‘wpseo_sitemap_url_helper’, 10, 2 );
Чего-то его режет. В общем начинается так,как нужно — это видно на скрине. Даже не знаю,что ещё сделать нужно.
ну вот еще гист сделал https://gist.github.com/petrozavodsky/b42f649139c7675aaf350a499393add3
Попробовал. В начале вроде ничего, не виден код, как ранее, но после того,как сбросил кэш, сайт перестал отображаться полностью — просто белый экран.
Возможно идёт конфликт с каким-то из плагинов?
Нет конфликтовать не может , что то неправильно делаете , ну и Кеш нужно чистить
начинаются строки с начала, либо нужно отступ делать — этот момент важен и влияет на что-то?
Это не важно
https://yadi.sk/i/0gGea7TBxtdJB — вот мой файл. Посмотрите,что не так я делаю, пожалуйста.
Вроде все нормально а куда вы его загружаете ? mu-plugins?
у файла расширение php без txt ?
создавал его в блокноте. из-за этого проблема,думаете? если есть ноуттпад++ — скопируйте,пожалуйста, туда и кидайте, я попробую выставить.
вот https://gist.github.com/petrozavodsky/b42f649139c7675aaf350a499393add3/archive/acf7a2b009273dfd93b1cd05b1dd3407a9ef5302.zip тут в архиве будет один файл если его залить все должно заработать ест нет то проблема не знаю в чем, нужно смотреть разбираться …
поставил. вроде всё нормально. как проверить — помогает он,или нет?
отключаем кеш на сайте открываем новое окно в браузере в режиме инкогнито, смотрим в вебмастере яндекса на какой сайт мап он ругался, допустим это
https://site.ru/post-sitemap1.xml
значит открываем в этой приватной вкладке такой url
view-source:https://brodude.ru/post-sitemap1.xml
ищем там такое image:image, для надежности искать через ctrl+f если его там нет то все нормально, нажимаем в вебмастере кнопку » пересканировать sitemap»
Всё.
Нажал перепроверку в яндексе — глянем результат, отпишусь. Ещё такой вопрос — как в категориях, при работающем ёсте, прописывать метатеги для каждой свои? С таким не сталкивались?
все просто идем на страничку http://site.gov/wp-admin/admin.php?page=wpseo_titles#top#taxonomies под заголовком «Рубрики» есть здоровый фиолетовый переключатель «Yoast SEO meta box» вот его если включить то потом при редактировании категории в ней появится такая же форма добавления метатегов как в обычных постах
Добрый день. Это дело у меня включено,но редактирования нет. Может где-то в таксономии ещё что-то нужно включить? Могу сделать скрин — у меня есть название, ярлык, родительская, описание, приоритет сайтмап, Change Frequency , Always include this category into sitemap , тип отображения и миниатюра. Больше ничего я редактировать не могу.
ну значит нужен скрин
Я включил везде и все Yoast SEO meta box и в таксономии и в типах записей, но нет редактирования. Может код не правильный у меня стоит в самом плагине? https://yadi.sk/i/5NCZ4bkqxw3B6
Я имею ввиду, что может не тот шаблон названия, либо нужно добавить шаблон описания.
нет от шаблона ничего не зависит моет плагин нужно обновить до последней версии, а может премиум веся плагина хуже обычно и не умеет метатеги для таксономий либо это в платной версии где то в другом месте включается например во вкладке «архивы»
в архивах таких кнопок вообще нет. а в таксономии и в типах записей я всё включил.
ну тогда я не знаю , в обычном все проще , может у их техподехки стоит спросить
Использую премиум плагин
Пока все отлично работает
Сейчас уведомлю яндекс и посмотрим дальше
Спасибо
У Павла старая версия премиум плагина
На сайте плагина есть совет — добавить в фанкшн
/* Remove Images From Yoast Sitemap */
А потом отключить и включить карту. И у меня все заработало
Проверю , это выглядит ещё лучше
да все все верно можно и так , так даже лучше
Вот и я искал.. искал.. А тут сам разработчик дает решение.
Объясните что надо сделать ?
куда это добавлять?
add_filter( ‘wpseo_xml_sitemap_img’, ‘__return_false’ );
Что нужно делать с фильтром и куда его вставить?
/* Remove Images From Yoast Sitemap */
add_filter( ‘wpseo_xml_sitemap_img’, ‘__return_false’ );
не нашел понятного объяснения на сайте плагина
можете объяснить?
в какой нибудь файлик с расширением php и в каталог wp-content/mu-plugins
Благодарю))
Здравствуйте, а можно с последним немного пояснить? Добавить в каталог wp-content/mu-plugins. Там где его добавить?
Благодарю. С уважением
Если каталога mu-plugins не существует то нужно его создать , после создать в нем любой файл с расширением .php и в него вставить код
Появляется эта надпись над шапкой сайта. Сделал как вы сказали создал файл с расширением php и вставил в каталог wp-content/mu-plugins
add_filter( ‘wpseo_xml_sitemap_img’, ‘__return_false’ );
Смотреть ниже
попробовал создать в каталоге 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. обрати внимание на кавычки ;)
Файл в который это вставлялось начинался с открывающего php тега ?
Объяснять по человечески не умеете.
Берём код
<?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 в админке)
ну если так будет понятней , то пусть так
Сегодня типа была проверка, и Яндекс опять говорит что проблема не устранена, залил ваш Владимир файл, посмотрим как с ним будет. Иначе придётся sitemap менять.
Так это рекомендация а не требование , даже если останется ничего плохого а произойдёт
Лучше перебдеть, чем недобдеть, знаем мы эти Яндексы и их пессимизации, так что хоть рекомендация, хоть требование.
И да, радуйся алкоголик, твой код, чо лежит в этой файле https://gist.github.com/petrozavodsky/b42f649139c7675aaf350a499393add3/archive/acf7a2b009273dfd93b1cd05b1dd3407a9ef5302.zip таки сработал, убралась эта рекомендация требование. (Юзать надо именно Yoast_SEO_twicks.php из архива)
Всем спасибо, все свободны.
Yoast_SEO_twicks.php — работает! гут! У кого не будет получаться — не надо никаких движений с кешом и страницами в режиме инкогнито))) — ОТКЛЮЧИТЕ формирование XML-карты в этом драном YOAST и затем опять включите — чудо произойдет!
Роман же пишет добавить в факшен!
Т.е. в файл functions.php вашей темы добавляем:
/* Remove Images From Yoast Sitemap */
add_filter( ‘wpseo_xml_sitemap_img’, ‘__return_false’ );
Для тех, кто не знает верхняя строчка это просто комментарий к функции, чтобы вы помнили что это такое. Если хотите можете, например, написать:
/* Удаление картинок из карты сайта от Yoast */
или вообще не вставлять строку с комментарием.
Ну, а так способ работает! Только что проверил на своём сайте. Всё ОК.
Подтверждаю в ФАКшен если засунуть работать будет
Здравствуйте. Спасибо за статью. Ваш вариант кода лучше, потому что короткий, предложенный в комментариях, работает только в карте постов (post-sitemap.xml), а изображения в картах категорий и тегов ( /category-sitemap.xml /post_tag-sitemap.xml ) и прочих таксономиях продолжают создавать ошибки в Яндекс вебмастере.
Ваш код исправляет и их.
И как правильно заметили нужно после этого вкл/выкл карту сайта.
А что Яндекс до сих пор не научился работать с этими изображениями????
Давно не поверял, может уже научился может нет
Доброго времени суток.
а не подскажете как избавиться от таких ошибок:
Неизвестный тег video:width
Неизвестный тег video:height
видео карту генерирует тот же Yoast SEO
видимо есть такого же плана (как описанные выше) решение этого вопроса, но пок анигде не нашёл как именно стоит действовать.
А нет ли случайно скриншотов проблемы ? Я в бесплатно версии yoast seo не нахожу таких строк, может быть у вас премиальная ?
вот скриншот https://prntscr.com/r25vnh
да, речь вот об этом дополнении к Yoast SEO https://yoast.com/wordpress/plugins/video-seo/
Ну тогда понятно, у меня же этого дополнения нет. Если палцем в небо то как то так наверное как то так можно попробовать сделать:
неа, не работает. и надо ведь оба тэга убирать (открывающий и закрывающий) и их содержимое тоже.
в исходном коде карты блок с видео выглядит так:
Страховочный канат купить в Москве по лучшей цене — Канаты.ру
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 тоже не выходит пока :(
блин, обрезался код в комменте, видимо у Вас свой редактор :)
view-source:https://kanaty.ru/video-sitemap.xml
это ссылка на карту, убирать надо оба тэга (width и height открывающий и закрывающий) и то, что внутри тоже)
Ну в таком случае так:
неа, не хочет убирать ширину и высоту, перепробовал разные варианты.
может урл не так надо задвать, но я по-разному пробовал, результата нет.
видимо стоит забить)
Так:
должно работать