wplock.ru wordpress wplock.ru

Как найти и удалить дубли рубрик и меток в WordPress

Дубли рубрик и меток в WordPress обычно появляются незаметно: редактор создал почти одинаковые термины, кто-то импортировал контент, старые таксономии остались после редизайна. В результате в админке растёт хаос, а на сайте появляются одинаковые архивы, лишние URL и размытая внутренняя перелинковка.

Эта задача не про «почистить всё подряд». Нормальный сценарий — сначала найти дубли, потом понять, какие термины реально используются, и только после этого объединять или удалять их. Ниже — рабочий порядок действий без лишних предположений.

Когда проблема уже есть

Обычно дубли видно по нескольким признакам. В списке рубрик или меток есть почти одинаковые названия: Новости и Новости сайта, SEO и seo, Акции и Акция. Иногда совпадает не название, а смысл: разные термины ведут на один и тот же набор записей или почти пустые архивы.

Проверять стоит не только админку. Если сайт давно работает, дубли могут уже попасть в индекс поисковиков, а старые архивы — собирать внутренние ссылки и создавать лишние страницы. Это особенно заметно после миграции, импорта из CSV или массовой работы нескольких редакторов.

Что считать дублем на практике

В WordPress дубль — это не только одинаковый name. Часто проблема в одном из вариантов:

  • одинаковый смысл при разных названиях;
  • разный регистр и пробелы: SEO и seo;
  • разные slug при одинаковом содержании;
  • несколько пустых или почти пустых архивов;
  • термины, которые используются только в старых записях и больше не нужны.

Как диагностировать дубли рубрик и меток

Начинать лучше с базы данных и админки одновременно. В админке видно, какие термины используются, а SQL-запрос помогает быстро найти похожие названия и оценить масштаб проблемы. Если у вас есть доступ к phpMyAdmin или WP-CLI, это самый быстрый путь.

Проверка через SQL

Сначала посмотрите, какие термины встречаются чаще всего и есть ли очевидные совпадения по названию. Запрос ниже показывает термины таксономий и количество объектов, к которым они привязаны:

SELECT t.term_id, t.name, t.slug, tt.taxonomy, tt.count
FROM wp_terms t
JOIN wp_term_taxonomy tt ON t.term_id = tt.term_id
WHERE tt.taxonomy IN ('category', 'post_tag')
ORDER BY tt.taxonomy, t.name;

Если нужно найти потенциальные дубли по похожему названию, можно выгрузить список и сравнить его вручную. Автоматически «умно» объединять термины по похожести опасно: легко склеить разные сущности, например SEO и SEO-аудит.

Проверка через WP-CLI

Если на сервере доступен WP-CLI, удобно быстро посмотреть термины и их ID:

wp term list category --fields=term_id,name,slug,count
wp term list post_tag --fields=term_id,name,slug,count

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

Пошаговое решение: как объединить и удалить лишнее

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

Шаг 1. Выберите основной термин

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

Шаг 2. Перенесите записи на нужную рубрику или метку

Для переноса можно использовать код через wp_set_post_terms(). Ниже пример для рубрик: он добавляет основную рубрику записи и убирает старую, если вы заранее знаете ID терминов.

<?php
$old_term_id = 123;
$new_term_id = 456;

$posts = get_posts([
    'post_type'      => 'post',
    'posts_per_page' => -1,
    'fields'         => 'ids',
    'tax_query'      => [
        [
            'taxonomy' => 'category',
            'field'    => 'term_id',
            'terms'    => $old_term_id,
        ],
    ],
]);

foreach ($posts as $post_id) {
    $terms = wp_get_post_terms($post_id, 'category', ['fields' => 'ids']);
    $terms = array_diff($terms, [$old_term_id]);
    $terms[] = $new_term_id;
    wp_set_post_terms($post_id, $terms, 'category', false);
}

Для меток логика та же, только меняется таксономия на post_tag. Если дубль используется в нескольких типах записей, проверьте каждый отдельно.

Шаг 3. Удалите старый термин

Когда записи уже перенесены, старый термин можно удалить через админку или кодом. Если удаляете программно, сначала убедитесь, что он больше не нужен нигде в шаблонах и фильтрах.

<?php
$term_id = 123;
$result = wp_delete_term($term_id, 'category');

if (is_wp_error($result)) {
    error_log($result->get_error_message());
}

Шаг 4. Настройте редирект со старого архива

Если старый архив уже был доступен в индексе или на него вели ссылки, лучше сделать 301-редирект на новый термин. Это можно реализовать в template_redirect, если у вас есть стабильное соответствие старого и нового slug.

<?php
add_action('template_redirect', function () {
    if (is_tax('category', 'old-category-slug')) {
        wp_redirect(home_url('/category/new-category-slug/'), 301);
        exit;
    }
});

Для меток и рубрик лучше не плодить отдельные редиректы вручную, если дублей много. В таком случае удобнее собрать карту соответствий и поддерживать её в одном месте, например в небольшом mu-plugin.

Сравнение подходов

ПодходКогда подходитПлюсыМинусы
Через админкуНесколько дублей, ручная проверкаПросто, безопасноМедленно на больших сайтах
Через кодМассовый перенос терминовПовторяемо, можно логироватьНужна аккуратность с ID
Через WP-CLIМного терминов и записейБыстро, удобно для сервераНужен доступ к консоли

Как проверить результат после очистки

После переноса и удаления дублей проверьте не только список терминов в админке. Важно убедиться, что записи действительно привязаны к нужным рубрикам, а старые архивы не отдают 200 OK без необходимости.

  • Откройте страницу новой рубрики или метки и проверьте список записей.
  • Перейдите по старому URL архива и убедитесь, что работает 301-редирект или осмысленный 404, если редирект не нужен.
  • Проверьте, что в шаблонах нет ссылок на удалённый slug.
  • Если используете кэш, очистите его и проверьте страницу в режиме инкогнито.
  • Сверьте sitemap: старые термины не должны оставаться в карте сайта.

Если у вас есть доступ к консоли, можно быстро проверить код ответа:

curl -I https://example.com/category/old-category-slug/

Для старого архива ожидаемый результат — 301 на новый URL или 404, если вы сознательно не делали перенаправление.

Частые ошибки и как их исправить

Удалили термин, но записи остались без нужной рубрики

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

Склеили разные сущности из-за похожих названий

Самая неприятная ошибка — объединить, например, Новости и Новости компании. Перед переносом проверьте не только название, но и фактическое содержимое архивов, количество записей и внутренние ссылки.

Оставили старый архив без редиректа

Если URL уже индексировался, удаление без перенаправления создаёт лишние 404. Для небольшого числа дублей это терпимо, но для старых сайтов лучше закрыть вопрос 301-редиректом.

Не обновили кэш и sitemap

После чистки старые страницы могут ещё какое-то время показываться из кэша. Очистите серверный кэш, кэш плагина и при необходимости пересоберите sitemap, чтобы поисковики быстрее увидели изменения.

Что стоит учесть для безопасности и производительности

Массовые операции с терминами лучше делать на staging-копии. Это не формальность: при ошибке в ID можно быстро испортить структуру сайта. Если сайт большой, запускайте перенос частями, а не одним скриптом на весь каталог.

Если вы часто сталкиваетесь с дублями, полезно ограничить хаос на уровне процесса: договориться о правилах именования рубрик, не создавать метки «на ходу» и периодически проверять пустые архивы. Для сайтов с активной редакцией это обычно эффективнее, чем разовая чистка раз в год.

Когда нужно не только убрать дубли, но и навести порядок в SEO-структуре, можно посмотреть в сторону инструментов для чистки дублей и технической оптимизации, например Clearfy Pro: https://wpshop.ru/plugins/clearfy. Но даже с плагином сначала стоит понять, какие термины реально нужно сохранять, а какие — удалить или объединить.

Если хотите, следующий шаг после этой чистки — проверить, не остались ли в индексе старые архивы и служебные URL, которые больше не должны участвовать в поиске.

}
×
Quizle
Получите больше лидов и увеличьте продажи!
-15%

на премиум плагин WordPress

Получить скидку ⋙