В чем проблема с массовым изменением мета-тегов в WordPress?
По умолчанию WordPress не предлагает встроенных инструментов для массового редактирования SEO мета-тегов, таких как title и meta description. Многие пользуются плагинами (Yoast SEO, All in One SEO), но они не всегда подходят: например, при желании минимизировать количество плагинов, или если нужно выполнить очень специфические изменения. В таком случае помогает прямое изменение в базе данных или создание кастомных функций.
Диагностика: как проверить текущие значения title и meta description
Для начала нужно понять, какие meta-теги сейчас установлены. Сделать это можно так:
- Откройте исходный код страницы (Ctrl+U) и найдите <title> и <meta name="description">.
- В админке WordPress перейдите в редактирование записи/страницы и проверьте наличие SEO-полей, если они есть.
- Если SEO-поля отсутствуют, значит мета-теги генерируются автоматически (часто по заголовку и контенту).
Для массовой диагностики можно выполнить SQL-запрос, чтобы получить список всех записей с их заголовками и мета-описаниями (если они хранятся в usermeta или postmeta):
SELECT p.ID, p.post_title, pm.meta_key, pm.meta_value FROM wp_posts p LEFT JOIN wp_postmeta pm ON p.ID = pm.post_id WHERE pm.meta_key IN ('_yoast_wpseo_title', '_yoast_wpseo_metadesc') AND p.post_type = 'post';Пошаговое решение: массовое изменение title и meta description через functions.php
Если вы хотите автоматизировать изменение мета-тегов без плагина, можно использовать хук wp_head, чтобы программно переопределить эти теги. Например, добавим префикс к title и описание для всех постов.
Добавьте следующий код в файл functions.php вашей темы или дочерней темы:
function custom_modify_seo_tags() {
if (is_singular('post')) {
global $post;
$prefix = 'Мой сайт - ';
$title = $prefix . get_the_title($post->ID);
$description = get_post_meta($post->ID, '_custom_meta_description', true);
if (!$description) {
// Если описания нет, создадим на основе excerpt
$description = wp_trim_words(strip_tags($post->post_content), 20);
}
echo "<title>" . esc_html($title) . "</title>\n";
echo "<meta name=\"description\" content=\"" . esc_attr($description) . "\"/>\n";
// Остановим дальнейший вывод стандартных SEO тегов
remove_all_actions('wp_head');
add_action('wp_head', 'custom_modify_seo_tags');
}
}
add_action('wp_head', 'custom_modify_seo_tags', 1);Этот код заменит title и meta description для всех одиночных постов, добавив префикс к заголовку и используя либо пользовательское поле _custom_meta_description, либо краткое описание из контента.
Массовое добавление пользовательских описаний через SQL
Чтобы добавить уникальные описания в _custom_meta_description для всех постов, можно использовать пример SQL-запроса:
INSERT INTO wp_postmeta (post_id, meta_key, meta_value)
SELECT ID, '_custom_meta_description', LEFT(REPLACE(post_content, '\n', ' '), 160) FROM wp_posts
WHERE post_type = 'post' AND post_status = 'publish'
AND ID NOT IN (SELECT post_id FROM wp_postmeta WHERE meta_key = '_custom_meta_description');Проверка результата после внедрения
- Откройте несколько постов на сайте и проверьте в исходном коде страницы, что title начинается с «Мой сайт -» и присутствует meta description.
- Можно использовать онлайн инструменты, например Meta Tag Analyzer для автоматической проверки мета-тегов.
- Для массовой проверки используйте WP-CLI команду:
wp post list --post_type=post --fields=ID,post_title --format=csv | while IFS=, read -r ID TITLE; do
curl -s https://example.com/?p=$ID | grep -E '<title>|<meta name="description"';
doneЧастые ошибки и как их исправить
- Тег title дублируется или не обновляется — возможно, конфликтуют плагины SEO. Отключите плагины SEO или убедитесь, что ваш код выполняется с приоритетом выше (например, 1).
- meta description не выводится — проверьте, что в коде нет других хуков, которые удаляют или перезаписывают
wp_head. - производительность падает — старайтесь не выполнять тяжелые операции в хуках, используйте кэширование.
- SQL-запрос не сработал — проверьте префикс таблиц, а также права пользователя базы данных.
Практические советы по безопасности и производительности
- Не удаляйте все действия из
wp_headбез разбора — это может сломать работу других важных плагинов и тем. - Для крупных сайтов лучше хранить SEO мета-теги в пользовательских полях и обновлять их через WP-CLI или отдельные скрипты, чтобы избежать нагрузки.
- Используйте подготовленные запросы и функции WordPress для работы с базой данных (например,
$wpdb->prepare()), если реализуете массовые операции в PHP. - Для автоматизации обновления SEO мета-тегов рассмотрите использование плагинов типа Clearfy Pro от WPSHOP — они оптимизированы и безопасны.
Сравнение вариантов массового обновления SEO мета-тегов
| Метод | Плюсы | Минусы | Подходит для |
|---|---|---|---|
| Плагины SEO (Yoast, RankMath) | Удобство, много функций, поддержка | Нагрузка, конфликты, ограниченная кастомизация | Малые и средние сайты |
| Код в functions.php (как в статье) | Гибкость, отсутствие лишних плагинов | Требует знаний, риск ошибок | Опытные разработчики |
| Прямое обновление базы через SQL | Очень быстро, массово | Риск повреждения данных, требует бэкапа | Администраторы с доступом к БД |