Как удалить URL доменов во внутренних ссылках WordPress

При переносе сайта WordPress на новый домен или изменении структуры URL часто возникает задача массового удаления или замены полного URL домена во всех внутренних ссылках. Это важно для корректной работы навигации, SEO и предотвращения ошибок 404. В этой статье мы подробно разберем, как удалить URL доменов из внутренних ссылок WordPress, оставив только относительные пути, а также рассмотрим практические решения с примерами кода и полезными плагинами.

Почему важно удалять URL домены из внутренних ссылок

Когда WordPress генерирует ссылки на страницы, записи, изображения и другие элементы, он часто вставляет полный URL с доменом, например, https://example.com/page. В некоторых случаях это нежелательно:

  • При миграции сайта на другой домен ссылающиеся URL останутся с старым адресом, что приведет к битым ссылкам.
  • При использовании нескольких доменов или поддоменов проще использовать относительные пути для универсальности.
  • Относительные ссылки снижают объем данных и упрощают администрирование сайта.
  • Для некоторых SEO-стратегий желательно иметь внутренние ссылки без домена.

Поэтому задача удалить или заменить доменные части URL во внутренних ссылках становится актуальной.

Как WordPress хранит ссылки и где искать URL доменов

Прежде чем приступить к редактированию, важно понять, где именно хранятся ссылки с доменом:

  • Поля post_content в базе данных — здесь находится основной контент записей, страниц и кастомных типов, где могут быть ссылки в html-коде.
  • Поля meta данных (wp_postmeta) — некоторые плагины и темы сохраняют ссылки в мета полях.
  • Настройки сайта — например, в опциях (wp_options) для адреса сайта и медиа.
  • В виджетах и меню — ссылки могут храниться в serialized массивах в базе.

Для массовой замены или удаления домена нужно работать с полем post_content и мета полями.

Решение задачи с помощью SQL-запроса

Самый простой способ — заменить в базе все вхождения полного домена на пустую строку или относительный путь. Например, если нужно убрать https://example.com из ссылок, можно выполнить следующий запрос (обязательно сделайте резервное копирование базы):

UPDATE wp_posts 
SET post_content = REPLACE(post_content, 'https://example.com', '');

Этот запрос удалит домен из всего содержимого постов.

Если ссылки есть в мета полях, то аналогично:

UPDATE wp_postmeta 
SET meta_value = REPLACE(meta_value, 'https://example.com', '');

Плюс этого метода — скорость и простота, минус — нельзя частично или условно заменять, нет проверки контекста.

Удаление URL домена в контенте с помощью PHP-функции WordPress

Для более гибкого решения можно создать скрипт или функцию, которая будет проходить по всем постам и удалять домен из ссылок программно. Это удобно, если нужно учитывать только ссылки внутри <a> или <img> тегов.

Пример функции для удаления домена из ссылок в контенте:

function wpcource_remove_domain_from_links() {
    $domain = 'https://example.com'; // замените на ваш домен
    $args = array(
        'post_type' => 'any',
        'posts_per_page' => -1,
        'post_status' => 'any',
    );
    $posts = get_posts($args);
    
    foreach ($posts as $post) {
        $content = $post->post_content;
        
        // Используем DOMDocument для парсинга html
        $dom = new DOMDocument();
        libxml_use_internal_errors(true);
        $dom->loadHTML('<?xml encoding="utf-8" ?>' . $content);
        libxml_clear_errors();
        
        $links = $dom->getElementsByTagName('a');
        $changed = false;
        foreach ($links as $link) {
            $href = $link->getAttribute('href');
            if (strpos($href, $domain) === 0) {
                $new_href = substr($href, strlen($domain));
                if ($new_href === '') {
                    $new_href = '/';
                }
                $link->setAttribute('href', $new_href);
                $changed = true;
            }
        }
        if ($changed) {
            $new_content = $dom->saveHTML($dom->documentElement);
            // Удаляем обертку <html> и <body>
            preg_match('/<body>(.*)<\/body>/s', $new_content, $matches);
            if (isset($matches[1])) {
                $new_content = $matches[1];
            }
            
            wp_update_post(array(
                'ID' => $post->ID,
                'post_content' => $new_content
            ));
        }
    }
}

Эту функцию можно запустить один раз из файла темы или через WP-CLI. Она аккуратно заменит домен только в ссылках, сохраняя остальной контент.

Использование плагинов для массовой замены ссылок

Если не хотите писать код, есть готовые решения. Например, плагин Search & Replace от WPShop позволяет искать и заменять строки в базе данных безопасно.

Преимущества плагина:

  • Простой интерфейс для поиска и замены.
  • Поддерживает serialized данные, что важно для виджетов и меню.
  • Можно делать dry-run — симулировать замену без реальных изменений.

Недостаток — требует осторожности и резервного копирования.

Как избежать проблем с ссылками при переносе сайта

Чтобы в будущем не сталкиваться с проблемой удаления домена из ссылок, придерживайтесь рекомендаций:

  • Используйте относительные ссылки при вставке ссылок вручную.
  • При миграции используйте WP-CLI команду wp search-replace с флагом для serialized данных.
  • Автоматизируйте проверку ссылок с помощью плагинов типа Clearfy Pro, который помогает оптимизировать структуру ссылок.
  • Если используете визуальные редакторы, проверяйте, чтобы они не вставляли абсолютные URL без необходимости.

Заключение. Пример комплексного решения для wpcource.ru

Для сайта wpcource.ru рекомендуем следующий порядок действий:

  1. Создать резервную копию базы данных.
  2. Запустить SQL-запрос для базовой замены домена в post_content и postmeta.
  3. Если нужно более аккуратно удалить домен только в ссылках, использовать PHP-функцию wpcource_remove_domain_from_links.
  4. Проверить работу сайта, убедиться, что ссылки работают корректно.
  5. Для регулярного контроля и оптимизации использовать плагин Search & Replace от WPShop.

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

Как создать свой шорткод в WordPress: практическое руководство
04.11.2025
WooCommerce: автоматическое удаление отменённых заказов с помощью хуков
15.05.2026
WooCommerce: автоматическое удаление отменённых заказов и товаров из них
24.05.2026
Автоматические записи в WordPress: создание и настройка по расписанию
01.02.2026
WooCommerce: автоматическое изменение статуса заказа при оплате через платежные системы
28.05.2026

Обучение разработке на WordPress, как создавать темы, плагины. Подробнее об обучении.