Почему важно обновлять внутренние ссылки при смене URL
Внутренние ссылки играют ключевую роль в SEO, навигации и удобстве пользователей. При изменении URL страниц или записей в WordPress, старые ссылки становятся битые, что негативно сказывается на позиции сайта в поисковых системах и ухудшает пользовательский опыт.
Ручное обновление всех внутренних ссылок — трудоемкий процесс, особенно если сайт большой. Поэтому автоматизация обновления ссылок позволяет сэкономить время и избежать ошибок.
В этой статье разберем, как автоматизировать обновление внутренних ссылок в WordPress при смене URL с помощью кода и рассмотрим полезные плагины, включая возможности WPSHOP.
Как устроены внутренние ссылки в WordPress
Внутренние ссылки в WordPress обычно хранятся в нескольких местах:
- В содержимом записей и страниц (post_content)
- В меню (wp_posts с типом nav_menu_item)
- В виджетах и настройках темы
- В метаданных записей (postmeta)
Для корректного обновления ссылок нужно искать и заменять старый URL во всех этих местах.
Автоматизация обновления ссылок с помощью SQL-запросов
Самый простой способ — использовать SQL-запросы для массовой замены URL в базе данных. Но важно делать резервную копию базы перед выполнением.
Пример SQL-запроса для замены ссылки в содержимом записей:
UPDATE wp_posts SET post_content = REPLACE(post_content, 'https://example.com/old-url', 'https://example.com/new-url') WHERE post_content LIKE '%https://example.com/old-url%';Аналогично можно обновлять ссылки в метаданных:
UPDATE wp_postmeta SET meta_value = REPLACE(meta_value, 'https://example.com/old-url', 'https://example.com/new-url') WHERE meta_value LIKE '%https://example.com/old-url%';Однако такой подход не учитывает ссылки в меню и других частях, поэтому лучше использовать специальные функции и хуки WordPress.
Как создать функцию в WordPress для автоматического обновления ссылок при смене URL
Для автоматизации процесса можно написать функцию, которая будет запускаться при изменении пермалинка записи и обновлять все внутренние ссылки на старый URL.
Пример функции wplinks_update_internal_links_on_url_change:
function wplinks_update_internal_links_on_url_change($post_id, $post_after, $post_before) {
// Получаем старый и новый URL
$old_url = get_permalink($post_before->ID);
$new_url = get_permalink($post_after->ID);
if ($old_url === $new_url) {
return; // URL не изменился
}
global $wpdb;
// Обновляем ссылки в содержимом записей
$wpdb->query($wpdb->prepare(
"UPDATE {$wpdb->posts} SET post_content = REPLACE(post_content, %s, %s) WHERE post_content LIKE %s",
$old_url, $new_url, '%' . $wpdb->esc_like($old_url) . '%'
));
// Обновляем ссылки в метаданных
$wpdb->query($wpdb->prepare(
"UPDATE {$wpdb->postmeta} SET meta_value = REPLACE(meta_value, %s, %s) WHERE meta_value LIKE %s",
$old_url, $new_url, '%' . $wpdb->esc_like($old_url) . '%'
));
// Здесь можно добавить обновление ссылок в меню и других местах
}
add_action('post_updated', 'wplinks_update_internal_links_on_url_change', 10, 3);Эта функция срабатывает при обновлении записи и автоматически заменяет старый URL на новый в содержимом и метаданных. По аналогии можно расширить логику для меню и других элементов.
Обновление ссылок в меню WordPress
Меню хранятся в записях с типом nav_menu_item. Для обновления ссылок в меню можно использовать следующий подход:
function wplinks_update_menu_links($old_url, $new_url) {
$menu_items = get_posts([
'post_type' => 'nav_menu_item',
'numberposts' => -1,
'meta_query' => [
[
'key' => '_menu_item_url',
'value' => $old_url,
'compare' => 'LIKE'
]
]
]);
foreach ($menu_items as $item) {
$menu_url = get_post_meta($item->ID, '_menu_item_url', true);
if (strpos($menu_url, $old_url) !== false) {
$new_menu_url = str_replace($old_url, $new_url, $menu_url);
update_post_meta($item->ID, '_menu_item_url', $new_menu_url);
}
}
}Вызывать эту функцию стоит внутри хука post_updated или отдельно при смене URL.
Использование плагинов для автоматизации обновления ссылок
Если хочется избежать ручного кода, можно использовать плагины:
- Better Search Replace — позволяет искать и заменять URL в базе данных. Удобно для разовых массовых замен.
- Velvet Blues Update URLs — автоматически обновляет ссылки после смены домена или структуры URL.
- WPSHOP Clearfy Pro — плагин оптимизации с функциями управления ссылками и автоматизацией задач, помогает поддерживать актуальность ссылок.
Ссылки на плагины с UTM-метками для wplinks.ru:
Советы по предотвращению проблем с внутренними ссылками
Чтобы минимизировать необходимость частого обновления ссылок, следуйте рекомендациям:
- По возможности не менять URL записей и страниц без веской причины.
- Использовать постоянные ссылки с понятной структурой.
- При необходимости изменения URL использовать 301 редиректы для сохранения SEO.
- Регулярно проверять сайт на наличие битых ссылок с помощью сервисов и плагинов.
- Автоматизировать обновление ссылок с помощью описанных методов.
Заключение
Автоматизация обновления внутренних ссылок при смене URL — важный элемент поддержки WordPress-сайта. Использование кастомных функций и проверенных плагинов позволяет снизить риск ошибок и улучшить SEO.
Приведенный пример функции wplinks_update_internal_links_on_url_change можно доработать под конкретные задачи и интегрировать с существующими инструментами.