Серверы на Apache имеют очень хорошую и полезную функцию — mod_rewrite. Эту функцию сервера зачастую сравнивают со швейцарским ножом для работы с URL, так как она несет очень важные возможности. Кому-то сегодняшний материал покажется довольно "техническим", но в SEO без этого никак.
- Изменение URL: запись динамических URL как читаемых, буквенных URL
- 301 редирект: говорит браузеру или поисковому роботу что страница была перемещена.
Эти возможности очень разные по своим свойствам и несут разные результаты. Функция rewrite справляется с этими задачами в .conf файле сервера, либо в .htaccess файле виртуального сервера.
Как работает функция rewrite?
Это команда, которую вы записываете в один из файлов конфигурации вашего сервера. Многие записывают эту команду в файл .htaccess, который в действительности отвечает лишь за директорию на сервере, где он лежит.
Каждый запрос браузера к серверу проходит через этот файл. Помните, что при каждом посещении страницы вашего сайта происходит несколько запросов к серверу: один к HTML, один к каждому css файлу, один к каждому файлу Javascript и один к каждой картинке.
Запрошенный URL сравнивается с регулярным выражением, которое является первым параметром mod_rewrite в файле .htaccess. Если они совпадают, то второй параметр в mod_rewrite используется для создания HTML и посылается обратно браузеру. Это не обязательно означает что страница перенаправляется... для этого нужно использовать редирект.
А нужен ли вам вообще редирект? Не торопитесь...
Не путайте 301 редирект с другими решениями URL в SEO. Все они делаются через mod_rewrite и очень, очень похожи, но выполняют разные задачи.
Вы должны использовать 301 редирект когда хотите сказать браузеру или роботу поисковой машины "Этой страницы тут больше нет, иди по этому новому адресу... я недавно ее переместил". Вы:
- говорите что страницы тут больше нет
- показываете браузеру или боту ее новый адрес
- говорите браузеру или боту, что перемещение временное
- говорите боту, что все что ссылалось на старый адрес страницы должно ссылаться на новый, так как контент остался тот же, его просто переместили.
Если вы используете mod_rewrite для маскировки URL, вы создаете связь URL страниц, которые хотите показать пользователям (в навигации, ссылках в контенте, картах сайта и т. д.) с реальными URL этих страниц, которые не будет видны никому.
Это делается для того, чтобы перевести стандартные URL, которые состоят из ID категорий, продуктов и других параметров, в буквенные URL, состоящие из слов и несущие информацию.
/products/details.asp?pid=11623&catid=42
Скорее всего в данном URL категория 42, ID продукта 11623. Текст, адреса картинок и другое хранится в базе данных под номером 11623, а информация по категории хранится в другой таблице. Для того, чтобы вывести заголовок страницы, мета-теги описания и ключевых слов, веб-сервер ищет эти данные в категории под номером 42 в базе данных. Если вы захотите выводить ссылки на другие продукты, то нужно сделать еще запросы к таблицам в базе данных, где они хранятся.
Чтобы сделать эту ссылку более "человечной" она должна выглядеть примерно так:
/products/necklaces/purple-amethyst-necklace-11623
Используя такую ссылку, вы также "вытаскиваете" все параметры страницы из базы данных, но она уже выглядит более логической и информативной. Ссылки вашего сайта выглядят красивыми, да и к тому же включают в себя ключевые слова.
Используете вы .htaccess или просто 404, решение о использовании 301 редиректа принять просто:
- если вы хотите сообщить поисковику, что страница находится в другом месте, то используйте 301 редирект
- если вы хотите сделать красивые URL и замаскировать стандартные не следует использовать 301 редирект.
Что происходит с весом ссылок, если не использовать 301 редирект?
Ничего. Вы также продолжаете наращивать ссылочную массу и улучшать внутреннюю перелинковку. До тех пор, пока поисковые боты видят, что наша страница (пример: /products/necklaces/purple-amethyst-necklace-11623 ) до сих пор существует, поисковик получает весь ее контент и придает полный вес ссылке вместе со статусом HTTP 200 (OK).
Синтакс mod_rewrite
по правилу - ^oldstuff\.html$ newstuff.html
Проверяем что запрошенная страница oldstuff.html существует. Если существует, то идет перенаправление на страницу newstuff.html для ее генерации и отправки пользователю. Поисковый робот или браузер до сих пор думает, что находится на странице oldstuff.html.
Другие замечания: знак ^ обозначает начало имени страницы, поэтому поисковик не перепутает, скажем страницу reallyoldstuff.html с нашей oldstuff.html. Знак $ обозначает конец имени файла, поэтому бот не перепутает нашу страницу oldstuff.html со страницей oldstuff.htmlly.
Что насчет того слеша в середине? Это первый параметр регулярного выражения, в котором каждый символ должен совпадать с запрошенным. То, что мы ставим за знаком \ называется скрытием символов, т. е. Мы не подразумеваем каждый символ в отдельности, а мы говорим что тут их набор целиком.
Теперь, 301 редирект:
Это 301 редирект. Это редирект, так как в скобках мы используем R. Это именно 301 редирект, потому что мы после знака равно мы поставили 301, а если бы после знака равно мы ничего не прописали, то это был бы 302 редирект, который означает, что совсем недавно мы переместили страницу и не хотим, чтобы ссылки на нее передавали вес. В 99% случаев вы будете использовать именно 301 редирект, а не 302.
В квадратные скобки заключено два параметра, отделенные запятой. Второй параметр "L" означает Last, то есть последний. Он говорит, что страница в выражении совпадает с запрошенной, и при последующих запросах в .htaccess такую проверку можно будет не делать. В 99% случаев использования 301 редиректа вы будете использовать параметр "L".
В 92% случаев использования операций, не связанных с 301 редиректов вы будете использовать параметр "L". Почему не в 99% случаев?
Иногда бывает полезным использовать несколько правил rewrite к одному URL. Допустим, у вас есть некоторое количество папок, находящихся в первом уровне, с которыми вы хотите проделать операции rewrite.
Также у вас есть несколько вложенных в эти папки папок, с которыми вы хотите проделать эти операции тоже. В первом правиле вы можете заменить имя главной папки, а затем второе правило, которое будет переименовывать вложенные в нее папки.
/prods/metal1/necklace-11623.htm
По первому правилу mod_rewrite URL можно поменять /jewelry-products/ вместо /prods/ , поэтому мы получаем:
/jewelry-products/metal17/necklace-11623.htm
По второму правилу мы заменим /gold/ вместо /metal17/:
/jewelry-products/gold/necklace-11623.htm
Скажем у нас есть каталог драгоценностей с ценами и фотографиями названными [product ID].jpg. Такое имя фото очень удобно для программиста и базы данных, но оно совсем не приемлемо для SEO. Вы можете использовать правила rewrite для изменении имени картинок, чтобы поисковые боты “полюбили” наши картинки и взяли в индекс. В нашем случае путь будет следующим:
/images/necklaces/gold/amethyst-11623.jpg
вместо этого:
/images/prods/11623.jpg
Теперь, правило rewrite применяется не только для создания редиректа или преобразования URL.
MyOST: нужно помнить, что 301 редирект и Яндекс - это понятия очень связанные с временем, а точнее, Вы можете прождать 2-3 месяца, пока зеркальщик не почтит визитом сайт, а после еще чуть-чуть времени нужно подождать для апдейта зеркальщика.
Источник: RewriteRule's Split Personality Explained
Перевод: SEOM.info
#1 by Matt on 07/19/2010 - 19:36
Quote
Век живи - век учись. Прямо сегодня много узнал, спасибо вам и ещё паре блогов! Понравилась подробность изложения, это большой плюс.
#2 by Ninja on 07/21/2010 - 16:25
Quote
Хорошая статья
#3 by Seoshneg on 07/21/2010 - 21:43
Quote
Прочитал статью но почему то ничего не понял. Но я хотел спросить о стоимости продвижения сайта у вас?
#4 by evgeni on 07/21/2010 - 21:52
Quote
Все гениальное просто как говорится.
#5 by Артём on 07/22/2010 - 15:42
Quote
Спасибо за столь увлекательный пост все что рядом с нами мы не замечаем
#6 by Дмитрий Петров on 07/23/2010 - 17:47
Quote
Не плохо, спасибо! Благодарен!
#7 by Михаил Шарапов on 07/23/2010 - 21:46
Quote
Интересная статья!!!
#8 by Dblmok on 07/24/2010 - 10:43
Quote
Спасибо, узнал немного нового
#9 by MyOST on 07/24/2010 - 13:20
Quote
http://seom.info/aboum-me/ контактные данные на этой странице
#10 by Dezm on 07/24/2010 - 18:33
Quote
Отлично, теперь немного изменил файл .htaccess по вашим рекомендациям... спасибо за материал.
#11 by Сергей on 07/25/2010 - 14:58
Quote
Сделал у себя как сказано в посте. Спасибо!
#12 by Александр on 07/26/2010 - 16:26
Quote
Да, статья супер. То сделал все по ней
#13 by Sergunik on 07/27/2010 - 11:38
Quote
Интересно, а этот метод проедет и под линуксовым апачем?
#14 by Лада on 08/01/2010 - 00:10
Quote
Очень полезная инфа! - В закладки! Я например когда переносил сайт с одной CMS на другую все ссылки изменились(кроме главной) редирект в этом случае незаменим просто....
#15 by Василий on 08/02/2010 - 06:21
Quote
Тоже не все понял, вроде и написано все по порядку, но понять увы не смог, возможно стоит прочитать несколько раз....
#16 by NItrox on 08/03/2010 - 14:46
Quote
Я как раз ломал голову над этим. А оказывается всё на столько просто!
#17 by Echo on 08/15/2011 - 15:40
Quote
Стоит отметь что это не работает на хостингах с Windows