На сайте пропала часть пунктов админки, на витрине появились ошибки и посторонние страницы, а в поиске начали показываться чужие ссылки. Владелец видел это как набор отдельных поломок и просил «убрать ошибки».
Между собой эти симптомы обычно не связывают — и именно поэтому такие задачи решают по кругу: сайт чистят, через неделю он падает снова, подрядчик меняется.
Набор симптомов складывается в одну картину: это не поломка, а заражение. Код, который прячет часть меню, обычно живёт в служебном каталоге плагинов или подвешен на событие входа в админку; рядом заводится лишний администратор и задача в планировщике, возвращающая вредоносный код уже после чистки.
Поэтому работа шла не «почистить файлы», а закрыть цикл. Полная копия сайта и базы до любого вмешательства. Поиск изменённых файлов по датам и контрольным суммам. Разбор задач планировщика и вставок в базе. Ревизия администраторов, паролей и ключей доступа. Проверка темы и плагинов на заброшенные и уязвимые версии.
Отдельно проговорила два риска, которые обычно недооценивают. Чистка без закрытия входа даёт возврат за несколько дней: пока непонятно, через что зашли, убирается следствие, а не причина. И откат на резервную копию, сделанную уже после заражения, просто переустанавливает то же самое вместе с бэкдором. Поэтому сначала находится путь входа, и только потом восстанавливается сайт.
Работающая админка и витрина без посторонних страниц, удалённые точки закрепления, обновлённые пароли и ключи доступа, закрытые уязвимости в теме и плагинах.
Резервное копирование с хранением нескольких поколений — чтобы в следующий раз был выбор, к какой дате откатываться, а не единственная копия сомнительной свежести.
Отдельно — восстановление в поиске: посторонние страницы убираются из индекса, а не остаются висеть в выдаче месяцами.
Отчёт о том, что было найдено и через что зашли, с перечнем того, что стоит изменить в работе с сайтом, чтобы история не повторилась.