На моем сайте загружен 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;
    }
}

Разбивка кода:

  1. add_action('template_redirect', 'redirect_amp_to_non_amp');
    • Эта строка привлекает пользовательскую функцию redirect_amp_to_non_amp WordPress template_redirect действие. template_redirect перехватчик выполняется непосредственно перед тем, как WordPress определит, какой шаблон или файл должен обработать запрос. Это хороший этап для направления.
  2. функция redirect_amp_to_non_amp() {…}
    • Вот функция под названием redirect_amp_to_non_amp определено. Эта функция содержит логику для проверки того, относится ли текущий запрос к странице AMP и должен ли он быть перенаправлен.
  3. 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.
  4. глобальный $wp;
    • Эта строка создает глобальную переменную $wp доступен в функции. $wp переменная является экземпляром WP класс и содержит свойства, связанные с текущим запросом, включая строку запроса.
  5. $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.
  6. wp_redirect ($ current_url, 301);
    • Эта функция перенаправляет пользователя на версию страницы, отличную от AMP (содержащую $current_url) с кодом состояния HTTP 301, указывающим на постоянное перенаправление. Это полезно для поддержания ценности SEO, поскольку поисковые системы обновляют свой индекс URL-адресами, отличными от AMP.
  7. Выход;
    • Эта команда используется для остановки выполнения скрипта сразу после запуска перенаправления. Это не позволяет WordPress продолжать загружать исходную страницу AMP или выполнять дополнительный код, который может помешать перенаправлению.
ЧИТАТЬ  27-летний эксперт по поиску раскрывает 5 шагов, которые помогут улучшить SEO

Перенаправьте шаблон пользовательской страницы на другой 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.

Source