IndexNow — простой и эффективный протокол для мгновенного уведомления поисковых систем об изменениях на сайте. Если вы используете в WordPress кастомные типы записей (Custom Post Types), например, портфолио, отзывы, товары или мероприятия, важно обеспечить отправку URL именно этих записей в IndexNow. В этой статье я подробно расскажу, как реализовать автоматическую отправку URL из любых пользовательских типов записей WordPress с примерами кода и рекомендациями.
Почему важно отправлять URL кастомных типов записей в IndexNow
По умолчанию многие плагины и инструменты для IndexNow ориентируются на стандартные записи (posts) и страницы (pages). Однако на современных сайтах кастомные типы записей играют ключевую роль в представлении контента. Если не настроить отправку URL таких записей, изменения в них могут долго не отражаться в поисковой выдаче из-за задержек в индексации.
Отправка URL кастомных типов записей позволяет:
- Обеспечить быструю индексацию новых или обновленных материалов.
- Избежать ошибок и устаревшей информации в поисковых системах.
- Повысить качество и актуальность сниппетов в выдаче.
Это особенно важно для сайтов с большим объемом нестандартного контента.
Как настроить отправку URL кастомных типов записей в IndexNow
Шаг 1: Определяем, какие типы записей нужно отправлять
Для начала необходимо составить список типов записей, изменения в которых должны отслеживаться и отправляться в IndexNow. Например:
$indexnow_custom_post_types = ['portfolio', 'testimonial', 'event'];
Вы можете добавить сюда любые зарегистрированные типы записей вашего сайта.
Шаг 2: Отслеживаем публикацию и обновление записей
Чтобы автоматически отправлять URL в IndexNow при публикации или обновлении записи, используем хук save_post. В нашем случае функция будет проверять тип записи и если он в списке кастомных, отправлять URL.
Шаг 3: Реализация функции отправки URL в IndexNow
Для отправки URL реализуем функцию indexnow_send_url_custom_post, которая формирует и отправляет запрос на API IndexNow. Пример кода:
function indexnow_send_url_custom_post($post_id) {
// Проверяем, чтобы это не был автосохранение
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
return;
}
// Получаем тип записи
$post_type = get_post_type($post_id);
// Массив кастомных типов записей для отправки
$custom_types = ['portfolio', 'testimonial', 'event'];
if (!in_array($post_type, $custom_types)) {
return; // Игнорируем остальные типы
}
// Получаем URL записи
$url = get_permalink($post_id);
if (!$url) {
return;
}
// Ключ для IndexNow (укажите свой)
$indexnow_key = 'ваш_ключ_из_IndexNow.txt';
// Формируем URL для запроса
$endpoint = 'https://api.indexnow.org/indexnow?';
$params = http_build_query([
'url' => $url,
'key' => $indexnow_key,
]);
$request_url = $endpoint . $params;
// Отправляем запрос
wp_remote_get($request_url);
}
add_action('save_post', 'indexnow_send_url_custom_post');
Этот код при каждом сохранении записи типа portfolio, testimonial или event отправит её URL в IndexNow.
Обработка удаления и изменения статуса записей
Помимо публикации и обновления, важно отправлять информацию об удалении или смене статуса записи, чтобы поисковики оперативно исключали неактуальные URL из индекса.
Отправка URL при удалении записи
Для этого используем хук before_delete_post:
function indexnow_send_url_on_delete($post_id) {
$post_type = get_post_type($post_id);
$custom_types = ['portfolio', 'testimonial', 'event'];
if (!in_array($post_type, $custom_types)) {
return;
}
$url = get_permalink($post_id);
if (!$url) {
return;
}
$indexnow_key = 'ваш_ключ_из_IndexNow.txt';
$endpoint = 'https://api.indexnow.org/indexnow?';
$params = http_build_query([
'url' => $url,
'key' => $indexnow_key,
]);
$request_url = $endpoint . $params;
wp_remote_get($request_url);
}
add_action('before_delete_post', 'indexnow_send_url_on_delete');
Отслеживание смены статуса записи
Если запись переводится в черновик или в статус «на рассмотрении», стоит также уведомлять IndexNow о том, что URL стал неактуальным:
function indexnow_send_url_on_status_change($new_status, $old_status, $post) {
$custom_types = ['portfolio', 'testimonial', 'event'];
if (!in_array($post->post_type, $custom_types)) {
return;
}
// Если запись стала не опубликованной
if ($old_status === 'publish' && $new_status !== 'publish') {
$url = get_permalink($post->ID);
if (!$url) {
return;
}
$indexnow_key = 'ваш_ключ_из_IndexNow.txt';
$endpoint = 'https://api.indexnow.org/indexnow?';
$params = http_build_query([
'url' => $url,
'key' => $indexnow_key,
]);
$request_url = $endpoint . $params;
wp_remote_get($request_url);
}
}
add_action('transition_post_status', 'indexnow_send_url_on_status_change', 10, 3);
Советы по улучшению интеграции IndexNow с кастомными типами записей
Для более надежной работы и удобства советую учитывать следующие моменты:
- Кэширование и задержки: При большом количестве записей лучше использовать очередь или CRON-задачи для отложенной отправки URL, чтобы не перегружать сервер.
- Логирование запросов: Временно ведите лог успешных и неудачных запросов с помощью
error_logили собственного механизма, чтобы отлавливать проблемы. - Проверка статуса ответа: Используйте
wp_remote_getс последующей проверкой ответа сервера IndexNow, чтобы гарантировать успешную отправку. - Безопасность ключа: Храните ключ IndexNow в защищённом месте, например, в файле конфигурации или переменной окружения, а не в коде напрямую.
- Поддержка новых типов: При добавлении новых кастомных типов обязательно обновляйте массив
$custom_types.
Заключение
Настройка автоматической отправки URL кастомных типов записей в IndexNow — важный этап для современных сайтов на WordPress, которые используют нестандартный контент. Это значительно улучшит скорость индексации и качество выдачи в поисковых системах.
Если вы хотите расширить функционал, рекомендую обратить внимание на плагины с поддержкой IndexNow на WPSHOP. Они могут помочь автоматизировать многие процессы без дополнительного кода.