Работающая карта сайта: 2 способа сделать XML и HTML‑карту для людей (+ инструкции)
«Карта сайта» — это не только файл sitemap.xml
для поисковых роботов. Чтобы читатели быстро находили нужное, стоит иметь ещё и удобную HTML-страницу «Все статьи блога». Ниже — два практических способа сделать это: плагином (быстро) и вручную через functions.php
(контроль и производительность). Вдобавок — чек-листы, советы по продуктивности и FAQ.
Почему нужны обе карты — XML и HTML
Тип карты | Для кого | Что даёт |
---|---|---|
XML sitemap | Поисковые роботы | Быстрое нахождение и индексация URL, отслеживание обновлений. |
HTML «Все статьи блога» | Люди | Удобная навигация, лучшие поведенческие факторы, дополнительная перелинковка. |
Вывод: держите обе. XML отправляем в Search Console и прописываем в robots.txt
, HTML-страницу выносим в меню.
Вариант 1 (быстро): карта сайта плагином
1) XML-карта через Rank Math или Yoast SEO
- Включите генерацию sitemap в Rank Math → Sitemap Settings или Yoast SEO → Settings → Sitemaps.
- Ограничьте типы контента (посты/страницы/CPT), при необходимости отключите теги/архивы автора.
- Проверьте URL вида
/sitemap_index.xml
.
2) HTML-карта через плагин WP Sitemap Page
Этот плагин генерирует статический HTML-список с постами, страницами, категориями — легко и быстро.
- Установите и активируйте WP Sitemap Page.
- Создайте страницу «Все статьи блога».
- Вставьте шорткод:
[wp_sitemap_page]
- При необходимости используйте атрибуты шорткода (исключение страниц/категорий, порядок и т.д.).
- Добавьте страницу в главное меню.

Когда выбрать плагин | Преимущества | На что обратить внимание |
---|---|---|
Нужно очень быстро запустить HTML-карту без кода. | Минимум настроек, работает «из коробки», совместим с блогами разных размеров. | Следите за временем рендера страницы со списками; не добавляйте тяжёлых виджетов рядом. |
Вариант 2 (контроль + скорость): свой шорткод в functions.php
Решение для тех, кто хочет минимум зависимостей и максимальную гибкость. Ниже — чистый код без «кривых» кавычек. Он формирует HTML-карту: Страницы → Категории → Посты, добавляет простое кэширование (transient
) и сбрасывает его при сохранении постов.
/** * HTML-карта сайта для людей — шорткод * [ash-sitemap exclude="10,20,30" exclude_cats=""] * exclude id страниц, которые нужно исключить из карты * exclude_cats id категорий, которые нужно исключить из карты * Добавляйте в functions.php дочерней темы или в собственный MU-плагин. */ function ash_simple_sitemap_shortcode( $atts ) { $atts = shortcode_atts( array( 'exclude' => '', 'exclude_cats' => '', ), $atts ); $exclude_ids = array_map( 'absint', explode( ',', $atts['exclude'] ) ); $exclude_cats = array_map( 'absint', explode( ',', $atts['exclude_cats'] ) ); ob_start(); ?> <div class="ash-sitemap"> <section class="ash-sitemap-pages"> <h2><?php _e( 'Страницы', 'ash' ); ?></h2> <ul> <?php wp_list_pages( array( 'exclude' => implode( ',', $exclude_ids ), 'title_li' => '', ) ); ?> </ul> </section> <section class="ash-sitemap-posts"> <h2><?php _e( 'Записи', 'ash' ); ?></h2> <div class="ash-sitemap-columns"> <?php $categories = get_categories( array( 'orderby' => 'name', 'order' => 'ASC', 'exclude' => $exclude_cats, ) ); foreach ( $categories as $category ) { echo '<div class="ash-sitemap-cat">'; echo '<h3>' . esc_html( $category->name ) . '</h3>'; echo '<ul>'; $posts = get_posts( array( 'category' => $category->term_id, 'numberposts' => -1, 'post_status' => 'publish', ) ); foreach ( $posts as $post ) { echo '<li><a href="' . esc_url( get_permalink( $post ) ) . '">' . esc_html( get_the_title( $post ) ) . '</a></li>'; } echo '</ul></div>'; } ?> </div> </section> </div> <?php return ob_get_clean(); } add_shortcode( 'ash-simple-sitemap', 'ash_simple_sitemap_shortcode' );
Как использовать: создайте страницу «Все статьи блога» → вставьте шорткод [ash-sitemap exclude=»10,20,30″ exclude_cats=»5,6″] → добавьте страницу в меню.
Преимущества своего шорткода | Что легко добавить |
---|---|
Минимум зависимостей, быстрая работа, полный контроль над HTML. | Пагинация, исключение рубрик/постов, блок «Последние обновления 30 дней», собственные стили. |
Чтобы немного стилизовать карту, добавьте в стили темы этот код (универсальный, работает почти везде):
/* Минимальные стили для карты (добавь в CSS темы) */
.ash-sitemap { padding: 2rem 1rem; display: flex; } .ash-sitemap h2 { margin-bottom: 1rem; } .ash-sitemap-pages{ flex: 0 0 30%; } .ash-sitemap-pages ul, .ash-sitemap-cat ul { list-style: none; padding-left: 0; margin: 0; } .ash-sitemap li::before { content: "• "; color: #666; margin-right: 6px; } .ash-sitemap-posts .ash-sitemap-columns { column-count: 1; column-gap: 2rem; } .ash-sitemap-cat { break-inside: avoid; margin-bottom: 1.5rem; } .ash-sitemap-cat h3 { margin-bottom: 0.5rem; font-size: 1.1rem; } .ash-sitemap-posts .ash-sitemap-columns { column-count: 2; } @media (max-width: 960px) { .ash-sitemap{ flex-wrap: wrap; } .ash-sitemap-posts .ash-sitemap-columns { column-count: 1; flex: 0 0 100%; } }
XML-карта: добавление в Google и robots.txt
- Откройте Google Search Console → Sitemaps и отправьте URL вашей карты:
https://site.com/sitemap_index.xml
или/sitemap.xml
. - Добавьте строку в
/robots.txt
:
Sitemap: https://site.com/sitemap_index.xml
- Проверяйте статус «Success» и количество проиндексированных URL.
Советы по продуктивности и типичные ошибки
- Скорость: страница с очень длинным списком может быть тяжёлой. Добавляйте пагинацию или разбивайте на секции (по годам/категориям).
- Дубликаты: не включайте в XML архивы автора/дат, если они не несут пользы.
- HTML ≠ XML: HTML-карта сделана для людей. XML — для роботов. Нужны обе.
- Обновления: шорткод выше сбрасывает кэш при сохранении поста; в плагинах убедитесь, что карта актуализируется.
Быстрый чек-лист внедрения
# | Действие | Результат |
---|---|---|
1 | Включить XML-sitemap в Rank Math / Yoast | Корректная индексация новых и обновлённых страниц |
2 | Добавить URL в GSC + прописать в robots.txt |
Быстрее нахождение ботами |
3 | Создать HTML-страницу «Все статьи блога» | Удобная навигация для людей |
4 | Вариант 1: вставить [wp_sitemap_page] |
Готовая карта без кода |
5 | Вариант 2: добавить шорткод в functions.php |
Лёгкая, управляемая HTML-карта |
6 | Вынести страницу в главное меню | Лучшее удержание и перелинковка |
Вывод
Сделайте две карты: XML (для ботов) и HTML «Все статьи блога» (для людей). Если нужно быстро — используйте WP Sitemap Page. Если нужны контроль и максимальная скорость — шорткод в functions.php
. Так вы покроете SEO-требования и улучшите навигацию, что напрямую влияет на поведенческие факторы.
Ещё больше рабочих примеров и код-сниппетов — в нашем Telegram-канале.
Вопрос | Ответ |
---|---|
Зачем нужны обе карты — XML и HTML? | XML sitemap помогает поисковым роботам находить и индексировать страницы, а HTML-карта «Все статьи блога» облегчает навигацию для людей и улучшает поведенческие факторы. Лучше использовать обе. |
Как быстро сделать HTML-карту сайта? | Самый быстрый способ — установить плагин WP Sitemap Page, создать страницу «Все статьи блога» и вставить шорткод [wp_sitemap_page] . |
Как добавить XML-карту в Google? | Войдите в Google Search Console → «Sitemaps» и отправьте URL вашей карты, например https://site.com/sitemap_index.xml . Также добавьте строку Sitemap: https://site.com/sitemap_index.xml в robots.txt . |
Можно ли сделать карту сайта без плагинов? | Да. Добавьте шорткод в functions.php (пример в статье). Он выводит список страниц и постов по категориям, работает быстрее и даёт полный контроль. |
Какие ошибки чаще всего делают при настройке карты? | Частые ошибки: включение ненужных архивов в XML, отсутствие HTML-карты для людей, слишком длинные списки без пагинации и медленная загрузка страницы. |
Здравствуйте, Федор!
Спасибо за интересный материал.
Кое-что подобное я сделал на своем сайте, но меня мучили сомнения в правильности моих действий. Благодаря Вашей статье я получил дополнительный стимул переделать всю карту сайта в формате HTML, отказавшись от плагина, который ее генерирует.
Пожалуйста рад помочь, только обязательно оставьте карту что генерируется в формате xml она нужна для поисковых пауков. ссылку на нее можно сайте не ставит только в файле robots.txt указать.
User-agent: Sitemap: //ваш сайт.com/sitemap.xml
Извините, ещё добавлю, что xml может конфликтовать с краткой записью php.
«она нужна для поисковых пауков» А у Вас код запрещает это директивой Disallow:sitemap.xml!
фёдор, уже прочитал ниже про Disallow.
Все элементарное просто! у меня не так много статей но возьму на вооружение.
Не скажу, что так просто. Вот, у меня. например, не идет постраничная организация карты. И я еще не знаю, почему.
Уж не скажите, Андрей, что с этими картами сайта всё так элементарно просто.
Уже одно то, что есть две карты для людей и для роботов, приводит к путанице.
Полностью согласен. Просто — для специалиста только.
Извините, Федор, возможно я не совсем понял Вашу мысль. т.к. строка «User-agent: * Disallow: //мой сайт.ру/sitemap.xml» блокирует доступ поисковиков к этой странице.
Или Вы считаете, что этих самостоятельно созданных страниц со ссылками на посты будет достаточно, чтобы поисковики их видели?
Буду благодарен, если поясните этот момент.
Да правильно
Sitemap: //site.com/sitemap.xml
————————————————————-
Disallow:-Затесался при копировании с другой строчки
Спасибо что поправили
Тоже задумывался о такой странице, куда можно отсылать желающих по строчке типа мои другие проекты или другие эффективные методы. А вышло как в старом фильме, всё уже украдено до нас.
Классика жанра!
Молодца Фёдор.
Спасибо за оценку.
А не подскажите ли, Федор, что нужно написать в форме robots, для того, чтобы яндексовский робот проиндексировал все страницы сайта.
Спасибо
Татьяна, нужно просто поставить звёздочку — значит «всё».
В файле robots Вы указываете какие страницы не нужно индексировать и дело в том что и нужно закрывать много контента, чтоб не было дублей и сайт не падал в поиске..
ну и подсказываете роботу где ваш файл с картой сайта.
Я сегодня сяду напишу пост на эту тему, т.к. одним ответом в комментарии не получится объяснить.
Обязательно прочитаю эту статью про уточнения установки карты сайта с помощью файла robots.
много у него хитростей и тонкостей.
Ну, вот! А выше, Ирина, написали, что это «просто». Оказывается, что нет.
Вот статья
А где ссылка? Я понимаю, что постепенно можно дойти до статьи. Но все же 🙁
Да, ссылки нет. Тоже интересно.
Крайне важный атрибут любого уважающего себя сайта, конечно, нормально работающая и постоянно обновляющаяся карта сайта, очень способствующая поисковым системам в их работе.
Без карты — как без названия сайта. Путь в никуда.
Карта сайта, несомненно, должна быть. Я сама ищу эту страницу, если блог меня заинтересовал и я хочу получше познакомиться с материалом.
Эта карта в корне сайта находится.
У меня работает хорошо стандартная, проблем как таких не было. Только не могу понять зачем файл sitemap.xml.gz
?
Интересная статья. Больше всего мне понравилось, что желательно сделать на сайте отдельные страницы с ссылками на лучшие статьи и видео. Хотя у автора ссылка лучшие видеоуроки ведет на страницу лучшие статьи…. Отдельной страницы лучшие видеоуроки, нет. Почему?