Диагностика проблемы: почему URL не отправляются при изменении атрибутов товаров
В WooCommerce атрибуты товаров часто используются для вариативных товаров и влияют на отображение страниц. Изменения атрибутов не всегда вызывают стандартные хуки обновления поста, поэтому IndexNow не получает сигнал на отправку обновлённого URL. В результате поисковые системы продолжают индексировать устаревшую версию страницы.
Основные симптомы:
- Изменение описания или цены товара корректно отправляет URL в IndexNow;
- Изменение атрибутов (например, цвет, размер) не приводит к обновлению индекса;
- Отсутствие записей в логах отправки URL IndexNow после изменений атрибутов.
Пошаговое решение: автоматическая отправка URL при изменении атрибутов WooCommerce
Для отслеживания изменений атрибутов используйте хук woocommerce_attribute_updated и хуки сохранения вариативного товара, чтобы инициировать отправку URL в IndexNow. Пример кода для functions.php или кастомного плагина:
add_action('woocommerce_update_product', 'send_indexnow_on_product_attribute_change', 10, 1);
add_action('woocommerce_save_product_variation', 'send_indexnow_on_product_attribute_change', 10, 1);
function send_indexnow_on_product_attribute_change($product_id) {
if (empty($product_id)) {
return;
}
$url = get_permalink($product_id);
if (!$url) {
return;
}
// Функция отправки URL в IndexNow
send_url_to_indexnow([$url]);
}
// Пример простой функции отправки URL в IndexNow
function send_url_to_indexnow(array $urls) {
$endpoint = 'https://api.indexnow.org/indexnow';
$key = 'ВАШ_КЛЮЧ_API_INDEXNOW'; // Замените на ваш ключ
$body = json_encode([
'host' => parse_url(home_url(), PHP_URL_HOST),
'key' => $key,
'keyLocation' => home_url('/'. $key .'.txt'),
'urlList' => $urls
]);
$response = wp_remote_post($endpoint, [
'headers' => [
'Content-Type' => 'application/json'
],
'body' => $body,
'timeout' => 10
]);
if (is_wp_error($response)) {
error_log('IndexNow send error: ' . $response->get_error_message());
} else {
error_log('IndexNow send success: ' . print_r($response, true));
}
}
Обратите внимание, что функция send_url_to_indexnow — упрощённый пример. В продакшене рекомендуем использовать очередь или пакетную обработку URL.
Проверка результата после внедрения
- Измените атрибут в любом вариативном товаре.
- Проверьте логи ошибок сервера или debug.log — должна появиться запись об успешной отправке URL.
- Используйте инструменты IndexNow (например, https://www.bing.com/webmaster/tools/indexnow) для проверки актуальных URL и подтверждения отправки.
- Через 1-2 дня убедитесь, что поисковые системы обновили данные по изменённым атрибутам.
Частые ошибки и как их исправить
- Отсутствие хуков на изменение атрибутов: многие разработчики используют только
save_post, но изменения атрибутов часто не вызывают этот хук. Решение — использовать специальные хуки WooCommerce (woocommerce_update_product,woocommerce_save_product_variation). - Неверно указан ключ API или его расположение: IndexNow требует доступ к файлу ключа по URL. Проверьте, что файл
ВАШ_КЛЮЧ_API_INDEXNOW.txtдоступен по адресуhttps://example.com/ВАШ_КЛЮЧ_API_INDEXNOW.txt. - Отправка URL без проверок: отправка пустых или невалидных URL приводит к ошибкам. Добавьте в код проверку валидности URL перед отправкой.
- Отсутствие контроля частоты отправки: массовые изменения могут заблокировать API. Реализуйте очередь и ограничение частоты отправок.
Практические советы по безопасности и производительности
- Храните ключ API вне публичного доступа, например в wp-config.php, и передавайте в функцию через константу.
- Используйте транзиенты или опции для хранения очереди URL и отправляйте их пакетами с помощью WP-Cron.
- Добавьте логирование ошибок отправки с возможностью уведомления по email или в админ-панель.
- Оптимизируйте время выполнения функций, чтобы не замедлять сохранение товара — отправка URL должна выполняться асинхронно или в фоне.
Сравнение вариантов интеграции отправки URL при изменении атрибутов
| Метод | Преимущества | Недостатки | Пример применения |
|---|---|---|---|
Хуки WooCommerce (woocommerce_update_product, woocommerce_save_product_variation) | Прямой контроль, точное отслеживание изменений | Нужно писать дополнительный код для очередей | Отправка URL сразу после сохранения атрибута |
| WP-Cron с периодической проверкой изменений в базе | Уменьшение нагрузки на сервер, пакетная отправка | Задержка в отправке, сложность реализации | Отправка списка URL раз в 10 минут |
| Плагины IndexNow с поддержкой WooCommerce | Готовое решение, поддержка обновлений | Могут иметь лишний функционал, ограничение кастомизации | Clearfy Pro с IndexNow модулем (https://wpshop.ru/plugins/clearfy?utm_source=indexnow.su&utm_medium=article&utm_campaign=indexnow-i-woocommerce-reshenie-problem-s-otpravkoy-url-pri-izmeneniyah-atributov-tovarov) |