Почему важно удалять из индекса слуги с 301 редиректами
Постоянные редиректы (HTTP 301) указывают поисковым системам на окончательное перемещение страницы. Если в индексе остаются URL, которые перенаправляют на другие, это снижает качество индексации, увеличивает нагрузку на сервер и может негативно отразиться на SEO. Автоматизация удаления таких URL из индекса с помощью IndexNow позволяет своевременно обновлять поисковый индекс и ускоряет переиндексацию сайта.
Диагностика проблемы: как выявить слуги с 301 редиректами в WordPress
Для начала нужно определить, какие URL на сайте настроены с постоянным редиректом. Чаще всего редиректы добавляются через плагины, в файле .htaccess или в коде темы/плагинов.
- Используйте wp-cli для получения списка редиректов (если установлен плагин Redirection):
wp redirection list --status=301 - Проверьте базу данных в таблице
wp_redirection_items(если используется плагин Redirection).
Запрос для выборки постоянных редиректов:SELECT source_url, target_url FROM wp_redirection_items WHERE action_type = 'url' AND status_code = 301; - Для редиректов, прописанных в
.htaccess, вручную просмотрите файл или автоматизируйте сканирование с помощью скрипта.
Проверка редиректов через PHP
Пример кода, который проверяет, возвращает ли URL 301 редирект:
function is_url_redirect_301($url) {
$headers = get_headers($url, 1);
if ($headers && strpos($headers[0], '301') !== false) {
return true;
}
return false;
}Пошаговое решение: автоматическое удаление 301 редиректов из индекса с IndexNow
Основная идея — при обнаружении слуга с 301 редиректом отправлять запрос в IndexNow для удаления этого URL из индекса поисковых систем.
1. Подключение к хуку WordPress для проверки URL перед отправкой
Лучше всего интегрировать проверку в момент, когда URL меняется или при плановом сканировании.
add_action('init', 'check_and_send_indexnow_for_redirected_urls');
function check_and_send_indexnow_for_redirected_urls() {
// Например, запускать не чаще раза в сутки с помощью transient
if (get_transient('indexnow_redirects_checked')) {
return;
}
$redirected_urls = get_redirected_urls(); // Функция для получения списка URL с 301
foreach ($redirected_urls as $url) {
send_url_to_indexnow($url, 'delete');
}
set_transient('indexnow_redirects_checked', true, 24 * HOUR_IN_SECONDS);
}2. Функция получения URL с 301 редиректом
function get_redirected_urls() {
global $wpdb;
$urls = [];
// Пример для плагина Redirection
$table = $wpdb->prefix . 'redirection_items';
$results = $wpdb->get_results("SELECT source_url FROM {$table} WHERE status_code = 301", ARRAY_A);
foreach ($results as $row) {
$urls[] = home_url($row['source_url']);
}
return $urls;
}3. Отправка URL в IndexNow c удалением из индекса
Пример базовой функции отправки URL в IndexNow:
function send_url_to_indexnow($url, $action = 'update') {
$key = 'ваш_ключ_IndexNow';
$api_url = 'https://api.indexnow.org/indexnow';
$payload = [
'host' => parse_url(home_url(), PHP_URL_HOST),
'key' => $key,
'keyLocation' => home_url("{$key}.txt"),
'urlList' => [$url],
'action' => $action // 'update' или 'delete'
];
$args = [
'body' => json_encode($payload),
'headers' => [
'Content-Type' => 'application/json'
],
'timeout' => 10,
'method' => 'POST'
];
$response = wp_remote_post($api_url, $args);
if (is_wp_error($response)) {
error_log('IndexNow отправка не удалась: ' . $response->get_error_message());
return false;
}
return true;
}Проверка результата после внедрения
- Проверьте логи ошибок WordPress на предмет ошибок отправки.
- Убедитесь, что transient
indexnow_redirects_checkedсоздается и обновляется. - Через инструменты поисковых систем (Bing Webmaster Tools, Yandex.Webmaster) проверьте статус удаления URL из индекса.
- С помощью
curl -I https://example.com/redirected-urlубедитесь, что URL действительно возвращает 301.
Частые ошибки и как их исправить
- Неверный ключ API IndexNow: Проверьте, что ключ загружен корректно и доступен по URL
https://example.com/ваш_ключ.txt. - Отсутствие проверки transient: Без контроля частоты вызова скрипт может перегружать сервер и API.
- Неправильный формат URL: Убедитесь, что URL для отправки начинается с домена сайта и корректно сформирован.
- Проблемы с правами доступа: Файл ключа IndexNow должен быть доступен для чтения поисковыми ботами.
- Отсутствие поддержки HTTPS: IndexNow требует HTTPS для ключевого файла и URL.
Практические советы по безопасности и производительности
- Храните ключ IndexNow вне публичных репозиториев и файлов темы. Используйте
wp-config.phpили системные переменные окружения. - Кешируйте результаты проверки редиректов. Используйте transient API, чтобы не нагружать базу и внешний сервер.
- Отправляйте URL пакетами. Если URL много, разбивайте на группы по 10-20 для уменьшения количества HTTP-запросов.
- Логируйте ошибки отправки, но не выводите их пользователю.
Сравнение вариантов реализации автоматического удаления слугов с 301 редиректом
| Метод | Плюсы | Минусы | Когда использовать |
|---|---|---|---|
| Использование плагина Redirection + WP Cron + IndexNow API | Автоматизация, интеграция с существующими редиректами | Зависимость от плагина, сложность настройки | Есть уже Redirection и много редиректов |
| Ручной скрипт на PHP с wp_remote_post и проверкой .htaccess | Полный контроль, подходит для кастомных решений | Требует знаний, может нагружать сервер | Малый объем редиректов, кастомные редиректы |
| Плагин с готовой интеграцией IndexNow (если доступен) | Простота, поддержка разработчиков | Может быть платным, ограниченная кастомизация | Быстрая интеграция без доработок |