На моем сайте загружен 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 или выполнять дополнительный код, который может помешать перенаправлению.
ЧИТАТЬ  Многие руководители считают, что их сотрудникам не хватает базовых знаний в области безопасности.

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