Что такое фильтр yoast_seo_title и зачем он нужен
Фильтр yoast_seo_title позволяет программно изменять заголовок страницы (meta title), который генерирует плагин YoastSEO. Это полезно, когда нужно динамически подставить данные, которых нет в стандартных шаблонах плагина, например, данные из пользовательских полей, кастомных таксономий или внешних API.
В отличие от редактирования заголовка вручную в интерфейсе, фильтр позволяет автоматизировать и масштабировать изменения, сохраняя SEO-оптимизацию.
Диагностика проблемы: почему стандартный шаблон заголовков не подходит
Если вы заметили, что в стандартных настройках YoastSEO невозможно добавить нужный параметр в title, например, значение из ACF, WooCommerce атрибута или динамический параметр из URL, значит, нужно использовать фильтр.
Для проверки текущего шаблона заголовка в YoastSEO перейдите в SEO > Внешний вид поиска > Общие или в настройки отдельных типов записей. Если там нет нужного варианта, фильтр пригодится.
Пошаговое решение: как написать и подключить фильтр yoast_seo_title
1. Создайте функцию для изменения заголовка
function my_dynamic_yoast_title($title) {
if (is_singular('product')) { // пример для WooCommerce продукта
$custom_field = get_post_meta(get_the_ID(), 'my_custom_title', true);
if (!empty($custom_field)) {
$title = $custom_field . ' | ' . get_bloginfo('name');
}
}
return $title;
}2. Подключите функцию к фильтру
add_filter('wpseo_title', 'my_dynamic_yoast_title');Обратите внимание, что фильтр wpseo_title — актуальный хук для изменения title в YoastSEO версии 15 и выше. Ранее использовался wpseo_title, но иногда встречается yoast_seo_title в старых материалах. Проверяйте версию плагина и документацию.
3. Пример для динамического параметра из URL
function my_dynamic_yoast_title_url_param($title) {
if (is_page('special-offer')) {
$param = isset($_GET['ref']) ? sanitize_text_field($_GET['ref']) : '';
if ($param) {
$title = 'Special Offer for ' . $param . ' | ' . get_bloginfo('name');
}
}
return $title;
}
add_filter('wpseo_title', 'my_dynamic_yoast_title_url_param');Проверка результата после внедрения
- Очистите кэш сайта и браузера.
- Откройте страницу, на которой должен измениться заголовок.
- Посмотрите исходный код страницы (
Ctrl+Uили ПКМ > «Просмотреть исходный код»). - Найдите
<title>и проверьте, что заголовок соответствует логике фильтра. - Для более точной проверки можно использовать инструмент Google Search Console или расширения браузера, например, Yoast SEO plugin debug.
Частые ошибки и как их исправлять
- Использование устаревшего фильтра: Плагин YoastSEO изменял хуки с версии к версии. Сейчас для title нужно использовать
wpseo_title. Проверяйте документацию. - Неправильное условие
is_singular()илиis_page(): Убедитесь, что условие корректно определяет нужную страницу, иначе фильтр не сработает. - Неправильное получение данных из поста: Если используете кастомные поля, проверяйте, что они заполнены. Используйте
get_post_meta()с правильным ID и параметрами. - Отсутствие очистки или кэша: После изменений очистите кэш плагинов, сервера и браузера.
- Незащищенный входящий параметр: При использовании данных из URL обязательно фильтруйте значения, например, через
sanitize_text_field().
Практические советы по производительности и безопасности
- Избегайте тяжелых запросов в фильтре, например, сложных запросов к базе или внешних API при формировании title. Это может замедлить загрузку страниц.
- Используйте кэширование результатов, если данные сложно получить.
- Всегда фильтруйте и валидируйте данные из пользовательского ввода.
- Проверяйте, что ваш фильтр не отключает SEO-оптимизацию YoastSEO, например, не убирает важные части title.
Сравнение вариантов изменения заголовков YoastSEO
| Метод | Плюсы | Минусы | Пример кода |
|---|---|---|---|
| Редактирование шаблонов в настройках YoastSEO | Просто, не требует кода | Ограничено стандартными переменными | — |
Использование фильтра wpseo_title | Гибко, динамически меняет title | Требует навыков PHP, может вызвать ошибки | См. код выше |
| Использование сторонних плагинов для SEO | Может добавить функции без кода | Часто избыточно, влияет на производительность | — |