Как удалить дубликаты постов в WordPress: практическое руководство с примерами

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

Почему появляются дубликаты постов и как это влияет на сайт

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

  • Падению позиций сайта в поисковых системах из-за дублированного контента.
  • Увеличению размера базы данных и замедлению работы сайта.
  • Запутыванию в админке и неудобству управления контентом.

Как найти дубликаты постов в базе данных WordPress с помощью SQL

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

SELECT post_title, COUNT(*) as count_posts
FROM wp_posts
WHERE post_type = 'post' AND post_status = 'publish'
GROUP BY post_title
HAVING count_posts > 1
ORDER BY count_posts DESC;

Этот запрос покажет вам, какие заголовки встречаются чаще одного раза. Далее можно получить ID этих записей и вручную или программно удалить лишние.

Аналогично можно искать дубликаты по содержимому:

SELECT SUBSTRING(post_content, 1, 100) as content_snippet, COUNT(*) as count_posts
FROM wp_posts
WHERE post_type = 'post' AND post_status = 'publish'
GROUP BY content_snippet
HAVING count_posts > 1
ORDER BY count_posts DESC;

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

Удаление дубликатов постов с помощью пользовательской функции WordPress

Для автоматизации удаления дубликатов можно создать функцию, которая будет искать записи с одинаковыми заголовками и удалять все, кроме одной. Ниже пример такой функции с префиксом wpdream_:

function wpdream_delete_duplicate_posts() {
    global $wpdb;

    $duplicates = $wpdb->get_results(
        "SELECT post_title, MIN(ID) as keep_id, GROUP_CONCAT(ID) as all_ids, COUNT(*) as cnt
         FROM {$wpdb->posts}
         WHERE post_type = 'post' AND post_status = 'publish'
         GROUP BY post_title
         HAVING cnt > 1"
    );

    foreach ( $duplicates as $dup ) {
        $all_ids = explode(',', $dup->all_ids);
        foreach ( $all_ids as $id ) {
            if ( $id != $dup->keep_id ) {
                wp_delete_post( $id, true ); // true — принудительное удаление
            }
        }
    }

    echo 'Дубликаты удалены';
}

// Для запуска функции: wpdream_delete_duplicate_posts();

Эту функцию можно запускать в файле темы или подключать через плагин. Рекомендуется сначала сделать резервную копию базы данных.

Плагины для поиска и удаления дубликатов постов

Если вы предпочитаете готовые решения, обратите внимание на следующие плагины:

  • Remove Duplicate Posts — простой плагин, который ищет дубликаты по заголовку и контенту, позволяет удалять их массово.
  • Duplicate Post Cleaner — более продвинутый, позволяет настраивать критерии совпадения, поддерживает фильтры по типу записей.
  • Clearfy Pro — универсальный плагин для оптимизации WordPress, в том числе включает инструменты для удаления дубликатов и оптимизации базы данных.

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

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

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

  • При импорте контента использовать проверенные инструменты с опцией пропуска дубликатов.
  • Контролировать работу плагинов, которые создают записи, и следить за обновлениями.
  • Внедрять уникальные правила для заголовков, например, автоматически добавлять дату или уникальный идентификатор.
  • Использовать плагины типа Clearfy Pro, которые помогают оптимизировать работу и следить за контентом.

Пример кода для автоматического добавления уникального суффикса к заголовку

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

function wpdream_unique_post_title( $title, $post_id ) {
    global $wpdb;

    $count = $wpdb->get_var( $wpdb->prepare(
        "SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_title = %s AND ID != %d",
        $title,
        $post_id
    ) );

    if ( $count > 0 ) {
        $title .= ' ('.uniqid().')';
    }

    return $title;
}
add_filter( 'the_title', 'wpdream_unique_post_title', 10, 2 );

Этот код добавляет уникальный идентификатор к заголовку, если такой уже существует.

Итоги

Удаление дубликатов постов — важный этап поддержания чистоты и производительности WordPress сайта. Используйте SQL-запросы для диагностики, автоматизируйте процесс через PHP-функции или плагины. Не забывайте создавать резервные копии перед массовыми удалениями и следите за качеством контента, чтобы предотвращать повторное появление дубликатов.

Как удалить пустые категории в WordPress с помощью кода
13.02.2026
Изменение файла robots.txt в WordPress без плагинов
07.01.2026
Как изменить URL страницы регистрации WordPress без плагина
07.12.2025
Как разрешить доступ к файлам в WordPress через .htaccess
31.03.2026
Как удалить ненужные стили и скрипты в WordPress для ускорения сайта
30.11.2025