В процессе разработки и поддержки WordPress-сайтов часто возникает необходимость удалить лишние или устаревшие произвольные метаключи (custom meta keys), которые могут замедлять работу сайта и создавать лишнюю нагрузку на базу данных. Однако удаление метаданных требует осторожности, чтобы не повредить SEO-позиции и не нарушить функциональность сайта.
Что такое произвольные метаключи и зачем их удалять
Произвольные метаключи — это дополнительные данные, связанные с записями, страницами или другими типами контента в WordPress. Они хранятся в таблице wp_postmeta и позволяют расширять функциональность без изменения структуры базы данных.
С течением времени накапливаются ненужные или устаревшие метаданные, которые не используются, но продолжают занимать место и замедляют запросы к базе данных. Удаление таких метаключей помогает ускорить сайт и облегчить резервное копирование.
Однако некоторые метаданные напрямую влияют на SEO (например, ключевые слова, описания или настройки плагинов SEO). Их удалять нельзя, иначе можно потерять позиции в поисковой выдаче.
Как безопасно определить, какие метаключи можно удалить
Прежде чем удалять метаключи, необходимо их проанализировать. Вот несколько шагов:
- Сделайте резервную копию базы данных. Любые изменения должны быть обратимыми.
- Проанализируйте метаключи через SQL-запрос:
SELECT meta_key, COUNT(*) AS count FROM wp_postmeta GROUP BY meta_key ORDER BY count DESC;
Этот запрос покажет список всех метаключей и количество их вхождений.
- Проверьте документацию используемых плагинов. Некоторые метаданные создаются установленными расширениями и могут быть необходимы.
- Используйте плагины для анализа метаданных: Например, Clearfy Pro имеет инструменты для очистки базы от лишних метаданных.
- Тестируйте на тестовом сайте. Перед удалением проверьте, как повлияют изменения на работу сайта.
Пример удаления произвольных метаключей с помощью PHP-кода
Для массового удаления метаданных можно использовать специальную функцию. Ниже пример, как с помощью собственного кода удалить все метаданные с ключом _wp_pro_unused_meta:
function wp_pro_delete_unused_meta() {
global $wpdb;
$meta_key = '_wp_pro_unused_meta';
$deleted = $wpdb->query($wpdb->prepare(
"DELETE FROM {$wpdb->postmeta} WHERE meta_key = %s",
$meta_key
));
return $deleted;
}
// Запускаем функцию один раз
add_action('init', function() {
if (current_user_can('administrator')) {
$deleted_count = wp_pro_delete_unused_meta();
error_log("Удалено метаданных с ключом _wp_pro_unused_meta: $deleted_count");
}
});
Этот код удалит все записи с указанным ключом из таблицы wp_postmeta. Важно запускать такую функцию только один раз и на безопасном окружении.
Использование плагинов для очистки метаданных
Если не хочется писать код, можно использовать готовые решения:
- Clearfy Pro — мощный инструмент для оптимизации сайта, в том числе очистки базы от мусорных метаданных.
- WP-Optimize — плагин для оптимизации базы данных, который позволяет сразу удалять устаревшие и неиспользуемые данные.
- Advanced Database Cleaner — позволяет вручную или автоматически удалять ненужные метаданные и оптимизировать таблицы.
Большинство таких плагинов имеют понятный интерфейс и позволяют создавать исключения для важных метаданных.
Как не навредить SEO при удалении метаданных
Для SEO-оптимизации метаданные часто содержат важные параметры, например, описания или настройки плагинов SEO (Yoast SEO, Rank Math и др.). Удаление этих ключей может привести к потере настроек и ухудшению позиций.
Рекомендации:
- Исключайте из удаления все метаключи, связанные с SEO-плагинами. Обычно они начинаются с префикса, например,
_yoast_илиrank_math_. - Перед удалением сделайте экспорт SEO-настроек (большинство SEO-плагинов поддерживают экспорт).
- Проверьте работу сайта и индексирование после очистки.
Автоматизация удаления устаревших метаданных с WP-Cron
Если на сайте часто появляются временные метаданные (например, для кэширования или временных данных плагинов), можно автоматизировать их удаление с помощью WP-Cron.
function wp_pro_delete_old_meta() {
global $wpdb;
// Пример: удаляем метаданные старше 30 дней с ключом '_wp_pro_temp_meta'
$date_threshold = date('Y-m-d H:i:s', strtotime('-30 days'));
$meta_key = '_wp_pro_temp_meta';
$post_ids = $wpdb->get_col($wpdb->prepare(
"SELECT post_id FROM {$wpdb->postmeta} pm
JOIN {$wpdb->posts} p ON pm.post_id = p.ID
WHERE pm.meta_key = %s AND p.post_date < %s",
$meta_key, $date_threshold
));
if (!empty($post_ids)) {
foreach ($post_ids as $post_id) {
delete_post_meta($post_id, $meta_key);
}
}
}
add_action('wp_pro_delete_old_meta_hook', 'wp_pro_delete_old_meta');
// Регистрируем событие на ежедневный запуск
if (!wp_next_scheduled('wp_pro_delete_old_meta_hook')) {
wp_schedule_event(time(), 'daily', 'wp_pro_delete_old_meta_hook');
}
Такой подход позволяет не накапливать мусорные данные и поддерживать базу в чистоте автоматически.