Хук get_canonical_url
в WordPress позволяет разработчикам изменять канонический URL для страниц и записей. Канонический URL указывает поисковым системам на основную версию страницы и помогает избежать проблем с дублирующимся контентом, улучшая SEO. Этот хук можно использовать, чтобы настраивать канонические ссылки в зависимости от специфики проекта или условий отображения страницы.
apply_filters( ‘get_canonical_url’, string $canonical_url, WP_Post $post )
Хук get_canonical_url
срабатывает при формировании канонического URL и позволяет его изменить перед выводом. Этот хук часто используется для динамического управления каноническими ссылками и для создания гибких условий для SEO-оптимизации сайта.
Параметры
$canonical_url
(строка): Канонический URL страницы по умолчанию. Может быть изменен и возвращен для дальнейшего использования.$post
(объект WP_Post): Объект записи, связанный с текущим каноническим URL (если применимо). Используется для условной настройки URL, основываясь на информации о текущей записи.
Пример базового использования
Чтобы изменить канонический URL для всех страниц, достаточно применить фильтр к $canonical_url
и вернуть новый URL.
add_filter( 'get_canonical_url', 'custom_canonical_url', 10, 2 );
function custom_canonical_url( $canonical_url, $post ) {
// Устанавливаем новый канонический URL для всех страниц сайта
return 'https://example.com/custom-url';
}
Этот код установит единый канонический URL для всех страниц на сайте. Такой подход не всегда подходит для SEO, но может быть полезен в специфических случаях, например, если нужно указать одну основную страницу для всех записей.
Пример #1: Канонический URL для определенного типа записей
Если необходимо изменить канонический URL только для определенного типа записей, можно использовать условие для проверки post_type
.
add_filter( 'get_canonical_url', 'canonical_url_for_custom_post_type', 10, 2 );
function canonical_url_for_custom_post_type( $canonical_url, $post ) {
// Проверяем, является ли текущий тип записи кастомным (например, 'portfolio')
if ( 'portfolio' === get_post_type( $post ) ) {
return home_url( '/portfolio/' . $post->post_name . '/' );
}
return $canonical_url;
}
В этом примере для всех записей типа portfolio
каноническая ссылка будет формироваться на основе slug записи, а для остальных записей останется без изменений. Это позволяет создавать четкую иерархию URL для поисковых систем.
Пример #2: Канонический URL для пагинации
Иногда требуется, чтобы на страницах пагинации отображался правильный канонический URL, который указывает на первую страницу основной записи.
add_filter( 'get_canonical_url', 'canonical_url_for_pagination', 10, 2 );
function canonical_url_for_pagination( $canonical_url, $post ) {
// Если текущая страница - это страница с пагинацией, указываем URL первой страницы
if ( is_paged() && $post ) {
return get_permalink( $post->ID );
}
return $canonical_url;
}
С помощью этого кода все страницы с пагинацией будут иметь канонический URL, указывающий на первую страницу записи. Это улучшает индексацию и позволяет поисковым системам понять, какая страница является основной.
Пример #3: Канонический URL для записей с кастомным полем
Иногда канонический URL нужно изменить в зависимости от значений кастомных полей. В следующем примере канонический URL изменяется, если у записи установлено определенное значение в метаполе.
add_filter( 'get_canonical_url', 'canonical_url_based_on_meta', 10, 2 );
function canonical_url_based_on_meta( $canonical_url, $post ) {
// Проверяем наличие кастомного поля 'canonical_override'
$custom_url = get_post_meta( $post->ID, 'canonical_override', true );
if ( $custom_url ) {
return esc_url( $custom_url ); // Возвращаем значение из метаполя как канонический URL
}
return $canonical_url;
}
Этот код добавляет возможность индивидуально задавать канонический URL для каждой записи через кастомное поле canonical_override
. Если поле заполнено, его значение используется как каноническая ссылка, иначе — стандартный URL.
Пример #4: Канонический URL для страниц авторов
Часто страницы авторов требуют индивидуальной настройки канонических ссылок, чтобы избежать дублирования контента между разными страницами профиля автора.
add_filter( 'get_canonical_url', 'canonical_url_for_author', 10, 2 );
function canonical_url_for_author( $canonical_url, $post ) {
// Проверяем, является ли страница страницей автора
if ( is_author() ) {
$author_id = get_query_var( 'author' );
return home_url( '/author/' . get_the_author_meta( 'user_nicename', $author_id ) );
}
return $canonical_url;
}
Этот пример позволяет настроить канонический URL для страниц авторов, заменяя стандартный URL более SEO-дружественной ссылкой, основанной на имени пользователя. Такая настройка помогает улучшить индексацию страниц авторов.
Пример #5: Канонический URL для страниц с кастомной таксономией
Если на сайте используются кастомные таксономии, например, product_category
, канонический URL можно изменить для страниц таксономии, чтобы отразить её структуру.
add_filter( 'get_canonical_url', 'canonical_url_for_custom_taxonomy', 10, 2 );
function canonical_url_for_custom_taxonomy( $canonical_url, $post ) {
// Проверяем, принадлежит ли текущая страница к таксономии 'product_category'
if ( is_tax( 'product_category' ) ) {
$term = get_queried_object();
return home_url( '/product-category/' . $term->slug . '/' );
}
return $canonical_url;
}
В данном примере каноническая ссылка для таксономии product_category
указывает на конкретный термин, что улучшает навигацию и SEO-позиции для страниц категорий продуктов.
Заключение
Хук get_canonical_url
предоставляет мощный инструмент для управления каноническими URL в WordPress. Используя этот хук, вы можете настраивать канонические ссылки для разных типов контента и условий, обеспечивая лучшую оптимизацию для поисковых систем и предотвращая проблемы с дублирующимся контентом. В зависимости от ваших потребностей, этот хук может помочь создать гибкую и SEO-дружественную структуру URL, соответствующую уникальным требованиям вашего проекта.