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

Дубли изображений в WordPress обычно появляются не из-за одной ошибки, а из-за цепочки мелких решений: повторная загрузка одного и того же файла, разные размеры с одинаковым смыслом, копии после миграции, а иногда — одинаковые картинки, которые лежат в медиатеке под разными именами. В итоге разрастается uploads, усложняется поиск нужного файла, а на некоторых сайтах ещё и ломается логика очистки: удалили вложение в админке — и неожиданно пропали изображения в записях.

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

Когда дубли изображений действительно мешают

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

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

Если сайт небольшой, это заметно по хаосу в медиатеке. На контентных проектах и новостниках дубли чаще проявляются через рост каталога wp-content/uploads, долгий поиск нужного файла и ошибки в ручной чистке.

Диагностика: как понять, что именно у вас дублируется

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

Проверка через медиатеку и поиск по файлам

В админке WordPress можно быстро увидеть очевидные повторы по названию файла, но этого недостаточно. Один и тот же файл может быть загружен как image.jpg и image-1.jpg, а визуально вы увидите только похожую миниатюру. Поэтому полезно смотреть не только на имя, но и на дату загрузки, размер и место использования.

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

cd /var/www/site/wp-content/uploads
find . -type f \( -iname '*.jpg' -o -iname '*.jpeg' -o -iname '*.png' -o -iname '*.webp' \) -exec md5sum {} \; | sort | awk 'prev==$1 {print prev_file "\n" $2 "\n"} {prev=$1; prev_file=$2}'

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

Проверка использования вложений в контенте

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

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

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

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

Шаг 1. Сделайте бэкап файлов и базы

Это не формальность. Удаление вложений затрагивает и записи в базе, и физические файлы в uploads. Если что-то пойдёт не так, откат должен быть быстрым.

  • сохраните дамп базы данных;
  • сделайте архив wp-content/uploads;
  • если сайт на проде, по возможности проверьте процедуру восстановления на тестовой копии.

Шаг 2. Отберите кандидатов на удаление

Сначала удаляйте только то, что точно не используется. Если у файла нет привязки к записям, он не вставлен в контент и не нужен в настройках темы, его уже можно считать кандидатом. Для массовой проверки подойдёт WP-CLI, если он доступен.

wp post list --post_type=attachment --fields=ID पोस्ट_title,post_date --format=table

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

Шаг 3. Удаляйте только после проверки связей

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

Для автоматизации можно использовать wp_delete_attachment() в собственном скрипте или через временный административный инструмент. Пример ниже удаляет только те вложения, которые вы заранее пометили как кандидатов.

<?php
$attachment_id = 123;
if ( get_post_type( $attachment_id ) === 'attachment' ) {
    wp_delete_attachment( $attachment_id, true );
}

Второй параметр true удаляет файл окончательно. Если вы не уверены, сначала тестируйте на копии сайта.

Шаг 4. Очистите дубли размеров, если они не нужны

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

Если вы уже знаете, какие размеры не используются, отключите их через код темы или mu-plugin. Пример для отключения нескольких лишних размеров:

<?php
add_action( 'init', function () {
    remove_image_size( 'medium_large' );
    remove_image_size( '1536x1536' );
    remove_image_size( '2048x2048' );
} );

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

Сравнение подходов: плагин, код или ручная чистка

ПодходКогда подходитПлюсМинус
Ручная проверка в медиатекеМаленький сайт, мало файловМаксимальный контрольДолго и легко пропустить дубли
Код / WP-CLIБольшая медиатека, нужен повторяемый процессМожно автоматизировать проверкуНужна аккуратность и тестовая среда
Плагин очисткиЕсли нужен интерфейс и отчётыУдобно для редакторовВажно проверять, что плагин не удаляет нужные файлы

Если вы уже используете Clearfy Pro, его имеет смысл рассматривать как инструмент для общей чистки сайта и работы с дублями, но не как повод выключить проверку. Любой массовый инструмент нужно сначала прогонять на копии сайта.

Как проверить, что решение сработало

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

  • откройте 5–10 старых записей и убедитесь, что изображения на месте;
  • проверьте страницы с галереями, блоками и слайдерами;
  • посмотрите, не появились ли 404 на картинках в логах или в отчётах сканера;
  • сравните размер каталога uploads до и после очистки;
  • обновите кэш, если сайт использует серверный или плагинный кэш.

Если изображения выводятся через CDN, отдельно проверьте, не остались ли старые ссылки в кэше CDN. Иногда файл уже удалён на сервере, но копия ещё отдаётся с edge-узла.

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

Удалили файл напрямую, а в базе осталась запись

Так делать не стоит. В админке останется вложение, которое ведёт в никуда. Исправление простое: восстановите файл из бэкапа или удалите запись о вложении штатным способом, если файл уже не нужен.

Стерли оригинал, но сломались миниатюры

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

Считали дублем одинаковые картинки, которые используются в разных местах

Одинаковый визуально файл может быть нужен на нескольких страницах. В WordPress это нормальная ситуация. Удалять можно только лишние копии, а не все повторяющиеся изображения как класс.

Запустили массовую чистку без тестовой копии

Это самая дорогая ошибка. Если сайт контентный и старый, сначала делайте прогон на staging. На боевом сайте массовое удаление вложений лучше выполнять только после выборочной проверки.

Практические советы по безопасности и производительности

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

  • ограничьте круг пользователей, которые могут загружать файлы без модерации;
  • не храните в медиатеке исходники, которые не используются на сайте;
  • проверяйте, не генерирует ли тема слишком много размеров;
  • периодически смотрите отчёт по неиспользуемым вложениям;
  • после крупных импортов сразу проводите ревизию uploads.

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

Как закрыть дубли страниц от индексации в WordPress
02.09.2026