Дубли изображений в 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.
Если на сайте много контента и ручная проверка уже не тянет, имеет смысл вынести чистку в регулярный процесс: сначала отчёт, потом ручное подтверждение, потом удаление. Так вы не будете каждый раз искать дубли с нуля и не потеряете изображения из рабочих материалов.