wpnotes.ru wordpress WP Notes

Как изменить структуру URL в WordPress без плагинов

Структура URL — один из ключевых элементов SEO и удобства пользователей. В WordPress по умолчанию используется стандартная структура постоянных ссылок, которая может быть не всегда оптимальной для вашего сайта. В этой статье мы разберём, как изменить структуру URL без использования плагинов, используя встроенные возможности WordPress и минимальные настройки сервера.

Основы изменения структуры постоянных ссылок в WordPress

WordPress позволяет настроить структуру URL через панель администратора в разделе Настройки > Постоянные ссылки. Там вы можете выбрать один из предустановленных вариантов или задать собственный шаблон с помощью тегов.

Примеры тегов:

  • %postname% — название записи;
  • %category% — категория записи;
  • %year%, %monthnum%, %day% — дата публикации;
  • %author% — автор записи;
  • %post_id% — ID записи;
  • %custom_taxonomy% — пользовательская таксономия.

Например, структура /blog/%category%/%postname%/ сделает URL вида https://example.com/blog/news/novosti-sayta/.

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

Настройка структуры URL для пользовательских типов записей и таксономий

Если на сайте используются пользовательские типы записей (Custom Post Types, CPT) и таксономии, WordPress по умолчанию формирует URL на основе параметров, заданных при регистрации CPT. Чтобы изменить структуру URL, нужно корректно указать аргумент rewrite при регистрации.

Пример регистрации CPT с кастомной структурой URL:

function wpnotes_register_cpt_projects() {
    $args = array(
        'labels' => array(
            'name' => 'Проекты',
            'singular_name' => 'Проект',
        ),
        'public' => true,
        'has_archive' => true,
        'rewrite' => array('slug' => 'portfolio'), // Здесь меняем структуру URL
        'supports' => array('title', 'editor', 'thumbnail'),
    );
    register_post_type('projects', $args);
}
add_action('init', 'wpnotes_register_cpt_projects');

В этом примере записи типа projects будут доступны по URL /portfolio/название-записи/.

Аналогично можно настроить пользовательские таксономии:

function wpnotes_register_taxonomy_skills() {
    $args = array(
        'labels' => array(
            'name' => 'Навыки',
            'singular_name' => 'Навык',
        ),
        'public' => true,
        'rewrite' => array('slug' => 'skills'),
        'hierarchical' => true,
    );
    register_taxonomy('skills', 'projects', $args);
}
add_action('init', 'wpnotes_register_taxonomy_skills');

После внесения изменений в регистрацию CPT или таксономий необходимо обновить правила перезаписи (rewrite rules), чтобы WordPress «запомнил» новые URL. Для этого достаточно перейти в админке в Настройки > Постоянные ссылки и нажать «Сохранить изменения» без внесения правок.

Использование фильтров для тонкой настройки структуры URL

Если стандартных настроек недостаточно, можно использовать фильтры WordPress для изменения части URL программно.

Например, чтобы убрать базу таксономии из URL, можно применить фильтр term_link:

function wpnotes_remove_taxonomy_base($url, $term, $taxonomy) {
    if ($taxonomy === 'category') {
        $url = str_replace('/category/', '/', $url);
    }
    return $url;
}
add_filter('term_link', 'wpnotes_remove_taxonomy_base', 10, 3);

Для корректной работы таких изменений часто требуется добавить правило перезаписи в файл .htaccess или использовать функцию add_rewrite_rule(). Пример добавления правила для удаления базы категории:

function wpnotes_rewrite_rules() {
    add_rewrite_rule('^([^/]+)?$', 'index.php?category_name=$matches[1]', 'top');
}
add_action('init', 'wpnotes_rewrite_rules');

Обратите внимание, что неправильное добавление правил может привести к конфликтам или ошибкам 404, поэтому тестируйте изменения на локальной копии сайта.

Редактирование файла .htaccess для кастомных перенаправлений и структуры URL

В WordPress файл .htaccess отвечает за правила перезаписи URL. Для базовой работы ЧПУ он уже настроен, но иногда требуется добавить собственные правила.

Например, если нужно сделать редирект с устаревшего URL на новый, добавьте в начало .htaccess следующий код:

Redirect 301 /old-page/ /new-page/

Для более сложных правил используйте директивы RewriteRule:

RewriteEngine On
RewriteRule ^portfolio/([0-9]+)/?$ /portfolio/project-$1/ [R=301,L]

Это правило перенаправит URL с числом в конце на новый формат с префиксом project-.

При работе с .htaccess обязательно делайте резервные копии и проверяйте работу сайта после изменений.

Полезные плагины для управления структурой URL и SEO

Хотя статья посвящена решению без плагинов, иногда использование специализированных инструментов ускоряет работу и помогает избежать ошибок.

Рассмотрим несколько плагинов, которые помогут вам управлять URL и SEO:

  • Clearfy Pro — пакет оптимизаций, включая управление ЧПУ, удаление лишних параметров из URL, улучшение SEO. Подробнее: wpshop.ru/plugins/clearfy-pro
  • WPGPT — плагин для генерации SEO-оптимизированных текстов, который помогает создавать описания страниц с правильными ключевыми словами и URL. Подробнее: wpshop.ru/plugins/wpgpt
  • ABC Pagination — удобный инструмент для кастомизации пагинации, который влияет и на структуру URL страниц пагинации. Подробнее: wpshop.ru/plugins/abc-pagination

Что делать, если после изменения структуры URL появляются ошибки 404

Чаще всего ошибки 404 возникают из-за некорректных правил перезаписи или кеширования. Чтобы их избежать:

  • После изменения структуры всегда обновляйте постоянные ссылки через админку (Настройки > Постоянные ссылки).
  • Очистите кеш сайта и браузера.
  • Проверьте файл .htaccess на наличие конфликтующих правил.
  • Используйте инструмент Regenerate Thumbnails или аналогичный, если менялась структура URL для медиафайлов.
  • При необходимости настройте 301 редиректы с помощью .htaccess или PHP-кода, чтобы перенаправлять старые URL на новые.

Пример автоматического перенаправления старых URL на новые с помощью кода

Для автоматизации редиректов можно использовать следующий код в файле functions.php вашей темы:

function wpnotes_redirect_old_urls() {
    if (is_404()) {
        $requested_url = $_SERVER['REQUEST_URI'];
        // Пример: перенаправление /old-post/ на /new-post/
        if (strpos($requested_url, '/old-post/') !== false) {
            wp_redirect(home_url('/new-post/'), 301);
            exit;
        }
    }
}
add_action('template_redirect', 'wpnotes_redirect_old_urls');

Такой подход полезен, если URL-структура изменилась выборочно и необходимо сохранить позиции в поисковых системах.

×
WordPress
прокачай свой сайт!

-20% на премиум темы и плагины

Сделай апгрейд сайта ⋙