PHP5: как проверить и установить предварительно определенный канонический URL-адрес в качестве местоположения заголовка через редирект 301? - PullRequest
0 голосов
/ 03 апреля 2011

Я застрял с общей ошибкой дублирующегося контента, который я хочу решить:
Гиперссылка в браузере показывает: http://website.org/nl/amsterdam

Теперь это не канонический URL, и я бы хотел, чтобы веб-страница перенаправлялась на ее известный канонический URL-адрес (при условии, что текущая страница еще не является канонической страницей)

<?php $canonical = "http://website.org/nl/amsterdam-grass-is-greener;

  header("HTTP/1.1 301 Moved Permanently" );
  header("Status: 301 Moved Permanently" );
  header("Location: " . $canonical);  // shows below picture, while url looks good

  exit(0);

<html><head><link rel="canonical" href="<?=$canonical?></head>...</html>

Основной вопрос: как заставить это работать? В настоящее время неканонический URL-адрес, кажется, хочет напрямую перейти к каноническому URL-адресу (проверено с помощью информации HEAD), но как только он прибывает туда, PHP застревает и показывает:

enter image description here

Незначительный вопрос: звучит ли вам эта идея хорошо? Поскольку поисковые системы не используют канонический язык настолько строго, а используют его только как подсказку, часто сохраняя неправильный, неканонический URL-адрес. Делает ли приведенное выше правило более сильным через редирект 301 для поисковых систем, чтобы сохранить хорошие версии в результатах поиска? Решает ли это также мою проблему с дублирующимся содержимым?

Ответы [ 2 ]

1 голос
/ 03 апреля 2011

Кажется, канонические попытки перенаправить тоже.
Вы должны использовать какой-нибудь HTTP-сниффер, чтобы увидеть, что на самом деле происходит, когда вы нажимаете какую-то кнопку. Создайте себе что-то подобное дополнению LiveHTTPHeaders Firefox и посмотрите, какие перенаправления выполняются.

1 голос
/ 03 апреля 2011

Попробуйте:

if(isset($canonical) && ('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] != $canonical)) {
  header ('HTTP/1.1 301 Moved Permanently');
  header('Location: ' . $canonical);
  exit();
}

Чтобы ответить на ваш более общий вопрос, это ненадежное решение (если только ваш сайт не очень маленький), поскольку оно требует жесткого кодирования канонического URL-адреса каждой страницы. Как можно ближе вы должны стремиться создать структуру URL, которая имеет только один URI на ресурс. Тем не менее, это решает насущную проблему поисковых систем, воспринимающих дублированный контент.

Редактировать: Спасибо, Гамбо.

...