Предположим, что у меня есть страница на моем веб-сайте для показа пресс-релизов в течение текущего месяца http://www.mysite.com/mediareleases.aspx
И по причинам, в которые это является приземленным для входа*, эта страница MUST быть данным строку запроса с текущим днем месяца для создания этого списка: http://www.mysite.com/mediareleases.aspx?prevDays=18
Как таковой я должен перенаправить клиентский запрос http://www.mysite.com/mediareleases.aspx
кому: http://www.mysite.com/mediareleases.aspx?prevDays=whateverDayOfTheMonthItIs
Мой вопрос, если я хочу, чтобы Google индексировал страницу без параметра запроса, я должен использовать код состояния 302 или 307 для выполнения перенаправления?
Оба указывают, что страница "временно" переместилась - который является тем, что я хочу, потому что страница "перемещается" каждый день, если Вы получаете мое значение.
[*] я использую функцию.NET с закрытым исходным кодом CMS, таким образом, мои руки связываются.
Документация Google , похоже, указывает, что и 302, и 307 обрабатываются одинаково, и что «робот Googlebot продолжит сканирование и индексирование исходного местоположения».
Но перед лицом двусмысленности вы могли бы также покопаться в RFC и попытаться сделать все правильно, с наивной надеждой, что поисковые роботы сделают то же самое. В этом случае RFC 2616 § 10.3 содержит почти идентичные определения для каждого кода ответа, за одним исключением:
302: Поскольку перенаправление может время от времени изменяться, клиент ДОЛЖЕН продолжать использовать Request-URI для будущих запросов.
307: Поскольку перенаправление МОЖЕТ время от времени изменяться, клиент ДОЛЖЕН продолжать использовать Request-URI для будущих запросов.
Это не кажется мне значительным различием. Я считаю, что 302 инструктирует клиентов, что веб-мастера ненадежны, а 307 явно сообщает веб-мастерам, что клиенты им не доверяют, поэтому они могут свободно изменять перенаправление.
Я думаю, что наиболее показательным моментом является примечание в определении 302:
Примечание: RFC 1945 и RFC 2068 указывают, что клиенту не разрешено изменять метод в перенаправленном запросе. Однако большинство существующих реализаций пользовательского агента обрабатывают 302, как если бы это был ответ 303, выполняя GET для значения поля Location независимо от исходного метода запроса.Коды состояния 303 и 307 были добавлены для серверов, которые хотят однозначно указать, какой тип реакции ожидается от клиента.
Что, на мой взгляд, означает, что 302 и 307 в значительной степени эквивалентны, но клиенты HTTP / 1.0 не смогли правильно реализовать 302 с первого раза.
Я чувствую вашу боль. Что касается решения, сложно сказать, что будут делать поисковые системы. Кажется, что у каждого свой способ обработки переадресации. Эта ссылка предполагает, что 302 проиндексирует содержимое перенаправленной страницы, но по-прежнему будет использовать ссылку на главную страницу, но неясно, что будет делать 307.
Другой способ, которым вы можете продолжить, - это перенаправление javascript и тег
, объясняющий, что происходит. Это также испортит браузеры, не поддерживающие javascript, и вам придется действовать с осторожностью, чтобы избежать процедуры обнаружения скрытых сайтов Google , но я подозреваю, что если ваш noscript содержит гиперссылку, соответствующую новому URL, все будет в порядке.
В любом случае я бы по-прежнему выполнял чисто серверный запрос, если это вообще возможно. Черт возьми, если ваш ожидаемый трафик невелик, вы можете рассматривать свою домашнюю страницу как прокси в случае, если нет строки запроса. Попросите его использовать фоновый поток, чтобы запросить себя со строкой запроса и передать результаты. : -)
edit только что увидел, что вы используете .NET. Возможно, рассмотрите этот ответ от SO: C # Могу ли я изменить переменные Request.Form? .