Если вы хотите сообщить поисковой системе, что окончательный URL - это «URL», вам нужно сделать постоянное перенаправление . Код состояния HTTP: 301
.
header('Location: http://www.mysite.com/the-real-name.htm', true, 301);
Для первого перенаправления необходимо выполнить временное перенаправление . Код состояния HTTP: 302
.
header('Location: http://www.mysite.com/index.php?id=1', true, 302);
Имейте в виду, что хорошей практикой является не только отправлять заголовки для перенаправлений, но и HTTP / HTML BODY, который также передает удобочитаемую информацию в новое местоположение. Перенаправления не должны автоматически выполняться клиентом.
Различные способы реализации
В зависимости от системы, в которой вы работаете, настройка заголовка состояния HTTP с помощью PHP может отличаться. Код выше для рабочей версии PHP. Придерживайтесь последних. Однако, если вы не можете и интеграция с сервером нарушена, вы можете немного расширить границы и немного обойти:
# Manually sending the HTTP 1/1 status line header - PHP does this nowadays, so normally not needed. But if you need it, ensure it's the first header you send.
header ('HTTP/1.1 301 Moved Permanently');
# Same here, but some CGI/FCGI+PHP implementations require you to set the Status header as well manually. Normally not needed.
header ('Status: 301');
# Set the Location header and status: (you will always need this)
header ('Location: http://www.mysite.com/the-real-name.htm', true, 301);
Всегда проверяйте, отправляет ли ваш скрипт правильные заголовки, запрашивая его с помощью инструмента, который может отображать заголовки ответа, не выполняющие перенаправление автоматически, например curl :
$ curl -i "http://www.mysite.com/index.php?id=1"
В противном случае потребуется немного времени, чтобы Google отразил изменения только для того, чтобы вы поняли, что допустили ошибку.