IndexNow — это протокол, который позволяет поисковым системам мгновенно получать информацию о новых, обновленных и удаленных страницах вашего сайта. Для интернет-магазинов на WordPress с WooCommerce правильная и эффективная отправка URL в IndexNow критически важна, особенно если у вас большой каталог товаров и частые изменения.
Почему важна оптимизация отправки URL в WooCommerce с IndexNow
Интернет-магазины часто имеют сотни или тысячи товаров, а также множество категорий, тегов и атрибутов. Если отправлять каждый URL при каждом изменении, можно быстро превысить лимиты IndexNow, что приведет к блокировке или замедлению индексации.
Оптимизация позволяет:
- Минимизировать количество запросов к API IndexNow;
- Отправлять только действительно важные изменения;
- Избежать дублирования и конфликтов в индексации;
- Ускорить появление новых продуктов и обновлений в поисковой выдаче.
Какие URL отправлять из WooCommerce в IndexNow
Основные URL, которые стоит отправлять:
- Страницы товаров — при создании, обновлении цены, изменении наличия;
- Страницы категорий — при добавлении/удалении товаров или изменении описания;
- Страницы тегов и атрибутов — если они активно используются;
- Страницы фильтров, если они индексируются поисковиками;
- Удаление URL при удалении товаров или изменении их статуса на «черновик» или «приватный».
Ненужно отправлять URL страниц корзины, оформления заказа или аккаунта, так как они не индексируются.
Практическое решение: интеграция оптимизированной отправки URL в WooCommerce
Рассмотрим пример, как реализовать оптимизированную отправку URL в IndexNow при изменении товаров и категорий с контролем частоты отправки.
Основные шаги:
- Отслеживать события изменения товаров и категорий;
- Кэшировать изменённые URL в базе или transient для групповой отправки;
- Отправлять URL пакетами раз в 15 минут через Cron;
- Удалять из кеша URL после успешной отправки;
- Обрабатывать удаление товаров и отправлять удаление URL.
Пример кода для добавления в functions.php или в свой плагин
function indexnow_su_enqueue_changed_url($url) {
$urls = get_option('indexnow_su_pending_urls', []);
if (!in_array($url, $urls)) {
$urls[] = $url;
update_option('indexnow_su_pending_urls', $urls);
}
}
// Отслеживаем обновление товара
add_action('save_post_product', function($post_id) {
if (wp_is_post_revision($post_id) || get_post_status($post_id) !== 'publish') return;
$url = get_permalink($post_id);
indexnow_su_enqueue_changed_url($url);
});
// Отслеживаем изменение категории товара
add_action('edited_product_cat', function($term_id) {
$url = get_term_link($term_id, 'product_cat');
if (!is_wp_error($url)) {
indexnow_su_enqueue_changed_url($url);
}
});
// Cron для отправки URL раз в 15 минут
add_action('indexnow_su_cron_send_urls', function() {
$urls = get_option('indexnow_su_pending_urls', []);
if (empty($urls)) return;
$api_key = 'ваш_ключ_indexnow';
$endpoint = 'https://api.indexnow.org/indexnow';
$batch = array_slice($urls, 0, 1000); // отправляем пачками по 1000
$payload = json_encode([
'host' => parse_url(home_url(), PHP_URL_HOST),
'key' => $api_key,
'keyLocation' => home_url('/key.txt'),
'urlList' => $batch
]);
$response = wp_remote_post($endpoint, [
'headers' => ['Content-Type' => 'application/json'],
'body' => $payload,
'timeout' => 15
]);
if (!is_wp_error($response) && wp_remote_retrieve_response_code($response) === 200) {
// Успешно отправлено, удаляем из очереди
$remaining = array_diff($urls, $batch);
update_option('indexnow_su_pending_urls', $remaining);
}
});
// Планируем событие Cron при активации
register_activation_hook(__FILE__, function() {
if (!wp_next_scheduled('indexnow_su_cron_send_urls')) {
wp_schedule_event(time(), 'fifteen_minutes', 'indexnow_su_cron_send_urls');
}
});
// Удаляем Cron при деактивации
register_deactivation_hook(__FILE__, function() {
wp_clear_scheduled_hook('indexnow_su_cron_send_urls');
});
// Добавляем интервал 15 минут
add_filter('cron_schedules', function($schedules) {
$schedules['fifteen_minutes'] = [
'interval' => 900,
'display' => __('Every 15 Minutes')
];
return $schedules;
});Дополнительные советы по оптимизации
Фильтрация важных изменений
Не все изменения требуют отправки URL. Например, изменение метаданных SEO или незначительные правки можно не отправлять мгновенно, а группировать и отправлять раз в сутки.
Можно расширить код, добавив проверку, какие поля изменились, и отправлять URL только при изменении цены, наличия, описания товара.
Использование специализированных плагинов
Для удобства можно использовать плагины, которые поддерживают интеграцию с IndexNow и WooCommerce. Например, плагин Clearfy Pro умеет оптимизировать отправку URL и управлять индексацией.
Также можно рассмотреть создание собственного плагина, использующего REST API WordPress и IndexNow, чтобы гибко фильтровать и контролировать отправку.
Как контролировать и отлаживать отправку URL в WooCommerce с IndexNow
Для проверки работы интеграции рекомендуем вести лог ошибок и успешных отправок. Это поможет выявлять проблемы с сетью, превышением лимитов или некорректными URL.
Добавьте простой логгер, например:
function indexnow_su_log($message) {
if (defined('WP_DEBUG') && WP_DEBUG) {
error_log('[IndexNowSU] ' . $message);
}
}И вызывайте indexnow_su_log() в местах отправки и получения ответа.
Также проверяйте статус ответа API, чтобы повторять попытки при ошибках.
Итог
Оптимизация отправки URL WooCommerce в IndexNow позволяет значительно ускорить индексацию и повысить релевантность позиций в поиске. Ключевыми моментами являются:
- Отслеживание только важных изменений;
- Группировка URL и пакетная отправка с использованием Cron;
- Обработка удаления и обновления URL;
- Логирование и мониторинг состояния отправки.
Применение предложенного решения поможет избежать проблем с лимитами IndexNow и обеспечит быстрый рост видимости вашего магазина в поисковых системах.