Преимущества индексации страниц с mod_rewrite

Автор статьи: Беляев Александр aka gid ©
Сайт Автора: gid.gorodok.net
E-mail Автора: gid87@mail.ru
Дата публикации: 08.06.2006

            Модуль mod_rewrite.so в первую очередь предназначен для имитации файлов и папок на серверах типа Apache. Т.е. папки или файлы не обязательно должны существовать на сервере, их может заменять один или несколько серверных исполняемых скриптов с расширениями .php, .asp или любые другие исполняемые на стороне сервера программы.

Многие сайты, которые поисковые роботы и некоторые люди считают статическими (действительно состоящими из файлов и папок), на самом деле являются динамическими (их содержание генерируется в зависимости от того, какой URL был передан скрипту). Людей ввести в заблуждение куда проще, чем поисковых роботов, т.к. они помимо url смотрят еще и на все заголовки, возвращаемые сервером в ответ на запрос кокой либо страницы или файла, и в зависимости от этого решают к какому типу относится сайт и как его индексировать.

Так как же динамические сайты обманывают поисковиков, и главное, зачем им это нужно? Ответ на этот вопрос прост, они отсылают им такие заголовки (header), что бы поисковики поверили в то, что это действительно физически существующие файлы. Ну а нужно это многим сайтам, и в первую очередь для экономии трафика. Ведь если сайт является популярным и при этом очень большим (больше 100 Mb чистого контента), то поисковые системы могут индексировать его почти каждый день, что с точки зрения расчетов 100x30≈3 Гигабайта, и это при условии что сайт индексирует всего один поисковый робот. А при симуляции реальных файлов, и отправке правильных заголовков поисковики не будут "скачивать" все уже проиндексированные страницы, при условии, что их размер и дата не будут меняться с течением времени.

Для работы с mod_rewrite вам необходимо в корневой папке сайта создать (если нет) или дописать в уже существующий .htaccess, строку:

RewriteEngine on

После этого, если mod_rewrite был установлен на вашем сервере, он должен начать работать. О том, как использовать все возможности mod_rewrite и вообще, что это такое, вы можете почитать в других моих статьях: Псевдостатика (mod_rewrite). Часть 1,  Часть 2.

После то как mod_rewrite был настроен и сайт был приспособлен для работы с ним, т.е. все динамические URL были преобразованы в статические, можно приступать к исправлению отсылаемых заголовков. Основная масса поисковых роботов при индексации запрашивает только дату последней модификации и размер документа, но есть и более привередливые, и чтобы удовлетворить всех мне пришлось изрядно повозиться с их документацией. И вот небольшая таблица, в которой описаны основные заголовки, которые запрашивают поисковики для определения типа страницы:

Название заголовка

Расшифровка

If-Modified-Since

Заголовок, который отправляет скрипту поисковый робот, в нем содержится дата (в формате GMT) последнего изменения файла, хранящегося у поискового робота. В ответ на него нужно отсылать header("HTTP/1.1 304 Not Modified"), если дата изменения этого файла не была изменена.

Content-Length

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

Last-Modified

Дата (в формате GMT) текущего изменения, должна равняться той дате, что указанна в If-Modified-Since, если вы не хотите, что бы страница была еще раз скачана роботом.

Expires

Дата (в формате GMT) действительности файла/документа, по идее после истечения этой даты поисковики должны перестать выдавать данный файл/документ в результатах поиска.

Content-Type

Содержание (тип) файла, необходим поисковику для принятия решения, скачивать файл или нет. К примеру, если файл имеет расширение .exe или .dll то его содержание, наверное, никому не понадобится, по этой причине некоторые файлы даже не скачиваются поисковыми роботами.

http_range

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

accept-ranges

Размер всего файла при использовании докачки данных (используется поисковиками крайне редко).

content-range

Позиция, с которой идет загрузка файла данных (используется поисковиками крайне редко).

В таблицу я не стал вносить заголовки состояний страницы (200, 303, 302, 301, 404), которые ваш сервер в любом случае должен отсылать сам, но если вам хочется, то вы их тоже можете изменять. Более подробную информацию ищите в статье ПРОТОКОЛ ПЕРЕДАЧИ ГИПЕРТЕКСТА -- HTTP / 1.1 и Коды ответов сервера.

Из этой статьи вы должны были усвоить, что для больших и посещаемых сайтов использование mod_rewrite + header() жизненно необходимо. Даже если вам придется полностью менять движок сайта или его переделывать (для правильного отображения всех URL), то это экономически обоснованно, т.к. тратить свой трафик на поисковых роботов не целеобразно. Ведь приблизительная цена гигабайта трафика составляет 1-2$, и из расчетов выше видно, что на одного поискового робота будет приходиться по 3-6$ в месяц, а таких ботов обычно не менее пяти, в итоге получится очень значительная сумма даже для очень богатого и крупного интернет-проекта. Поэтому большие динамические сайты лучше сразу создавать изначально ориентированные на работу с mod_rewrite + правильный header(), и тогда индексация сайта множеством поисковиков для вас не будет проблемой.

Об отправке заголовков советую почитать статью Harry Fuecks (Перевод: Муллин Сергей, Кузьма Феськов) "Кэширование в PHP".