Кратко: ЧПУ (человекопонятный URL) — это адрес вида /chpu-wordpress-nastroyka-ssylok/ вместо /?p=123. Человек и поисковик сразу понимают, о чём страница, а адрес можно продиктовать по телефону. В WordPress структура ссылок задаётся в разделе «Настройки → Постоянные ссылки», а физическую маршрутизацию выполняет файл .htaccess на Apache или директивы rewrite на Nginx. Рабочий вариант для большинства сайтов — короткая стабильная структура /%postname%/. Если вы меняете ссылки на живом сайте, обязательно настройте 301-редиректы со старых адресов, иначе потеряете позиции и трафик. Ниже — настройка по шагам, готовые правила .htaccess и Nginx, свои rewrite-правила с кодом, таблица редиректов и типичные ошибки новичков.
Что такое ЧПУ и почему адрес страницы важен
ЧПУ расшифровывается как «человекопонятный URL». Это адрес страницы, собранный из осмысленных слов, а не из цифр и знаков вопроса. Сравните два варианта одной и той же записи:
https://site.ru/?p=1387
https://site.ru/kak-nastroit-chpu-wordpress/ Первый адрес ничего не говорит ни человеку, ни поисковому роботу. Второй сразу отвечает на вопрос «о чём эта страница» — и в строке браузера, и в выдаче Яндекса или Google. Именно поэтому правильные ЧПУ — это не косметика, а базовая часть SEO.
Что дают человеко-понятные ссылки на практике:
- Ключевое слово в адресе. Если в URL есть «chpu-wordpress», это дополнительный сигнал релевантности. Влияние небольшое, но бесплатное.
- Читаемость в выдаче. В сниппете поисковик часто показывает адрес. Понятный URL повышает доверие и кликабельность.
- Удобство для людей. Ссылку можно продиктовать, запомнить, скопировать без обрезки. Это важно для соцсетей и мессенджеров.
- Чистая аналитика. В Яндекс Метрике отчёт по страницам читается глазами: видно, какая статья приносит трафик, без расшифровки ID.
По умолчанию «из коробки» WordPress отдаёт как раз некрасивые ссылки с ID. Задача этой статьи — превратить их в ЧПУ и заодно понять, что происходит внутри: как тема, ядро и сервер договариваются, какой материал показать по запрошенному адресу.
Как в WordPress устроены постоянные ссылки
Внутри WordPress есть таблица wp_posts, где у каждой записи хранится поле post_name — это и есть слаг, «хвост» ссылки. А ещё есть настройка permalink_structure, которая лежит в таблице wp_options. Она описывает шаблон адреса: какие части и в каком порядке подставлять.
Когда к сайту приходит запрос на адрес вида /kak-nastroit-chpu/, сервер (Apache или Nginx) должен понять: это не реальный файл на диске, а запрос к CMS. Для этого в дело вступает перезапись URL — mod_rewrite. Все адреса «вида ЧПУ» аккуратно отправляются в index.php, а дальше WordPress сам разбирает строку и решает, что показать.
Схема выглядит так:
- Браузер запрашивает
https://site.ru/kak-nastroit-chpu/. - Apache по правилу из
.htaccessпереадресует запрос наindex.php, не меняя адрес в строке браузера. - Ядро WordPress парсит строку запроса и сопоставляет её с правилами перезаписи (rewrite rules).
- Находится подходящая запись, формируется объект
WP_Query, выбирается шаблон темы и отдаётся HTML.
Ключевая мысль: ЧПУ — это «витрина», а настоящий маршрут обрабатывают правила перезаписи. Если правила устарели или .htaccess недоступен, вы получите 404 даже при корректной настройке в админке. Поэтому важно понимать обе части — и настройку структуры, и работу сервера. Как устроены запросы глубже, разобрано в статье про REST API WordPress для новичков.
Настройка ЧПУ по шагам: «Постоянные ссылки»
Самое простое начинается в админке. Зайдите в «Настройки → Постоянные ссылки» и выберите структуру. Для большинства сайтов оптимален вариант «Название записи» — это структура /%postname%/. Для блога с крупной рубрикацией иногда добавляют рубрику, но новичку лучше не усложнять.
Разберём доступные теги структуры, чтобы вы выбирали осознанно:
| Тег структуры | Что подставляет | Пример адреса | Когда использовать |
|---|---|---|---|
%postname% | Слаг записи | /kak-nastroit-chpu/ | Универсальный вариант, лучший для блога и услуг |
%post_id% | Числовой ID записи | /1387/ | Когда слаги постоянно меняются, а SEO не приоритет |
%category% | Слаг рубрики | /wordpress/chpu/ | Крупные тематические блоги с чёткой рубрикацией |
%year% / %monthnum% | Год и номер месяца | /2026/09/ | Новостные сайты, где важна дата |
%author% | Логин автора | /admin/kak-nastroit/ | Блоги с несколькими авторами (осторожно) |
%postname%.html | Слаг с расширением | /kak-nastroit-chpu.html | Если переносите старый статический сайт |
После выбора обязательно нажмите кнопку «Сохранить изменения». Это действие не только записывает настройку, но и сбрасывает кэш правил перезаписи — WordPress заново их пересобирает. Если этого не сделать, новые адреса могут не работать, пока правила не обновятся.
Пара практических советов для структуры:
- Делайте слаги короткими: 2–4 слова, латиница, через дефис. Этот слаг вы задаёте в отдельном поле под заголовком записи.
- Не включайте в структуру даты, если контент не привязан ко времени: для «вечнозелёных» статей это лишний шум.
- Не используйте кириллицу в адресах, даже если WordPress её технически поддерживает: транслитерация надёжнее для ссылок и аналитики.
- Не меняйте структуру «ради красоты» на работающем сайте без редиректов — об этом отдельный раздел ниже.
.htaccess и mod_rewrite: что делает Apache
На классическом хостинге веб-сервером чаще всего работает Apache. Файл .htaccess лежит в корне сайта, начинается с точки и выполняет роль локального конфигуратора: в нём хранятся правила перезаписи адресов. WordPress при сохранении «Постоянных ссылок» сам записывает туда нужный блок — но только если файл доступен для записи.
Базовый блок, который WordPress добавляет в .htaccess, выглядит так:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress Разберём по строкам, что здесь происходит:
RewriteEngine On— включает движок перезаписи.RewriteBase /— говорит, что сайт живёт в корне домена. Если WordPress установлен в подпапку, тут будет/папка/.RewriteCond %{REQUEST_FILENAME} !-f— условие «если запрошенный файл не существует физически».RewriteCond %{REQUEST_FILENAME} !-d— условие «и если это не существующая директория».RewriteRule . /index.php [L]— тогда отправляем всё вindex.phpи прекращаем обработку ([L]).
Логика проста: реальные файлы (картинки, CSS, JS из темы) отдаются как есть, а всё остальное — «красивый» адрес — уходит в ядро WordPress на разбор. Именно поэтому прямые ссылки на изображения работают, а ссылки на статьи обрабатывает PHP.
Две частые проблемы, с которыми сталкиваются новички:
- Нет прав на запись. Если файл
.htaccessзащищён от записи, WordPress покажет подсказку «нужно вставить правила вручную». Можно скопировать блок выше и добавить его самостоятельно через файловый менеджер хостинга. - Модуль mod_rewrite выключен. Тогда ЧПУ вообще не работают, и никакие настройки в админке не помогут — нужно включить модуль или обратиться в поддержку хостинга.
Важный совет по безопасности: никогда не редактируйте .htaccess вслепую. Сначала сохраните копию файла, потом правьте. Сломанный .htaccess отдаёт «500 Internal Server Error» на весь сайт. Основы закрепления сайта от таких сбоев разобраны в статье про безопасное обновление WordPress.
Nginx вместо .htaccess: правила rewrite
Многие современные хостинги и высоконагруженные проекты работают на Nginx. У этого сервера другая логика конфигурации: он не читает файл .htaccess вообще, а все правила задаются в основном конфиге сайта (например, в панели хостинга или файле вида /etc/nginx/sites-available/site.ru). Если перенести сайт с Apache на Nginx и ничего не настроить, ЧПУ перестанут работать — будут 404.
Эквивалент правила из WordPress для Nginx выглядит так:
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
} Ключевая строка — try_files $uri $uri/ /index.php?$args;. Она читается так: «попробуй отдать реальный файл, потом директорию, а если ничего нет — передай запрос в index.php вместе с параметрами». Это и есть аналог правил .htaccess для Nginx.
Часто к этому добавляют правило для REST API и админки, чтобы запросы не ломались:
location ~ ^/(wp-admin|wp-json|wp-login\.php) {
try_files $uri $uri/ /index.php?$args;
} Что важно помнить про Nginx:
- Правила правятся не в файле сайта, а в конфиге сервера — обычно через панель хостинга или тикет в поддержку, не через FTP.
- После изменений конфиг нужно проверить командой
nginx -tи только потом перезагрузить серверsystemctl reload nginx. Иначе рискуете уронить все сайты на сервере. - Если вы на shared-хостинге, у вас, скорее всего, всё равно Apache «под капотом», и
.htaccessработает — уточните это в поддержке, прежде чем что-то менять.
Как связать Nginx с Кэшем и статикой для скорости, разобрано в материале про кэширование WordPress для новичков.
Свои правила переписывания: add_rewrite_rule и query vars
Иногда стандартных адресов мало. Например, вы хотите, чтобы страница поиска по каталогу была не /?s=товар, а /search/товар/, или чтобы ссылка на профиль автора была /master/ivan/. Для этого WordPress даёт функции add_rewrite_rule(), add_rewrite_tag() и механизм query vars.
Базовый пример: добавим красивый адрес /faq/, который отдаёт определённую страницу. Код добавляем в functions.php дочерней темы:
<?php
add_action( 'init', function () {
add_rewrite_rule(
'^faq/?$',
'index.php?page_id=128',
'top'
);
} ); Здесь ^faq/?$ — регулярное выражение, которое ловит адрес /faq/. Параметр 'top' означает, что правило ставится выше стандартных, чтобы не конфликтовать с другими адресами.
Более сложный вариант — свой шаблон ссылки с переменной. Зарегистрируем «паспорт» запроса через query var и поймаем адрес /master/ivan/:
<?php
add_filter( 'query_vars', function ( $vars ) {
$vars[] = 'master';
return $vars;
} );
add_action( 'init', function () {
add_rewrite_rule(
'^master/([^/]+)/?$',
'index.php?master=$matches[1]',
'top'
);
} ); А теперь важный момент, на котором спотыкаются почти все новички. После добавления нового правила его нужно один раз «сбросить», иначе оно не заработает. Правила перезаписи хранятся в базе, и без пересборки движок о них не знает. Сделать это можно двумя способами.
Способ первый — правильный, через хук активации темы (сброс выполняется один раз, а не на каждом запросе):
<?php
register_activation_hook( __FILE__, function () {
flush_rewrite_rules();
} );
add_action( 'after_switch_theme', function () {
flush_rewrite_rules();
} ); Способ второй — руками: зайти в «Настройки → Постоянные ссылки» и просто нажать «Сохранить изменения». Кнопка «Сохранить» на этой странице всегда пересобирает правила, даже если вы ничего не меняли. Это самый простой способ «починить» ЧПУ после правок кода.
⚠️ Никогда не вызывайте flush_rewrite_rules() на каждом запросе (например, прямо в теле функции без хука init). Это тяжёлая операция: она пишет в базу и пересчитывает все правила. На каждом запросе это заметно замедлит сайт. Сбрасывайте правила один раз — при активации темы или по кнопке в админке.
Кстати, если вам нужно вывести ссылку на такую страницу в шаблоне, используйте home_url() и функцию построения адреса — про них ниже. А как подключать код вообще, если вы правите тему, разобрано в гайде про дочернюю тему WordPress и в статье про хуки WordPress: actions и filters.
Смена структуры на живом сайте: редиректы 301
Это самый ответственный раздел. Пока сайт новый, менять структуру можно сколько угодно — поисковик ещё ничего не запомнил. Но если статьи уже проиндексированы и на них ведут ссылки, смена адресов без редиректов означает потерю трафика: старые ссылки начнут отдавать 404, а поисковик выкинет их из индекса.
Правило одно: каждой старой ссылке — постоянный (301) редирект на новую. Код 301 говорит поисковику «страница переехала навсегда, весь её вес передай на новый адрес». Сравните коды:
| Старый адрес | Новый адрес | Правило и код |
|---|---|---|
/?p=1387 | /kak-nastroit-chpu/ | 301, WordPress делает сам при смене структуры |
/2026/09/chpu/ | /chpu-wordpress/ | 301, вручную в .htaccess или плагином |
/staryj-sait-wordpress/ | /zakazat-sayt-na-wordpress/ | 301 через Redirect 301 в .htaccess |
/page2/ | /blog/page/2/ | 301, правило для пагинации |
Способов настроить редиректы несколько. Самый быстрый — плагин вроде Redirection: он ведёт журнал 404 и позволяет сопоставлять старые адреса с новыми. Для тех, кто предпочитает код, подойдёт правило в .htaccess:
Redirect 301 /staryj-sait-wordpress/ /zakazat-sayt-na-wordpress/ А если правило нужно гибкое — например, перенести целую группу адресов — используйте RewriteRule:
RewriteRule ^2026/09/(.*)$ /$1 [R=301,L] Или сделайте редирект на уровне PHP, прямо в шаблоне или через functions.php:
<?php
add_action( 'template_redirect', function () {
if ( is_page( 'contacts-old' ) ) {
wp_redirect( home_url( '/#contact' ), 301 );
exit;
}
} ); Три правила, которые уберегут от потери трафика:
- Сначала зафиксируйте список старых адресов (его можно выгрузить из sitemap или из отчёта Яндекса). Без списка вы обязательно что-то забудете.
- После смены структуры сразу отправьте новый XML-карта сайта (sitemap) для Яндекса и Google и проверьте индексацию.
- Не удаляйте старые адреса «наглухо»: 404 и 410 отдают сигнал «страницы нет», а 301 — «переехала». Для SEO это принципиально разные вещи.
Типичные ошибки: почему ЧПУ не работают и как чинить 404
Если после настройки ссылки отдают 404, а страницы не открываются, причина почти всегда в одном из пунктов ниже. Разберём по частоте.
- Правила перезаписи не сброшены. Самая частая причина. Откройте «Настройки → Постоянные ссылки» и нажмите «Сохранить изменения» — это пересоберёт правила.
- .htaccess недоступен для записи. WordPress не смог записать правила. Проверьте права файла или добавьте блок вручную.
- Не включён mod_rewrite на Apache. Тогда ЧПУ не заработают в принципе — нужна поддержка хостинга.
- Переезд с Apache на Nginx без правил. Nginx не читает
.htaccess; нуженtry_filesв конфиге. - Конфликт плагина. Плагин безопасности, кэша или мультиязычности может перехватывать запросы. Проверяется отключением плагинов по одному.
- Слаг занят. Если у записи и рубрики совпадает адрес, WordPress добавит
-2или отдаст 404. Проверяйте уникальность слагов. - Кэш страницы устарел. Плагин кэширования отдаёт старую версию. Сбросьте кэш после смены структуры.
- Неправильный RewriteBase. Если сайт в подпапке, а
RewriteBase /— ссылки сломаются. Должно бытьRewriteBase /ваша-папка/.
Быстрый чек-лист диагностики: сначала посмотрите .htaccess (есть ли блок WordPress), затем проверьте, включён ли mod_rewrite, затем нажмите «Сохранить» в «Постоянных ссылках», и только после этого ищите проблему в плагинах. А чтобы смена структуры не совпала с другой проблемой, полезно вести чистый список статей — экспорт и перенос данных разобраны в руководстве про импорт и экспорт в WordPress.
Полезные сниппеты для работы со ссылками
Небольшая шпаргалка функций и приёмов, которые пригодятся в каждом проекте. Это те мелочи, которые позволяют выводить ссылки правильно и не ломать адреса.
1. Правильный вывод ссылки на запись и на главную. Никогда не вписывайте домен руками — используйте функции, чтобы адрес оставался рабочим после переезда:
<?php
$link = get_permalink( get_the_ID() ); // без учёта параметров
the_permalink(); // сразу вывести в шаблоне
echo esc_url( home_url( '/' ) ); // главная страница
echo esc_url( home_url( '/blog/' ) ); // конкретный раздел
echo esc_url( get_category_link( 148 ) ); // ссылка на рубрику по ID 2. Добавление GET-параметра к ссылке. Функция add_query_arg() сама следит за разделителями — не нужно клеить строки вручную:
<?php
$url = add_query_arg( 'utm_source', 'vk', get_permalink() );
echo esc_url( $url ); 3. Проверка текущего адреса в шаблоне. Часто нужно подсветить активный пункт меню или вывести разные баннеры на разных страницах:
<?php
if ( is_singular( 'post' ) && has_category( 148 ) ) {
// это статья в категории «Разработка WordPress»
echo 'Материал для разработчиков';
} 4. Ссылка на архив автора и на страницу поиска. В отличие от ID, эти функции сами формируют корректный ЧПУ:
<?php
echo esc_url( get_author_posts_url( get_the_author_meta( 'ID' ) ) );
echo esc_url( get_search_link( 'wordpress' ) ); 5. JavaScript: читаем адрес и работаем с ним без перезагрузки. Полезно для фильтров каталога, которые строят ссылку на лету:
const url = new URL( window.location.href );
url.searchParams.set( 'sort', 'price' );
console.log( url.toString() ); // аккуратный адрес с параметром 6. AJAX-ссылка с правильным адресом. Если подгружаете данные без перезагрузки, обратите внимание на адрес REST API и на передачу параметров:
fetch( '/wp-json/wp/v2/posts?categories=148&per_page=5' )
.then( res => res.json() )
.then( posts => console.log( posts.map( p => p.link ) ) ); Подробнее про такие запросы — в статье про AJAX в WordPress, а про манипуляции с URL через консоль — в гайде по REST API WordPress.
7. WP-CLI: сброс правил и структуры из терминала. На серверах с SSH это быстрее, чем ходить в админку:
wp rewrite flush --hard
wp option update permalink_structure '/%postname%/' Команда wp rewrite flush --hard не только пересобирает правила, но и перезаписывает .htaccess. После любого изменения структуры полезно выполнить её и проверить пару адресов вручную.
И последнее: если у вас сеть сайтов, где структура ссылок одна на всех, настройки и правила затрагивают всю инсталляцию — детали в материале про WordPress Multisite.

Частые вопросы о ЧПУ и ссылках WordPress
Что такое ЧПУ в WordPress и зачем они нужны?
ЧПУ — человекопонятный URL, собранный из слов вместо цифр и знаков вопроса: /kak-nastroit-chpu/ вместо /?p=123. Они нужны, чтобы адрес был понятен человеку и поисковику, содержал ключевое слово, легко копировался и читался в аналитике. В WordPress структура ссылок задаётся в разделе «Настройки → Постоянные ссылки».
Какую структуру постоянных ссылок выбрать для блога и магазина?
Для большинства сайтов оптимальна структура /%postname%/ («Название записи»): короткая, стабильная и с ключевым словом. Для крупных блогов иногда добавляют рубрику через %category%, но новичку лучше не усложнять. Главное — выбрать один вариант, сохранить его и не менять без 301-редиректов, иначе можно потерять позиции в поиске.
Почему после смены ЧПУ появляется 404 и как это исправить?
Чаще всего не сброшены правила перезаписи: откройте «Настройки → Постоянные ссылки» и нажмите «Сохранить изменения» — WordPress пересоберёт правила. Другие причины: .htaccess недоступен для записи, выключен mod_rewrite, конфликт плагина или устаревший кэш страницы. Проверяйте по порядку: .htaccess → mod_rewrite → сохранение настроек → плагины.
Нужно ли настраивать .htaccess вручную, если WordPress сделал это сам?
Обычно нет: при сохранении «Постоянных ссылок» WordPress сам записывает нужный блок в .htaccess, если файл доступен для записи. Вручную правила добавляют, когда файл защищён от записи или когда нужны свои редиректы. Перед правкой всегда делайте копию — сломанный .htaccess отдаёт ошибку 500 на весь сайт.
Как сделать 301-редиректы со старых ссылок на новые?
Самый быстрый способ — плагин вроде Redirection с журналом 404. Через код подойдёт правило Redirect 301 в .htaccess, правило RewriteRule для группы адресов или функция wp_redirect( home_url( ‘/new/’ ), 301 ) на хуке template_redirect. Всегда ведите список старых адресов и после переезда отправляйте новый sitemap в Яндекс и Google.
Заменяет ли ЧПУ SEO-плагин и нужен ли он вообще?
Нет, это разные вещи. ЧПУ — это структура адресов в ядре WordPress, а SEO-плагин (Rank Math или Yoast) управляет мета-тегами, sitemap, robots и микроразметкой. Они работают вместе: сначала настраивают постоянные ссылки, потом метаданные и карту сайта. Подробнее — в статье про настройку SEO-плагина для WordPress.
Вывод
ЧПУ — это фундамент, на котором держится вся навигация сайта. Правильные адреса понятны людям, дают поисковику дополнительный сигнал и упрощают аналитику. Настроить их несложно: выбрать структуру в «Постоянных ссылках», сохранить её, убедиться, что .htaccess или Nginx-правила на месте. Сложнее — менять ссылки на живом проекте: здесь без 301-редиректов и обновлённого sitemap не обойтись.
Запомните три главных правила. Первое: однажды выбрав структуру, старайтесь её не менять — стабильные адреса это актив. Второе: перед любой правкой .htaccess делайте копию, а после смены настроек жмите «Сохранить» в «Постоянных ссылках». Третье: свои правила переписывания сбрасывайте один раз через активацию темы, а не на каждом запросе.
Если вы только начинаете, не усложняйте: /%postname%/, корректный SEO-плагин Rank Math или Yoast и понятные слаги закроют 95% задач. А дальше — развитие: настройка меню и навигации, кастомные шаблоны страниц и контактные формы — всё это опирается на те же ссылки.
Мы в Делай Сайт разрабатываем сайты на WordPress под ключ: настраиваем структуру, ЧПУ, редиректы и техническое SEO так, чтобы сайт был удобен и людям, и поисковикам. Посмотрите услуги разработки и поддержки WordPress, изучите портфолио выполненных проектов и почитайте блог о разработке и продвижении. Обсудить проект и заказать сайт на WordPress под ключ можно через форму контактов — подскажем, как выстроить структуру ссылок правильно с самого старта.



