Битые ссылки в WordPress обычно всплывают не сразу: часть ведёт на удалённые записи, часть — на внешние страницы, которые сменили адрес, а часть прячется в старых меню, блоках и виджетах. Проблема не только в UX. Если таких ссылок много, они засоряют отчёты, мешают индексации и создают лишний шум в логах 404.
Ниже — рабочая схема: как быстро найти проблемные URL, чем проверять контент, как безопасно удалить или заменить ссылки и как убедиться, что после правки сайт не начал отдавать новые ошибки.
Когда искать битые ссылки и где они обычно прячутся
Искать их имеет смысл, если вы видите рост 404 в логах, жалобы пользователей на неоткрывающиеся страницы или падение качества внутренних переходов. На практике источники почти всегда одни и те же:
- старые записи и страницы с изменённым slug;
- меню навигации, где ссылка осталась после переезда раздела;
- текстовые блоки в редакторе, особенно если контент переносили вручную;
- виджеты, футер и шаблонные части темы;
- внешние ссылки на сервисы, которые сменили домен или закрылись.
Если сайт большой, не пытайтесь искать всё вручную через админку. Сначала соберите список проблемных URL, а уже потом идите в контент и настройки.
Диагностика: как понять, какие ссылки реально сломаны
Самый надёжный путь — сочетать два источника: отчёт краулера и данные сервера. Краулер покажет, где ссылка стоит в HTML, а логи или аналитика — какие адреса реально запрашивают посетители и боты.
Проверка через краулер
Если у вас есть Screaming Frog, Sitebulb или аналог, просканируйте сайт и отфильтруйте:
- internal 404;
- external 4xx/5xx;
- redirect chains;
- links to non-canonical URLs, если они уже переехали.
Для небольшого сайта можно начать даже с поиска по базе. В WordPress ссылки часто лежат в post_content, но не только там. Меню и некоторые настройки хранятся отдельно.
Быстрая проверка через WP-CLI
Если есть доступ к консоли, удобно сначала найти записи, где встречается подозрительный URL. Команда ниже не чинит ничего сама, но помогает сузить круг поиска:
wp db query "SELECT ID, post_title FROM wp_posts WHERE post_content LIKE '%example.com/old-page%' AND post_status IN ('publish','draft') LIMIT 20;"Если префикс таблиц у вас не wp_, подставьте свой. Для больших сайтов лучше не делать массовые запросы без бэкапа.
Пошаговое решение: от списка проблем до замены ссылок
Когда список URL уже есть, действуйте по порядку. Так меньше шансов сломать нужные переходы или заменить не тот адрес.
Шаг 1. Определите тип ссылки
Сначала решите, что делать с каждой проблемой:
- внутренняя ссылка — заменить на актуальный URL или на новую страницу;
- внешняя ссылка — обновить адрес, если ресурс переехал, или удалить, если замены нет;
- устаревший архивный URL — оставить редирект 301, если страница уже индексировалась и имеет входящие ссылки;
- ошибка в меню/виджете — исправить в соответствующем разделе админки, а не в контенте записи.
Шаг 2. Замените ссылки массово, если это безопасно
Для повторяющихся адресов удобнее использовать поиск и замену по базе, но только после резервной копии. В WordPress нельзя просто делать UPDATE ... REPLACE() по сериализованным данным без понимания структуры. Для таких задач лучше использовать проверенный инструмент, который умеет работать с сериализацией.
Если нужен кодовый вариант для точечной правки обычного HTML в записях, можно использовать хук на сохранение или отдельный скрипт миграции. Пример ниже меняет только текст контента и только для конкретного старого URL:
function wpset_replace_old_link_in_content( $content ) {
$old = 'https://example.com/old-page';
$new = 'https://example.com/new-page';
if ( strpos( $content, $old ) === false ) {
return $content;
}
return str_replace( $old, $new, $content );
}
add_filter( 'the_content', 'wpset_replace_old_link_in_content', 20 );Этот пример полезен только как временная мера для вывода контента. Для постоянной правки нужно менять данные в базе или через редактор, иначе ссылка будет заменяться только на фронтенде.
Шаг 3. Исправьте ссылки в меню и шаблонах
Меню в WordPress не хранятся в post_content, поэтому их нужно проверять отдельно. Если ссылка сидит в шаблоне темы, ищите её в файлах темы или в настройках конструктора, если он используется. В виджетах и блоках часто помогает обычный поиск по админке: откройте нужный блок и проверьте URL вручную.
Шаг 4. Настройте редирект там, где удаление нельзя
Если страница уже получала трафик или ссылки с других сайтов, удалять её в лоб не стоит. В таком случае лучше поставить 301-редирект на наиболее близкую релевантную страницу. Это не лечит плохую структуру сайта, но сохраняет переходы и уменьшает число 404.
Простой вариант на уровне PHP — через template_redirect, если редиректов немного и они точечные:
add_action( 'template_redirect', function () {
if ( is_page( 'old-page' ) ) {
wp_redirect( home_url( '/new-page/' ), 301 );
exit;
}
} );Для десятков и сотен правил удобнее использовать серверный уровень или отдельный плагин редиректов. В коде темы такие списки быстро становятся неудобными в сопровождении.
Сравнение подходов: вручную, через плагин или код
| Подход | Когда подходит | Плюсы | Минусы |
|---|---|---|---|
| Вручную через админку | Несколько ссылок в записях и меню | Безопасно, видно контекст | Долго на большом сайте |
| Плагин для поиска и замены | Массовая замена одинаковых URL | Учитывает сериализацию, быстрее | Нужно проверять результат и делать бэкап |
| Код или WP-CLI | Точечная миграция и техническая правка | Гибко, можно автоматизировать | Требует аккуратности и теста на копии |
Если у вас уже есть Clearfy Pro, его удобно использовать для части задач по чистке сайта и удалению дублей, но сам поиск битых ссылок всё равно лучше вести через краулер, логи и ручную проверку контента. Слепо полагаться на один инструмент не стоит.
Проверка результата после внедрения
После правок не ограничивайтесь открытием пары страниц в браузере. Нужна короткая, но системная проверка.
- Пройдите по страницам, где были найденные ссылки, и убедитесь, что URL открываются без 404.
- Проверьте меню, футер и ключевые шаблонные блоки.
- Снова прогоните сайт краулером и сравните список ошибок до и после.
- Посмотрите логи сервера или отчёт аналитики: число запросов к старым URL должно снижаться.
- Если ставили редиректы, проверьте, что они отдают именно
301, а не302или цепочку из нескольких переходов.
Для проверки редиректа удобно использовать:
curl -I https://example.com/old-pageВ ответе должен быть понятный статус и новый адрес в заголовке Location. Если вместо этого видите цепочку из нескольких 301, редирект лучше упростить.
Частые ошибки и как их исправить
Удалили страницу, но не поставили редирект
Это типичная ошибка при чистке контента. Если страница уже была в индексе или на неё вели внутренние ссылки, просто удалить её недостаточно. Исправление: либо вернуть страницу, либо настроить 301 на ближайший аналог.
Меняют URL в тексте, но забывают про меню и блоки
В результате в отчёте 404 остаётся старый адрес, хотя запись уже исправлена. Проверяйте не только посты, но и навигацию, виджеты, шаблонные части и блоки в редакторе сайта.
Делают массовую замену по базе без бэкапа
Это самый неприятный сценарий. Если в базе есть сериализованные данные, неаккуратная замена может повредить настройки виджетов и блоков. Перед массовой правкой нужен бэкап и тест на копии.
Ставят редирект на нерелевантную страницу
Если вместо удалённой статьи отправить пользователя на главную, это формально уберёт 404, но ухудшит поведение посетителя и может выглядеть как мягкая ошибка для поисковика. Лучше вести на максимально близкую по смыслу страницу.
Практические советы по безопасности и производительности
Чистка битых ссылок сама по себе не тяжёлая операция, но ошибки в ней часто бьют по стабильности сайта. Поэтому:
- делайте резервную копию базы перед массовыми заменами;
- проверяйте правки на staging-копии, если сайт рабочий и с трафиком;
- не запускайте тяжёлые SQL-замены на живом сайте в часы пик;
- не храните список редиректов в коде темы, если он часто меняется;
- после изменений очистите кеш страниц и, если используется, объектный кеш.
Если задача повторяется регулярно, имеет смысл выстроить процесс: раз в месяц прогонять сайт краулером, смотреть 404 в логах и сразу закрывать новые битые ссылки. Так проблема не разрастается до сотен мусорных URL.
Для сайтов, где контент активно обновляется, это обычно практичнее, чем разовая «генеральная уборка» раз в год. Тогда и индексация чище, и пользователи реже упираются в пустые страницы.