Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: SEO + .htaccess + index.php
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Задался я тут целью оптимизировать свою систему под SEO.
1) В браузерах юзверей в 99% установлен какой-нибудь мейл-спутник, яндекс-бар и прочая снедь. Эта "снедь" отправляет информацию о посещенных ссылках прямиком к хозяевам "снеди", собственно к поисковикам.
2) Поисковики индексируют ссылки сайтов полностью как строку ^(.+)$
3) Например ваша единая точка входа (index.php) хватает все, что ей бросил апач, если не нашел реальный файл по запрашиваемому пути. Далее собственно роутер, обработка, вывод.. Вот стандартный реврайт:
Что мы имеем?
Как правило параметры передаются в следующем формате: /controller/action?param=value
Внутри экшна контроллер получает значения нужных ему GET-параметров, и отрабатывает свою часть контента.
Отлично.
Теперь представьте себе ситуацию, когда некий "злоумышленник", конкурент или кто-то еще, с установленным в браузере каким-нибудь "спутником-баром" начинает отправлять на ваш сайт запросы вида: /controller/action?param=value /controller/action?param=value&a=20 /controller/action?param=value&xxx=zzz /controller/action?param=value&sss=3&a=test
Что делает ваш сайт?
Точно! Отдает один и тот же контент по разным URL, не так ли?
Тогда - прощай мои позиции в поисковике, который ломанется на эти "левые" ссылки.
Я не стану тут описывать методы решения этой проблемы, она решаема у каждого по своему, главное, что на стороне логики вашего приложения.
Теперь есть еще одна задача - реальные файлы, статические страницы.
Например contacts.html, с ним же та же проблема - можно слать любые параметры.
Что делать в такой ситуации?
Поможет .htaccess:
Опишу построчно что тут происходит:
1) вкл реврайта
2) указали где работаем
3) условие, если часть запроса после "?" не пуста ИЛИ
4) если по запрашиваемой строке ДО "?" нет такого файла
5) перенаправить все на index.php
Тут правда есть одна проблема, но она всплыла на уровне работы сервера.
Сам знак вопроса, как разделитель левой и правой части запроса, в условиях участвовать не может. Т.е. запрос вида /a?b=c может быть обработан как explode("?", $request) с потерей разделителя.
Тогда единственный адрес, который может пройти в качестве "левого" будет выглядить как /contacts.html?.
Из апача, я не смог вычленить этот злополучный знак вопроса.
Впереди nginx - посмотрим как он поведет себя в такой настройке.
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
ты видел официальные версии по SEO?
знающие люди сказали) (Добавление)
гет..... однохерственно
DeepVarvar
Отправлено: 12 Декабря, 2012 - 22:53:32
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
LIME пишет:
ты видел официальные версии по SEO?
знающие люди сказали)
Вилами на воде.
К тому же интересно, как тогда поисковики, по мнению "знающих людей" индексируют этот форум, в котором нет ЧПУ, а есть только GET-параметры, если поисковикам "всеравно" на наличие/отсутствие и значения этих параметров, м?
Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011 Откуда: Беларусь
Помог: 69 раз(а)
если так - то плохо (Добавление)
некрасивые получаются урлы
----- То что программа работает, не означает что она написана правильно!
Champion
Отправлено: 13 Декабря, 2012 - 08:34:00
Активный участник
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
DeepVarvar, есть такая штука как <meta name="URL" content="http://www.site.ru/realPageUrl?with=required&deferent=parameters..." />
Если на дублях страниц он будет, то писковики поймут, какая страница - оригинал.
Только вот вопрос, как сфомировать этот урл - для этого надо быть в курсе во всех экшнах, какие они могут принимать гет-параемтры и, например, для meta name="URL" генерить урл, в котором все возможные гет параметры слева направо в алфавитном порядке со совими значениями. Но это может превратиться во что-то сильно ужасное.
Можно иметь в контроллерах карту экшнов, какие они параметры принимают, и в init контроллера генерить этот meta name="URL" , но нужно тогда внимательно поддерживать эту карту.
Можно перечисмлисть в robots.txt в clean-param все бестолковые геты, но их приблизительно бесконечное число.
Можно забить
DeepVarvar
Отправлено: 13 Декабря, 2012 - 09:48:25
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Champion пишет:
Можно иметь в контроллерах карту экшнов, какие они параметры принимают
Все намного проще, вариант 1:
1) разбираем URL, $q = explode("?",$x), $cp = explode("/", $q[0]), $gp = explode("&", $q[1])
2) берем по чуть array_shift($cp) подключая нужный контроллер, экшн
3) берем нужные в экшне параметры из $gp, если брали $gp['id'], unset($gp['id']), и так на каждый забираемый экшном параметр
4) если что-то осталось в $cp или в $gp - кричим что нам подсунули гадость (404).
Все намного проще, вариант 2 (улучшение):
Все то же самое, только движения происходят не с работой контроллеров с экшнами, а с тестированием конфига route.ini, например.
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
DeepVarvar пишет:
3) берем нужные в экшне параметры из $gp, если брали $gp['id'], unset($gp['id']), и так на каждый забираемый экшном параметр
Ну я не очень представляю, как можно предусмотреть, какие реально у нас "все нужные параемтры", потому что иногда нужных параметров может быть побольше, чем там id или page, и они могут меняться. Это всё-таки где-то должно быть описано?
По поводу 404, мне кажется, это немного жесткая мера. Если ты забудешь о каком-нибудь параметре, то будешь отдавать 404 на вполне нормальную страницу. Но, с другой стороны, 404 быстро себя обнаружит)
Плюс, разные счетчики, яндексдиректы и прочие погут цеплять к урлу свои финтифлюшки, типа utm_source и пр. На них тоже не надо отдавать 404, но они и не должны делать дублей. Поэтому, по-моему, meta url + clean-param - необходимая мера, а как определять список допустимых гет-параметров - отдельное дело.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.