YOAST WordPress SEO — ошибка 404 в XML Sitemaps

На одном из своих блогов, решил поставить, это, сейчас популярный и на самом деле очень хороший плагин: WordPress SEO от Yoast Team. И Вы знаете, он на самом деле хорош! Да, может не такой понятный как All In One SEO Pack, но во многом лучше него. Допустим, он может убирать эту не нужную категорию /category/ или заменить её на что-то иное. Так же, очень круто, что он сам добавляет к названиям URL страниц расширение .html! И он сам создает xml sitemap, но вот тут у меня не все так радужно получилось.

Казалось бы, что проще, есть функция, есть кнопочка, жми её, заходи на страницу карты сайта и добавляй этот адрес в Google и Яндекс. Но! Как оказалось при переходе на страницу xml-sitemap она выдавала ошибку 404! Что за дела?

Обновлено! Читать перед редактированием!

В комментариях к данному посту, пользователь kamar87 предложил очень простой и как оказалось реально действующий способ избавиться от данной проблемы без каких либо редактирований файлов! Вот его дословная цитата:

Ещё рабочий вариант без всяких редактирований файла!
Поле того как поставили галочку на «Отметьте этот пункт, чтобы включить XML карту сайта.» — сохраняем настройки. Переходим Настройки-Постоянные ссылки и просто нажимаем сохранить. Все!

По дальнейшим отзывам, всё на самом деле так просто! Поэтому выражаем ему благодарность и дальше пост НЕ читаем 😉

А для тех кто всё-таки хочет заморочиться, продолжим…

Как я понял, проблема как раз в конфликте карты сайта и настройки расширений .html

Как исправить ошибку 404 в sitemaps от YOAST SEO?

Первое что мы должны сделать, это зайти в наш .htaccess и добавить следующий код:

# WordPress SEO — XML Sitemap Rewrite Fix
RewriteEngine On
RewriteBase /
RewriteRule ^sitemap_index.xml$ /index.php?sitemap=1 [L]
RewriteRule ^locations.kml$ /index.php?sitemap=wpseo_local_kml [L]
RewriteRule ^geo_sitemap.xml$ /index.php?sitemap=geo [L]
RewriteRule ^([^/]+?)-sitemap([0-9]+)?.xml$ /index.php?sitemap=$1&sitemap_n=$2 [L]
RewriteRule ^([a-z]+)?-?sitemap.xsl$ /index.php?xsl=$1 [L]
# END WordPress SEO — XML Sitemap Rewrite Fix

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

RewriteRule ^sitemap_index.xml$ /index.php?sitemap=1 [L]
RewriteRule ^locations.kml$ /index.php?sitemap=wpseo_local_kml [L]
RewriteRule ^geo_sitemap.xml$ /index.php?sitemap=geo [L]
RewriteRule ^([^/]+?)-sitemap([0-9]+)?.xml$ /index.php?sitemap=$1&sitemap_n=$2 [L]
RewriteRule ^([a-z]+)?-?sitemap.xsl$ /index.php?xsl=$1 [L]

К уже существующему коду. А если у вас там есть строка: /IfModule, то код должен быть перед ней.

Если же при изменении .htaccess файл sitemap так же выдает ошибку 404, то надо лезть в код самого плагина и добавить там пару строк.

Заходим в:
/wp-content/plugins/wordpress-seo/inc/class-sitemaps.php

и где-то на 80 строке, перед строками:

/**
* Class constructor
*/

Вставляем следующий код:

/**
* Initialize sitemaps. Add sitemap rewrite rules and query var
*/
function init() {
global $wp_rewrite;
$GLOBALS[‘wp’]->add_query_var( ‘sitemap’ );
$GLOBALS[‘wp’]->add_query_var( ‘sitemap_n’ );
add_rewrite_rule( ‘sitemap_index\.xml$’, ‘index.php?sitemap=1’, ‘top’ );
add_rewrite_rule( ‘([^/]+?)-sitemap([0-9]+)?\.xml$’, ‘index.php?sitemap=$matches[1]&sitemap_n=$matches[2]’, ‘top’ );
$wp_rewrite->flush_rules();
}

Теперь, всё точно должно заработать!