как поисковики кушают хедеры "Location: http://..."?

12
C
На сайте с 20.01.2006
Offline
0
1200

У меня на сайте работает самопальная сессия, а так же ЧПУ. Все дело в том, что мне самому приходится определять, работают у пользователя cookie или нет и, соответственно, в случае надобности, прикреплять идентификатор сессии к ссылке.

По этому при первом заходе на мой сайт пользователя незаметно пару раз кидает туда-сюда, чтобы проверить, работают ли у него cookie. Это выглядит примерно так:

Запрос:
GET /news/15 HTTP/1.0
Ответ:
Location /cookie-check?session_id=asdqwe&referer=/news/15
Set-cookie: session_id=asdqwe
....
Запрос
GET /cookie-check?session_id=asdqwe&referer=/news/15 HTTP/1.0
Ответ:
(скрипт проверяет, сохранились ли куки у пользователя и соответствуют ли они asdqwe, затем возвращает пользователя обратно на страницу)
Location /news/15 HTTP/1.0 - если куки вслючены
или
Location /news/15?session_id=asdqwe HTTP/1.0 - если выключены
...

После чего пользователь в конечном итоге попадает на с самого начала запрашиваемую им страницу и мы уже знаем, включены у него куки или нет.

ВОПРОС

Как на эти перебросы среагирует поисковик, зашедший на мой сайт?

bondarev.pp.ru
На сайте с 29.09.2005
Offline
202
#1

А с браузерами проблем не возникает? Насколько я помню, например, 4ый экслорер отказывался ловить куку вместе с редиректом. Возможно, он не один такой, просто я с тех пор не сталкивался с такой проблемой.

По теме: поисковик будет весьма расстроен, поскольку его-то будет перекидывать на версию без кук. Причем при каждом заходе на новый URL.

bondarevpipes.com (http://ru.bondarevpipes.com/)
C
На сайте с 20.01.2006
Offline
0
#2
bondarev.pp.ru:
А с браузерами проблем не возникает? Насколько я помню, например, 4ый экслорер отказывался ловить куку вместе с редиректом. Возможно, он не один такой, просто я с тех пор не сталкивался с такой проблемой.

Не возникает. А кому нужет этот 4-й эксплорер? (:

bondarev.pp.ru:
поисковик будет весьма расстроен, поскольку его-то будет перекидывать на версию без кук. Причем при каждом заходе на новый URL.

Нет, если он (клиент,робот,т.д.) не ловит куки, во второй раз его перекидывает с идентификатором сессии в ссылке. Так что поисковый робот (если он все-же ходит по Location-ам) будет со своим идентификатором, как нормальный пользователь с выключеными печеньками.

И всетаки?

Если поисковый робот заходит на сайт (http://mysite.com/), а там ему ответ:

Server answer:
Location: http://mysite.net/news/123?a=b&c=d

... он пойдет на эту страницу??

bondarev.pp.ru
На сайте с 29.09.2005
Offline
202
#3
chin:
Не возникает. А кому нужет этот 4-й эксплорер? (:

Я к тому, что, может, он не один такой.

chin:
... он пойдет на эту страницу??

Да, пойдет. Но насчет второго раза не уверен (не связывался).

В любом случае, это несколько замедлит процесс индексации, поскольку по таким редиректам роботы ходят не сразу. Новый URL ставится в очередь, и вновь робот может прити и через пару недель. А тут еще и двойной редирект.

Вообще я бы не советовал связываться с идентификаторами сессии в урле. Неужели это настолько необходимо?

Алексей Пешков
На сайте с 24.03.2004
Offline
47
#4

Думаю, Вам полезно будет понять, чем плохи идентификаторы сессии в URI вообще.

Уверен, после этого Вам не захочется разбираться, почему Ваш самопальный вариант хуже стандартного...

C
На сайте с 20.01.2006
Offline
0
#5

Алексей Пешков

Думаю, Вам полезно будет понять, чем плохи идентификаторы сессии в URI вообще.

А как тогда идентифицировать пользователя с выключеными куками??

почему Ваш самопальный вариант хуже стандартного

Ну и как же по Вашему стандартный вариант определяет, включены куки клиента или нет?

Я могу только сказать почему он лучше (иначе я бы не заморачивался и не изобретал бы велосипеды):

Мой вариант работает исключительно с базой и не забивает /tmp нецелесообразным мусором. А так как мне всеравно надо вести в базе текущие сессии (например, чтобы посчитать количество пользователей онлайн) то какой мне смысл хранить пустые файлы?

Во вторых, я еще раз повторяю: у меня ЧПУ и так как стандартный вариант аттачит id сессии к урлу (автоматически), мне это подходит. Во вторых он пихает id в форму (hidden), который мне тоже совсем не нужен...

И вообще, я задал нормальный вопрос. Если не можете ответить, тогда не говорите не по теме... Извините.

bondarev.pp.ru,

Да, пойдет. Но насчет второго раза не уверен (не связывался).

Тоесть, если робот видет Location, он воспринимает его как очередную "ветку"?
В любом случае, это несколько замедлит процесс индексации, поскольку по таким редиректам роботы ходят не сразу. Новый URL ставится в очередь, и вновь робот может прити и через пару недель. А тут еще и двойной редирект.

Ну если все действительно так как Вы говорите, а именно как я понял: робот ходит не по всем ссылкам встреченым сразу, а по каким-то приоритетам отбирает, а все остальное ставит в очередь... Чтож, тут разумно будет продумать вариант без перекидов.
Скажите, а можно и серверного скрипта по каким-то параметрам определить что это робот? На сколько я понял, это USER-AGENT? Где взять список самых распостраненных роботов?

СКОРПИОН
На сайте с 05.01.2006
Offline
120
#6

OFF.

Самопальные сессии - это зло. Именно по указанной Вами же причине...

Если уж очень жалко бросить наработанный код измените его так, чтобы он работал без кук.

Например, создаёте "сессию". Присваиваете идентификатор, сохраняете её в базе. Сохраняете в базе под этим идентификатором инфу о пользователе (в 99 случаях из ста будет нормально). При обращенни пользователя к странице собираете о нём инфу, смотрите есть ли для такой инфы идентификатор сессии и работете с ним. Не забудьте установить время жизни сессии и перед выборкой из базы делать удаление тех, время жизни которых истекло. Как идентифицировать пользователя - решайте сами. Вариантов масса, чем больше информации Вы соберёте, тем надёжнее будет работать механизм.

З.Ы. Не доверяйте кукам...

З.Ы.Ы. Оно Вам всё это надо? Проще написать обработку каталога /tmp, если он у Вас забивается мусором, чем извращаться так, как Вы пытаетесь это сделать в данный момент. Для того и был введён механизм сессий, чтобы помочь нормальным программистам избегать извращений...

З.Ы.Ы.

Если уж совсем неймётся - эмулируйте через жаба-скрип метод POST. Сделайте на каждой странице форму с единственным HIDDEN-элементом, в котором будете хранить идентификатор сессии. Добавьте на ссылки метод onClick...

• Контекстные ссылки с внутренних страниц навсегда (/ru/forum/370882) • Качественные сайты для заработка на контекстной рекламе и ссылках
bondarev.pp.ru
На сайте с 29.09.2005
Offline
202
#7
СКОРПИОН:
Если уж совсем неймётся - эмулируйте через жаба-скрип метод POST. Сделайте на каждой странице форму с единственным HIDDEN-элементом, в котором будете хранить идентификатор сессии. Добавьте на ссылки метод onClick...

Вот это самый нормальный вариант, хоть и через Ж. :) onClick можно явно в код не вставлять, а сделать это на JavaScript через getElementsByTagName('a'). Один раз скрипт приписал в конец шаблона, и больше не вспоминать об этом.

Хотя, если уж пытаться охватить ВСЕХ пользователей, то надо вспомнить, что у некоторых и JavaScript отключен.

P.S. А что за задача такая, что без сессий не обойтись? Неужели настолько важно учесть ользователей без кук, что вы готовы ради этого пожертвовать оптимизацией сайта? (думаю, для вас не секрет, что PR у каждой вашей страницы будет минимальным?)

А насчет роботов - посмотрите UserAgent в логах (если он у вас пишется), если у вас есть логи за месяц-другой, там можно найти имена почти всех существующих роботов.

C
На сайте с 20.01.2006
Offline
0
#8

СКОРПИОН,

Вы конечно извините... Но я не первый день в IT. И не первый год. Я прекрасно знаю все это. Если Вы даете такие советы.. Вы мне не подскажите, как тогда работает встроенный механизм PHP чтобы определить включены куки или нет?

СКОРПИОН:
Если уж совсем неймётся - эмулируйте через жаба-скрип метод POST. Сделайте на каждой странице форму с единственным HIDDEN-элементом, в котором будете хранить идентификатор сессии. Добавьте на ссылки метод onClick...
bondarev.pp.ru:
через Ж :)

...

bondarev.pp.ru,

Я думаю, буду копать в сторону UserAgent, хотя это тоже через Ж... Тоесть, если UserAgent=робот, то сайт будет вести себя совсем по другому.

Спасибо всем.

P.S. Фрагмент из кода самопального(!) механизма сессии форума vBulletin v3.5.2 (такого как тут).

// automatically determine whether to put the sessionhash into the URL
if (sizeof($_COOKIE) > 0 OR preg_match("#(google|msnbot|yahoo! slurp)#si", $_SERVER['HTTP_USER_AGENT']))
{
// they have at least 1 cookie, so they should be accepting them
.....

No comments?

СКОРПИОН
На сайте с 05.01.2006
Offline
120
#9
chin:
СКОРПИОН,
Вы мне не подскажите, как тогда работает встроенный механизм PHP чтобы определить включены куки или нет?

Тупо работает... А по-другому никак.

Читайте: http://phpfaq.ru/sessions

C
На сайте с 20.01.2006
Offline
0
#10
Тупо работает... А по-другому никак.

Я уже сам понял, даже и читать не надо... Он просто первый раз аттачит идентификатор, а второй раз уже разбирается...

Короче, заключение.. Location стараться не использовать? Ну, я так посмотрел, что нучно всетаки учитывать User-Agent зашедшего и если это робот, вести себя немного по другому..

Тогда еще несколько вопросов (чтобы не заводить новый топик)

1. Какие лучше ссылки выдавать в контенте сайта, относительные или абсолютные? К примеру:

1.1. <a href="/news">news</a>

1.2. <a href="http://mysite.com/news">news</a>

2. Какой способ "оптимальнее" для поисковиков?

2.1. <img src="/images/img_001.gif" onclick="goToUrl('/news');">

2.2. <a href="javascript:goToUrl('/news');"><img src="/images/img_001.gif"></a>

И вообще, как выходить из этой ситуации, когда мне нужно, допустим, не просто пойти по ссылке, а пропустить через функцуию javascript?

3. Как поступить с окнами popUp? Поисковики их читают?

4. К примеру, мы на лету создаем в JS элемент с каким-то текстом...

var div = document.createElement('div');
div.innerHTML = '<div>some content</div>';
document.body.appendChild(div);

Это будет читаться роботом? Он вообще словит JS?

Спасибо всем.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий