На моем сайте загружен AMP, и я вижу хороший поток AMP-трафика от Google. Хотя я не большой поклонник AMP, похоже, что поисковые системы привлекают к нему немало внимания. Моя тема поддерживает AMP в сообщениях (или пользовательские типы сообщений, которые являются типами сообщений), но не поддерживает AMP в шаблоне страницы.
Поскольку Google не знает об этом, они сообщают об ошибках в пути AMP на этих страницах консоли поиска Google. И… правильно, страницы выдают ошибку 500. Я обнаружил это, когда опубликовал страницу своих самых популярных ежемесячных публикаций. Google попытался проиндексировать версию AMP с ошибкой скрипта и ошибкой.
Вместо того, чтобы игнорировать ошибку, я добавил код в свою дочернюю тему. functions.php
страница, на которую посетитель перенаправляется, если он запрашивает страницу AMP, а шаблон — это шаблон страницы:
// If there's a page URL with amp, redirect it to the parent page
add_action('template_redirect', 'redirect_amp_to_non_amp');
function redirect_amp_to_non_amp() {
// Check if this is a page and if it's an AMP request
if (is_page() && function_exists('amp_is_request') && amp_is_request()) {
// Redirect to the non-AMP version of the page
global $wp;
$current_url = home_url(add_query_arg(array(), $wp->request));
wp_redirect($current_url, 301);
exit;
}
}
Содержание
Разбивка кода:
- add_action('template_redirect', 'redirect_amp_to_non_amp');
- Эта строка привлекает пользовательскую функцию
redirect_amp_to_non_amp
WordPresstemplate_redirect
действие.template_redirect
перехватчик выполняется непосредственно перед тем, как WordPress определит, какой шаблон или файл должен обработать запрос. Это хороший этап для направления.
- Эта строка привлекает пользовательскую функцию
- функция redirect_amp_to_non_amp() {…}
- Вот функция под названием
redirect_amp_to_non_amp
определено. Эта функция содержит логику для проверки того, относится ли текущий запрос к странице AMP и должен ли он быть перенаправлен.
- Вот функция под названием
- if (is_page() && function_exists('amp_is_request') && amp_is_request()) {…}
- В функции этот условный оператор проверяет три вещи:
is_page()
: определяет, относится ли текущий запрос к странице WordPress (а не к публикации или публикации другого типа).function_exists('amp_is_request')
: проверяет, работает ли функцияamp_is_request
существует. Эта функция является частью плагина AMP и проверяет, относится ли текущий запрос к странице AMP.amp_is_request()
: если функция существует, она вызывается, чтобы определить, действительно ли текущий запрос относится к странице AMP.
- Все условие будет истинным, если запрос относится к странице.
amp_is_request
функция доступна, и текущий запрос касается версии страницы AMP.
- В функции этот условный оператор проверяет три вещи:
- глобальный $wp;
- Эта строка создает глобальную переменную
$wp
доступен в функции.$wp
переменная является экземпляромWP
класс и содержит свойства, связанные с текущим запросом, включая строку запроса.
- Эта строка создает глобальную переменную
- $current_url = home_url(add_query_arg(array(), $wp->query));
home_url()
: эта функция WordPress извлекает домашний URL-адрес сайта.add_query_arg(array(), $wp->request)
: добавляет аргумент запроса к URL-адресу. В этом случае передается пустой массив, что означает, что дополнительные аргументы запроса не добавляются, но эффективно восстанавливает текущий URI запроса без каких-либо параметров запроса (например,?amp=1
).- Результатом является текущий URL-адрес без каких-либо параметров запроса, связанных с AMP.
- wp_redirect ($ current_url, 301);
- Эта функция перенаправляет пользователя на версию страницы, отличную от AMP (содержащую
$current_url
) с кодом состояния HTTP 301, указывающим на постоянное перенаправление. Это полезно для поддержания ценности SEO, поскольку поисковые системы обновляют свой индекс URL-адресами, отличными от AMP.
- Эта функция перенаправляет пользователя на версию страницы, отличную от AMP (содержащую
- Выход;
- Эта команда используется для остановки выполнения скрипта сразу после запуска перенаправления. Это не позволяет WordPress продолжать загружать исходную страницу AMP или выполнять дополнительный код, который может помешать перенаправлению.
Перенаправьте шаблон пользовательской страницы на другой AMP
Вы также можете изменить код, чтобы он применялся к определенному шаблону страницы или идентификатору страницы.
Для конкретного шаблона страницы:
Если вы хотите, чтобы перенаправление применялось только к определенному шаблону страницы, вы будете использовать is_page_template()
функция в вашей проверке состояния. Например, если вашему шаблону присвоено имя custom-template.php
код будет выглядеть так:
function redirect_amp_to_non_amp() {
// Check if this is a specific template, the function exists, and it's an AMP request
if (is_page_template('custom-template.php') && function_exists('amp_is_request') && amp_is_request()) {
global $wp;
$current_url = home_url(add_query_arg(array(), $wp->request));
wp_redirect($current_url, 301);
exit;
}
}
add_action('template_redirect', 'redirect_amp_to_non_amp');
В этом коде is_page_template('custom-template.php')
проверяет, использует ли текущая страница custom-template.php
шаблон.
Для определенного идентификатора страницы:
Если вы хотите, чтобы перенаправление применялось только к странице с определенным идентификатором, используйте is_page()
функция с заданным идентификатором в качестве параметра. Например, если вы хотите применить его к странице с идентификатором 42, код будет выглядеть так:
function redirect_amp_to_non_amp() {
// Check if this is a specific page ID, the function exists, and it's an AMP request
if (is_page(42) && function_exists('amp_is_request') && amp_is_request()) {
global $wp;
$current_url = home_url(add_query_arg(array(), $wp->request));
wp_redirect($current_url, 301);
exit;
}
}
add_action('template_redirect', 'redirect_amp_to_non_amp');
Настраивая условный оператор в функции, вы можете точно контролировать, какие страницы или шаблоны страниц должны запускать перенаправления, отличные от AMP.