Урл чпу


Что такое ЧПУ адрес страницы и все про ЧеловекоПонятные УРЛ

Правильный ЧПУ адрес сайта позволяет повлиять на SEO вашего сайта самым непосредственным образом. От того, какими будут URL страниц сайта, зависит не только вид сайта в поиске, но многие другие факторы SEO. Как создать грамотный ЧПУ страницы и как использовать ЧПУ в продвижении сайта вы узнаете в этой статье.

Что такое ЧПУ и причем тут SEO

ЧПУ адрес или ЧеловекоПонятный УРЛ — это адрес страницы, который прост и понятен для посетителя сайта и поисковых систем (Search Engine Friendly URL). Давайте разберемся во всех преимуществах ЧПУ адресов, рассмотрим примеры ЧПУ для всевозможных обстоятельств и научимся правильно использовать ЧеловекоПонятные УРЛы в любых ситуациях. Я часто пишу о том, что SEO — это комплекс множества факторов, и одним из таких факторов является URL-адрес страницы.


Не буду тратить время и перейду сразу к примерам.

Пример не ЧПУ адреса страницы:

mysite.ru/index.php?category=21&page=713

Пример ЧПУ:

yautka.ru/blog/okazalos-svistok

Еще пример плохого ЧПУ:

mysite.ru/category-436/24867341.html

Еще пример ЧПУ:

estpozvonit.ru/mobila/iphone-6-s-plus-pochti-novij.html

Последний URL страницы выглядит и читается проще прочих.

Как использовать ЧеловекоПонятные УРЛы

Первое, что приходит в голову — ключевые слова! Если человек ищет резиновую утку, дайте ему простой адрес:

rezinaoptom.ru/igrushki/utka-rezinovaja

Теперь, когда кто-то поставит на вас адресную ссылку, она будет нести в себе ключевые слова, а не номер id страницы, который ничего не означает.

Еще ЧПУ ссылки легко запоминаются:

seoimba.ru/blog/seo

Такой URL легко ввести вручную и сразу понятно, что нас там ждет SEO блог. То есть, посредством ЧПУ адреса, мы предоставляем посетителям больше информации о странице, на которую ведет ссылка. А ссылка несущая в себе больше информации — полезнее и ценнее.

Если ЧПУ ссылка содержит ключевые слова, то вся ссылка в сниппете либо же ее часть выделяется жирным. Это делает ссылку на сайт более заметной и увеличивает CTR сниппета страницы в поиске (кликать будут чаще, чем на конкурентов).

Структура и шаблоны ЧПУ


Структуру ЧеловекоПонятных УРЛов можно оформить по-разному. Какой будет структура ЧПУ может зависеть от особенностей работы движка сайта, тематики или общей структуры сайта. Вот несколько примеров самых распространенных  ЧПУ шаблонов.

Пример прямого ЧПУ адреса:

doktorzlo.ru/kontakty/

Пример прямого ЧПУ адреса с расширением:

doktorzlo.narod.ru/kontakty.html

Такой адрес обычно имеют статические страницы вроде страницы «Контакты».

Пример ЧПУ категорий интернет-магазина:

crazyshop.ru/devochki/sumochki/acho-tak-dorogo.html

Пример ЧПУ структуры блога:

myblog.ru/2015/02/29/kto-zdes/

Заметьте, как удобно извлекать из такого адреса данные для запроса и как сложно потом перемещать страницы из одной категории в другую.

Чтобы корректно переместить страницы придется использовать 301 редирект, иначе исходная страница станет недоступной, а страница по новому адресу окажется дубликатом исходной, которая теперь недоступна.

Поисковики не оценят такие маневры и страница «вылетит» из поиска со всем вытекающими.

Постарайтесь не углублять структуру адресов, чаще всего достаточно глубины одной категории и множества категорий:

vypechka.ru/hlebushek/ vypechka.ru/bulochki/ vypechka.ru/tortiki/

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

ЧПУ транслитом


Поисковые системы понимают любую транслитезацию по ГОСТу. Транслитезация оптимальна для создания ЧПУ, так как символы латиницы универсальны и не создают проблем при обработке. Кириллица, переведенная в транслит, достаточно легко читается и способна быстро предоставлять информацию о названии документа как людям, так и поисковым системам. Плюс транслита может быть в том, что сайт, использующий транслит в ЧПУ, в том же языковом регионе может иметь больший приоритет, чем сайт использующий латиницу.

Ну, а если вашей творческой частичке не нравится, как выглядят названия страниц транслитом — пишите ЧПУ латиницей.

ЧПУ латиницей

Латиница универсальна, ее легко обрабатывают поисковые системы, понимает половина мира и большая часть Россиян. А такие слова как shop, contacts или delivery уже давно близки и знакомы всем. Так что не бойтесь использовать английские слова в названии страниц и других документов, если такой вид ЧПУ кажется вам более подходящим.

ЧПУ кириллицей

Многие сайты используют кириллические ЧПУ, например, Википедия. Только есть одна проблема — кодирование кириллических символов в URL при копировании ссылки.

Фактически, кириллический ЧПУ:

ru.wikipedia.org/wiki/Сингулярность

Выглядит совсем не ЧПУ:

ru.wikipedia.org/wiki/%D1%E8%ED%E3%F3%EB%FF%F0%ED%EE%F1%F2%FC

Пробелы, нижнее подчеркивание или дефис (тире) в ЧПУ


Не используйте в ЧПУ адресах пробелы! Пробелы лучше заменять на «-» или «_». А что лучше использовать в названии ЧПУ вместо пробела: тире (дефис) или нижнее подчеркивание? Давайте сравним.

Тире (дефис) в ЧПУ устанавливается нажатием одной клавиши минус и служит разделителем. Кликните два раза подряд на слово, и оно выделится ровно до появления тире.

mysite.ru/mama-papa-ya

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

Нижнее подчеркивание в ЧПУ требует нажатия комбинации двух клавиш Shift и минус (+1 лишнее действие). Кликните два раза подряд на любую часть строки и выделится вся строка как будто это одно слово.

mysite.ru/mama_papa_ya

Нижнее подчеркивание не имеет собственного смыслового значения в конструкции ЧПУ и может использоваться как замена пробела.

Поисковые системы понимают и тире «-», и нижнее подчеркивание «_». Используйте то, что ближе вам.

ЧПУ картинок, видео, документов

Когда поисковая система находит изображение или любой другой документ, она скачивает файл и анализирует всю информацию о нем. Название файла имеет большое значение, так как сообщает о его содержимом, что в случае с изображениями может быть единственным источником информации о нем. Аналогично ЧПУ адресов страниц, если изображение имеет название:


7982403.jpg

то оно передает меньше информации о своем содержимом, нежели изображение с ЧПУ названием:

ptichka-na-provode.jpg

Поисковые системы могут различить содержимое изображения по тематике страницы, по тексту, который окружает картинку, по атрибуту alt-картинки, по названию картинки, метаданным изображения, по сравнению изображения с другими похожими изображениями и т.д. Наша задача — придать как можно больше информации о изображении поисковой системе, чтобы она лучше индексировалась и передавала больше ценности контенту и странице. По сути, изображение на сайте тоже имеет свой уникальный адрес, является документом, как и страница сайта, и к нему применяются те же требования по ЧПУ. Так что ЧПУ картинок — мастхев.

Обязательно читайте подробную статью про SEO оптимизацию картинок.

Подведем итог

  1. Мы можем использовать ключевые слова в названии страниц, чтобы упростить навигацию на сайте и понимание содержимого ссылки на сайт.
  2. Поисковые системы понимают ключевые слова в ЧПУ, выделяют ЧПУ адреса в поиске, что в целом повышает релевантность страницы.
  3. Посетители проще запоминают названия страниц, чаще заходят напрямую и делятся страницами с ЧПУ адресами.
  4. ЧПУ повышает CTR сниппета страницы в поиске, что улучшает поведенческие факторы.
  5. ЧПУ улучшает SEO страниц, изображений и других документов, так как является значительным фактором поисковой оптимизации.

Еще нужны причины, чтобы использовать ЧПУ?

Вот вроде бы и все, если что забыл — пишите в комментах.
Ставьте лайк, сохраняйте себе на стену.

convertmonster.ru

Что такое ЧПУ?

ЧПУ (расш. Человеко-понятный урл) – красивые и дружелюбные URL адреса (Friendly SEO URL с англ.). Как бы не называлась эта аббревиатура, У ЧПУ адресов много преимуществ по сравнению с другими URL, поэтому их важно использовать на своих сайтах.

Зачем нужен ЧПУ?

По умолчанию на многих CMS в адрес страницы, то есть URL указывается непонятные/нечитаемые буквенные и числовые сочетания.

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

Плюсы использования ЧПУ ссылок

  • Поисковыми системами хорошо воспринимается ЧПУ адрес страницы, и даже ключевые слова подсвечиваются в самой ссылке;
  • Пользователи легко воспринимают URL сайт, благодаря чему могут копировать ссылку и делится ею в социальных сетях;
  • Улучшение навигации на сайте, благодаря понятному ЧПУ и уровню вложенности.

Минусы использования

  • Если у вас сайт не сделан на платформе CMS (например: WordPress, Joomla) указывать ЧПУ придется вручную для каждой страницы. Это занимает очень много времени, особенно если у вас страниц более 100. По умолчанию в CMS WordPress ЧПУ можно настроить самому, как угодно. Чуть ниже я расписал подробнее.
  • Ручное выполнение транслитерации (Но в WordPress решается с помощью плагина CyrToLat).

Читайте в нашем блоге: Продвижение сайта в регионах — поддомены для Яндекса

Пример правильного написания ЧПУ ссылок

Как выглядит ссылка без ЧПУ:

http://site.ru/?p=1234
http://site.ru/?p=999

Примеры ЧПУ:

http://site.ru/blog/statya-pro-chpu/
http://site.ru/kak-propisat-title/

Принципы написания ЧПУ адреса:

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

ЧПУ должен быть краток и понятен. Глядя на ЧПУ мы должны понимать, о чем данная страница, чтобы не возникало путаниц.

Структура ЧПУ взаимосвязана с хлебными крошками (breadcrumbs). Особенно это касается интернет-магазинов, где страницы такого вида:

Страницы товара

https://site.com/collections/dolls/products/paw-patrol-on-a-roll-chase-figure-and-vehicle-with-sounds


Страница категории:

https://site.com/collections/dolls/

Что касается корпоративных сайтов, то ЧПУ для страниц услуг выглядит так, иногда он вообще не содержит УВ меньше 1.

http://site.ru/uslugi/pokupka-nedvizhimosti/

Про уровень вложенности я расписал в данной статье.

Кириллические ЧПУ

Удобны, если сам домен кириллический или какая-то его часть. В таком случае поисковая система подсвечивает ключевое слово.

Недостаток – закодированных значения URL-адреса при копировании его из любого браузера.

Латинские ЧПУ

Перевод на латиницу. Как правило используются в рубриках и категориях.

Плюс и недостаток в тоже время, что часть людей набирают определенный запрос по-английски, соответственно, если вы используете латиницу ключевые слова подсвечиваются, но минус в том, что такой процент людей очень мал. (Конечно в зависимости от тематики)

Примеры:

http://site.ru/blog/seo-optimization/
http://site.ru/copywriting/original-content/

Транслитерация ЧПУ

Это необходимо для того, чтобы переводить кириллические ЧПУ в латиницу. Транслируемые адреса так же читаются поисковыми системами и подсвечиваются в выдаче.

Подчеркивания, дефисы и пробелы в ЧПУ

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

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

Читайте в нашем блоге: Что такое meta name robots?

Настройка ЧПУ в WordPress


Итак, давайте разберем как настроить ЧПУ в CMS WordPress. По умолчанию он входит в сборку, поэтому ничего устанавливать дополнительно не нужно. Единственно что нам понадобится это плагин CyrToLat.

Настройку ЧПУ на WordPress

Заходим в Настройки и в выпадающим меню выбираем постоянные ссылки.

Далее указываем вид нашей ссылки. Разберем каждый из них:

По умолчанию – этот вид чаще всего встречается на сайтах WordPress и имеет вид site.ru/?p=123;

День и название – вывод даты и затем уже выводится ЧПУ. Если у вас СМИ или тематика сайта связана с постоянными ежедневными событиями, то лучше использовать данный вариант;

Месяц и год + название – вывод месяца и даты, а затем уже идет ЧПУ. Очень часто встречающийся вариант на многих сайтах WordPress;

Цифры – выводится цифры, и статья попадает в категорию архива. Не рекомендую использовать этот вариант UR;


Название страницы – выводится только ЧПУ. По сути самый правильный вариант вывода ссылки. Вид: site.ru/sample-post/;

Произвольно – формирование ссылки происходит, как угодно. Например, вы хотите, чтобы на конце выводилось расширение .html. С точки зрения продвижения особой разницы нет.

Ну и соответственно жмем сохранить. Теперь при создании новой записи у нас автоматически формироваться определенный ЧПУ. Но он будет кириллический, чтобы перевести его в латиницу нам поможет плагин CyrToLat.

Настройка плагина CyrToLat

Итак, как же настроить все это дело? Для этого заходим в Плагины. Далее нажимаем добавить новый и выбираем там CyrToLat. После находим этот плагин, выбираем “Установить” и позже нажимаем Активировать”.

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

Частые ошибки в ЧПУ

Длина URL. Средняя длина в поисковой системе Google – 76-90 символов. Соответственно пишите ЧПУ не более 60 символов, чтобы поисковики могли воспринимать полностью ваш URL. Если слишком длинный URL он обрезается и выводится неполностью.

Пример длинного ЧПУ:

http://site.ru/sport/echampionship/1365520-fotogalereya-ahtung-podruga-igroka-sbornoj-germanii-ispug….

  1. Использование пробелов и символов не несущих пользу

Применение слов, которые не несут смыслового значения для посетителя, например /category/, /page/ и так далее.

Какие работы можно еще выполнить по внутренней оптимизации сайта:

Как правильно прописать Title страницы

Rel Canonical – как правильно использовать
ALT картинки — как правильно прописать
Мета-тег Description — разбор с примерами
LSI и SEO тексты – 5 основных отличий

Заключение

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

Если статья была для вас полезна, то поделитесь с друзьями. В комментариях оставляйте ответы на вопрос: “А как вы настраиваете ЧПУ?”

edison.bz

Что такое ЧПУ

ЧПУ это сокращение фразы “ЧеловекоПонятные УРЛы” (на английском, Search Engine Friendly URLs), что означает красивые и дружественные адреса. Смыслы, вложенные в русский и английский термины, немного разнятся, так как ЧПУ касается больше юзабилити (удобства использования для человека), а SEF больше направлен на SEO (быть дружественным поисковикам). Как бы там ни было, у ЧПУ-адресов есть множество преимуществ над обычными адресами, поэтому, их всегда рекомендуется использовать, но использовать грамотно, как и любой другой инструмент.

Рассмотрим пример ЧПУ

Старые версии адресов (неудобных и недружественных):

www.yoursite.ru/database.php?id=23
www.yoursite.net/viewpage.php?page_id=23
yoursite.com.ua/index.php?id_catalog=48&page_id=23
www.yousite.kz/page.php?page_id=23&lang=1&news_id=154589

Новые версии адресов страниц в формате ЧПУ могут иметь следующий вид:

www.yoursite.ru/biology/
www.yoursite.net/contact/
yoursite.com.ua/conditioners/23/
www.yousite.kz/ru/news/putin-krab.html

Как вы видите, вторые варианты намного удобнее.

Какие ещё преимущества, помимо внешней красоты, дают ЧПУ?

— В них можно вставить ключевые слова.
— Если на вашу страницу ссылаются её адресом, то в текст ссылки попадают эти ключевые слова.
— ЧПУ-адреса легко диктовать.
— Перед переходом по ссылке примерно понятно содержимое страницы.
— При переходе на страницу можно, не читая контент, определиться, где ты находишься. Это решает одну из задач навигации.
— ЧПУ можно использовать как хлебные крошки, удаляя часть адреса с конца и попадая сразу в нужный раздел, не производя поиск соответствующей ссылки на сайте. Удобно в плане юзабилити.
— ЧПУ-адреса реже становятся причиной возникновения дублей на сайте.
— При анализе отчетов (использовании веб-аналитики) ЧПУ-адреса воспринимаются аналитиком намного удобней и ускоряют работу.
— В поисковой выдаче, если ключевые слова встречаются в ЧПУ, то они подсвечиваются, таким образом, обращая на себя внимания и увеличивая CTR (кликабельность) сниппета.
— ЧПУ-адреса страниц чаще легко запоминаются.

Допустим, вы решили на своем сайте организовать ЧПУшные адреса. Что нужно иметь в виду?

Рекомендации по использованию ЧПУ

1. Как организовать структуру ЧПУ?

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

Шаблон: /pagename/
Пример: /contact/
Тип сайта: Любой

Этот шаблон подходит для всех статических страниц сайта (контакты, о нас, faq, доставка, условия использования и так далее), а также для обозначения разделов или рубрик в интернет-магазинах или контент-проектах (раздел “ноутбуки” или рубрика “интервью”).

Шаблон: /pagename.html
Пример: /usability-factors.html
Тип сайта: Любой

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

Шаблон: /id/title
Пример: /1034/kirkorov-davay-dosvidaniya
Тип сайта: Новостной (или обзорный) ресурс

Подобный шаблон использует менее качественный ЧПУ, так как содержит ID записи из базы данных и этот ID сложно запомнить человеку, однако, часто используется в сети в новостных проектах, где заголовки могут повторяться, а ID уникализирует адрес (закрепляя один адрес за одной статьей). Этот шаблон рекомендуется использовать в редких случаях, когда нет других вариантов. Лучше ID убирать из ЧПУ, а к повторяющимся заголовкам добавлять порядковый номер, чтобы сделать их уникальными.

Шаблон: /year/month/day/title.html
Пример: /2012/04/23/my-first-post.html
Тип сайта: Блоги, новостные ресурсы

Использование даты в ЧПУ очень удобно для тех проектов, где главным вопросом является актуальность материала. По адресу вы сразу можете определить, насколько материал актуален и стоит ли его читать дальше, а также можно легко найти старые материалы в поисковике, за определенный год или месяц. Такой шаблон часто используется новостными порталами и некоторыми блогами (дневниками).

Шаблон: /category/subcategory/title
Пример: /notebook/asus/asus-3012
Тип сайта: Интернет-магазины, блоги, новостники

В этом шаблоне уже отображается навигационная цепочка и иерархия объектов (если их так можно назвать). ЧПУ играет роль хлебных крошек, их легко использовать как посетителю при навигации, так и вебмастеру для закрепления адресов за товарами (или статьями). Единственный недостаток подобной структуры ЧПУ проявляется, когда мы товар (или статью) перекладываем в другую категорию, приходится учитывать смену адреса и устанавливать 301 редирект со старого ЧПУ на новый.

При проектировании сайта выберите основные рубрики, их подрубрики и элементы в этих подрубриках. Легче всего организовать ЧПУ таким образом, чтобы адрес отражал структуру сайта. Например, если у вас имеется городской портал, то основные разделы будут иметь вид:

/afisha/
/news/
/gallery/
/job/
/forum/
и так далее, детализируясь в каждой рубрике:

/afisha/kino/
/afisha/theatre/
/afisha/sport/
и так далее.
/afisha/sport/ledoviy-dvorec/
/afisha/sport/bowling-club/

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

2. Кириллица или латиница?

Что лучше выбрать для ЧПУ – кириллические адреса, латиницу или транслитерацию? Здесь дело вкуса, но с точки зрения юзабилити, смешивать латиницу и кириллицу в одном ЧПУ нецелесообразно, так как пользователю приходится менять раскладку клавиатуры, чтобы набрать адрес вручную (хотя, Википедия этим не брезгует). С точки зрения SEO нет разницы, поисковики понимают и латиницу, и кириллицу, и транлитерацию.

Поисковики переформулируют слова с транслит и латиницу при поиске результатов.

Кириллица для ЧПУ удобна, когда сам домен кириллический или когда эта часть адреса не очень длинная (например, в словарях). Единственный недостаток кириллических ЧПУ это вставка кодированных значений пути адреса при копировании его из браузера.

Смесь латиницы и кириллицы в ЧПУ

Латинские ЧПУ (с переводом русских слов) хорошо использовать для обозначений рубрик и статических страниц, так как все привыкли к /news/ вместо /novosti/ или /contacts/ вместо /kontakti/. Для названия статей это делают реже, если редактору это не в тягость (например, я использую на блоге латинские ЧПУ).

Транслитерацию хорошо использовать для названий статей. При этом, не важно, по какому ГОСТу вы производите транслитерацию заголовков статей, поисковые системы понимают разные варианты. В очень редких случаях, если вы составляете ЧПУ для разделов небольшого сайта, можно проверить подсветку в поиске:

Пример поиска вариантов транслитерации слов поисковыми системами.

Но, как показывает практика, если поисковик не подсвечивает ключевое слово в адресе это не значит, что он его не понимает. Поэтому, можно не переживать и использовать любой доступный вам ГОСТ.

3. Длина ЧПУ

Длинные ЧПУ не очень удобны в плане юзабилити: их трудно запомнить, они часто обрезаются при вставке ссылки на старых форумах и часто в соцсетях (а также в поисковой выдаче, если не определены хлебные крошки), они также затрудняют навигацию по сайту.

Пример длинного и неудобного ЧПУ:

http://korrespondent.net/sport/echampionship/1365520-fotogalereya-ahtung-podruga-igroka-sbornoj-germanii-ispugavshaya-chinovnikov-svoej-seksualnostyu

Настройте свою CMS таким образом, чтобы длина ЧПУ была не более 60-80 символов (чем меньше, тем лучше и удобней). Если у вас подкатегории товара (например, в интернет-магазине) имеют 4-5 уровень вложенности, то целесообразно отобразить в ЧПУ лишь последнюю подкатегорию или первую и последнюю, но не все 4-5, чтобы сократить длину ЧПУ.

4. Подчеркивания или дефисы?

Что лучше использовать для ЧПУ для разделения слов: подчеркивания или дефисы? Можно и то и другое, но дефисы предпочтительней, так как для их набора требуется одно нажатие на клавиатуре, а для подчеркивания два (плюс Shift).

А что с пробелами? Пробелы лучше не использовать в ЧПУ, так как во многих случаях они могут вызвать только головную боль вебмастера. Заменяйте пробелы на другие разделительные символы (дефисы, подчеркивания или, в крайнем случае, на плюсы). Оптимальные ЧПУ содержат однотипные символы на каком-либо языке и разделительные знаки – никаких пробелов, кавычек, запятых или других служебных символов.

5. Какой ЧПУ выбрать для мультиязычных сайтов?

При добавлении дополнительных языковых версий сайта необходимо сначала определиться, хотите вы их вынести на поддомен, отдельный домен или всё же добавить в ЧПУ? Если последний вариант, то оптимальней всего часть, отвечающую за языковую версию, добавлять в начало адреса (сразу после названия домена).

http://www.mydomain.com/ru/about-us.html
http://www.mydomain.com/de/about-us.html
http://www.mydomain.com/us/news/our-new-office.html

6. Нужны ли ЧПУ для названий изображений и видео?

Если на сайт планируется получать трафик также с поиска по изображениям или видео, то здесь важно лишь название изображения (например, hrizantema.jpg вместо 1244_2344.jpg), а сам путь, где хранится изображение или видео-файл, не имеет значения (только Google может находить изображения по имени папки). Также адреса изображений не так активно используются как адреса страниц.

Часто возникающие ошибки при использовании ЧПУ

  • Использование пробелов и служебных символов.
  • Формирование слишком длинных ЧПУ-адресов.
  • Использование цифровых значений в ЧПУ

/news/12345.php

Такие адреса сложно назвать ЧПУ, так как по ним понятно лишь, что мы перейдём в раздел новостей, но цифры ID ни о чем не говорят.

  • Отсутствие странц на сайте при удалении правых частей ЧПУ до слешей.
  • Использование не значимых слов в адресе

/page/contact.html
/category/news/some-news-title.html

Частица /page/ в данном случае (или /category/) не является значимой, поэтому, её можно удалить, чтобы сократить длину ЧПУ.

Заключение

Часто возникающие проблемы с ЧПУ связаны, в основном, с использованием старых CMS. В новых системах управления сайтами этот модуль более-менее хорошо продуман и позволяет гибко управлять структурой ЧПУ (хотя, иногда приходится добавлять вспомогательные плагины). Если вы используете старые версии CMS и хотите иметь на сайте красивые ЧПУ, стоит рассмотреть вариант перехода на новые системы, выбирая их в зависимости от типа проекта.

А каких правил придерживаетесь вы при продумывании ЧПУ-адресов?

devaka.ru

URL структура сайта

Сначала немного истории и определения понятий. Uniform Resource Locator (URL) — это единый указатель ресурсов. Впервые был введен Тимом Бернерсом-Ли в 1990 году. Изначально URL обозначал место расположения ресурса в интернете, в настоящее время он используется для записи адреса ресурса в сети.

Стандартный способ отображения URL страницы в большинстве случаев имеет такой вид — после адреса сайта отображается адрес исполняемого файла, после .php ставится знак вопроса и потом уже указывается URL, в котором отображаются параметры выводимой страницы, например: /catalog.php?tag=dance&action=list — просмотр списка статей с меткой dance (танец). Но естественно такие URL неудобны для посетителей сайтов, цифры обозначающие параметры еще будут понятны, но такие URL могут получаться очень длинными в случаях больших запросов для вывода, и не будут помещаться в видимую часть адресной строки браузера.

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

  • Нужно организовывать содержание сайта таким образом, чтобы URL имели логическую структуру и были более понятны для человека. Рекомендуется использовать не идентификаторы, состоящие из множества цифр, а обычные слова. Например, если пользователь будет искать информацию о танцах то, URL-адрес типа поможет определить информационную значимость ссылки. А если URL сайта имеет вид типа то, такой ссылкой будет сложно привлечь внимание пользователей.
  • Также рекомендуется использовать знаки пунктуации в URL-адресах. Например, адрес более удобен для чтения, чем . Лучше использовать в URL-адресах дефисы, а не символы подчеркивания. Каждая страница сайта должна быть с уникальным URL, чтобы глядя на неё, можно было иметь представление о том, что содержится на странице.
  • Немного слов о регистре URL. Пользователи сайтов, как правило, вводят URL в нижнем регистре (маленькими буквами). Но для поисковой системы stranica.html и Stranica.html — две разные страницы, но с одинаковым содержанием. Таким образом получается дублированный контент и потеря веса страницы с основным URL в нестандартном регистре.
  • Еще один момент оптимизации URL — использование «.html» или «/» (слеш) в конце адреса. Заметно, что некоторые URL-адреса имеют вид http://domain.ru/page.html вместо http://domain.ru/page/. Принципиальной разницы нет, но если в первом варианте можно точно сказать о том, что это именно страница, то второй вариант может оказаться и директорией. Что и в какой ситуации использовать, каждый выбирает сам.

Длина URL-адресов

Существует мнение, что URL сайта должны быть короткими, но в рекомендациях поисковых систем не оговаривается длина URL-адреса. Считается, что если длина URL превышает 5-ть слов, то ранжирование таких адресов может быть занижено. Также, проводимые в этой области маркетинговые исследования показывают, что, в результатах выдачи поисковых систем кликабельность коротких URL выше длинных в ~2 раза. Еще одним плюсом является то, что короткий URL-адрес легче запоминается и удобен при прямом наборе с клавиатуры.

ЧПУ

Человекоподобные URL или как их принято называть ЧПУ это адреса удобные для их восприятия человеком. Определенный транслитированный адрес веб-страницы, содержащий в большинстве случаев продвигаемые запросы или их часть для данной страницы. ЧПУ концепция подхода к построению URL используется для удобства пользователей. Создание ЧПУ предполагает вместо непонятных и длинных URL, использовать лаконичные и понятные адреса. Выглядит это примерно так: /dance/modern/go-go/ — общая категория танцы, подкатегория современные танцы, и разновидность танца гоу-гоу.

Такие URL страницы сайта становятся более понятными, а так же посетитель получает ряд преимуществ пользования данной структурой ЧПУ, перед стандартными URL, организованными без ЧПУ. Кроме этого, значимые преимущества пользователя при работе с такими ЧПУ это возможность перехода на сайте уровнем выше, за счет обычного стирания части пути в адресной строке, а также появляется возможность пользователю самому вводить в строке адреса нужные слова и переходить на соответствующие страницы.

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

При поиске информации пользователи зачастую обращают внимание на URL, а не только на описания и названия страницы. И делают выбор в пользу адресов, прочитав которые можно иметь представление о содержимом страницы.

Существует один небольшой минус организации такой структуры — увеличение затрат ресурсов сервера на обработку таких ЧПУ. Но положительные моменты с лихвой его перекрывают.

Влияние ЧПУ на продвижение по высокочастотным и низкочастотным запросам

Стоит отметить, что, степень значимости структуры ЧПУ для запросов более конкурентной и менее конкурентной тематики будет разным. Так для высокочастотных запросов ЧПУ будет придавать меньшее значение, потому что, как правило, все конкурентные запросы продвигаются на главных страницах, и тут уже больше имеет значение название домена сайта. В то время как для низкочастотных запросов ЧПУ имеет большее значение и в некоторых случаях существенно повышает позиции сайта в поисковых системах по запросу. Но в любом случае, правильно настроенные ЧПУ вносят определенный положительный вклад в продвижение сайта в поисковых системах и хорошие позиции.

← Назад в раздел

pixelplus.ru

Что такое ЧПУ?

Что такое ЧПУ

ЧПУ – это исковерканная англоязычная аббревиатура SEF URL (search engines friendly url). Она обозначает адреса ссылок, которые дружелюбны для поисковых систем. О ЧПУ я также писал в статье про внутреннюю оптимизацию сайта. В русскоязычном варианте SEF URL пишется как ЧПУ – человеко-понятные url. Что всё это значит? Это значит, что адреса ваших ссылок будут иметь осознанный текст, а не технический мусор, за примером можете сходить по ссылке выше.

Какие преимущества дают SEF URL?

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

Во-вторых, SEO. Такие ссылки приветствуются поисковыми системам, пару лет назад они могли бы дать вам значительный перевес над конкурентами. Сегодня подобные ссылки являются само собой разумеющимися, сейчас редко встретишь сайты с не ЧПУ ссылками, однако они до сих пор есть.

В-третьих, это престиж. Когда я захожу на сайты, где вместо понятного и красивого адреса в ссылках содержится разного рода мусор, а то и засекреченная информация – я задаюсь вопросом: «Вроде бы приличный сайт, но почему разработчики не сделали ЧПУ? Неужели это было так сложно? Может им настолько нет дела до подобных вещей или просто не хватает знаний и навыков?». В общем, для меня такие сайты большая загадка.

В-четвёртых, безопасность. Сайты с ЧПУ ссылками не содержат в своём адресе техническую информацию переданную методом GET (уроки PHP), которую можно запросто использовать для взлома сайта.

И последнее: ЧПУ – как средство навигации. Если ссылка понятна пользователю, то он сам может переходить по разделам сайта, просто редактируя ваш URL. Например:

http://site-on.net/useful/2-sublime-text-2

Если удалить из данной ссылки её последнюю часть (2-sublime-text-2), то мы попадём в раздел, к которому относится данная статья:

http://site-on.net/useful/

В данном случае это раздел «Инструменты». То есть благодаря SEF ссылкам мы можем построить понятную людям и роботам иерархию нашего сайта, что опять-таки будет полезно и для посетителей и для продвижения в поисковых системах.

Недостатки ЧПУ ссылок

Первое: возможно, вам придётся повозиться и даже помучаться, чтобы их настроить или вовсе сделать с нуля.

Второе: ваш сайт станет дольше грузится, а именно, на пару десятитысячных секунды 🙂 Это связано с тем, что для работы ЧПУ подключается специальный модуль веб-сервера Apache – mod_rewrite, которому понадобится это «огромное» количество времени на обработку ссылок.

Когда ЧПУ не нужны?

ЧПУ ссылки могут быть и лишними, например, если у вас закрытый корпоративный портал, где вся работа осуществляется только авторизованными пользователями, а для всех остальных, в том числе и для поисковых роботов доступ закрыт.

Также ЧПУ будет излишеством в back-end вашего сайта, то есть в панели администратора.

Что ещё нужно знать о ЧПУ?

Во всех актуальных версиях CMS данная проблема уже решена. Всё что вам нужно, чтобы сделать ЧПУ ссылки, это лишь включить соответствующие настройки в движке вашего сайта.

SEF URL

Но что если мы имеем дело с сайтом на чистом PHP, без CMS, или же хотим разработать свою собственную CMS в которой хотим сделать SEF URL? Для подобных случаев, а также для людей, которые хотят углубиться и понять всю суть преобразований обычной ссылки в ЧПУ, я и написал остальную часть статьи. Если вы читали мои предыдущие статьи, то знаете, что мой блог как раз относится к этой категории, то есть сайтам, написанным с нуля на PHP, без использования готовых CMS.

Ах да, ещё один момент: из личного опыта не советую делать кириллических URL.

Коротко: в чём вся суть?

Пишу для тех, кто совсем не в курсе дел. Везде в наших тегах гиперссылки мы будем указывать ЧПУ адреса:

<a href="http://site-on.net/useful/2-sublime-text-2">Sublime Text 2</a>

Суть в том, чтобы из красивого и понятного человеку URL (ЧПУ) сделать на лету URL, который будет полезен разработчику PHP (не ЧПУ):

<a href="http://site-on.net/index.php?category=useful&article=2-sublime-text-2">Sublime Text 2</a>

При этом всем на свете (посетителям, поисковым системам, всем) будет видна именно ЧПУ ссылка, но мы как разработчики PHP будем знать, что таит в себе URL на самом деле. В конце статьи, для полного понимания, я покажу все этапы, как ЧПУ работают у меня на блоге.

Создание SEF ссылок с помощью mod_rewrite

mod_rewrite – это модуль веб-сервера Apache, предназначенный для перезаписи URL. Естественно, для начала работы вы должны включить этот модуль в настройках Apache, эти настройки находятся в файле httpd.conf, вам нужно будет раскомментировать строку с именем данного модуля. У 99% хостинг-провайдеров он включён, за исключением совсем ужасных хостингов. Кстати говоря, используя Denwer, у меня не получилось нормально настроить собственные ЧПУ, мне не захотелось долго искать в чём именно проблема (мешают собственные редиректы Денвера) и я установил Апач отдельно. Для тех, кто не знает, как установить сервер Апач не используя Денвер, я напишу инструкцию в одной из будущих статей. А здесь мы продолжаем разбирать наши ЧПУ.

Все наши правила преобразований URL записываются в небезызвестный файл .htaccess, который должен лежать в корне нашего сайта.

Для корректной работы mod_rewrite в нём обязательно должна быть написана следующая строка:

Options +FollowSymLinks

Или, в частности, для моего хостинга:

Options +SymLinksIfOwnerMatch

Далее подключаем наш модуль rewrite к конкретной папке, то есть к папке, в которой лежит наш .htaccess:

RewriteEngine On

Имеем следующий файл .htaccess:

Options +SymLinksIfOwnerMatch RewriteEngine On 

Правила и условия mod_rewrite

Все правила записываются с помощью команды RewriteRule, после которой ставится пробел и записывается шаблон ваших ЧПУ с помощью регулярных выражений, далее ставится ещё один пробел и указывается строка, в которую мы хотим преобразовать данный шаблон, где $1,$2,…$n – наши переменные. Более подробно о регулярных выражениях вы можете узнать по приведённой выше ссылке, а также далее в данной статье. Давайте рассмотрим пример:

RewriteRule ^useful/([a-z]*) /index.php?category=useful&article=$1

Где ^useful/([a-z]*) – это шаблон ожидаемого url,

а /index.php?category=useful&article=$1 – это то, во что мы его конвертируем, если пришедший URL подошёл под шаблон.

При этом $1 равен тому, что написано в круглых скобках, то есть $1 = [a-z]* Если бы круглые скобки встречались 2 раза, то у нас были бы переменная $1 и $2, если круглые скобки встречаются 3 раза, то переменные $1, $2, $3 и так далее. При этом переменные создаются в том же порядке, как идут круглые скобочки.

Понятно? – молодцы. Непонятно? — идёмте дальше, мы ещё к этому вернёмся. Также хочу обратить ваше внимание на то, что для лучшего понимания статьи, вы уже должны обладать начальными знаниями о PHP, а также о работе с методами GET и POST. Продолжаем.

Для того чтобы наш обработчик, то есть mod_rewrite не срабатывал каждый раз без надобности, мы в RewriteRule указываем шаблон, которому должны соответствовать приходящие URL. Если URL не соответствует шаблону, то mod_rewrite просто не сработает и не преобразует пришедший SEF URL в URL, с которым мы можем работать.

То есть на данном этапе вам важно понять саму суть: в ЧПУ ссылках не передаются параметры, а без параметров мы не можем ничего сделать в PHP с этой ссылкой, поэтому с помощью mod_rewrite мы преобразуем ЧПУ ссылку без параметров в не ЧПУ ссылку с параметрами. Что такое параметры? В примере выше имеем 2 параметра:

/index.php?category=useful&article=$1

Параметр category и параметр article.

Опять-таки обращаю ваше внимание, что про параметры вы уже должны были знать, я лишь вкратце вам напомнил.

В шаблонах мы можем использовать символы и символьные классы. Символ точки обозначает абсолютно любой символ.

  • . – любой одиночный символ
  • [redf] – это класс символов. Обозначает наличие одного из перечисленных символов с учётом регистра.
  • [a-z] – класс символов. Обозначает наличие одного из символов в промежутки от a до z, то есть весь английский алфавит.
  • [a-zA-Z] – то же самое, только без учёта регистра, то есть весь алфавит, включая и большие и маленькие буквы.
  • Можно и с цифрами: [0-9]
  • Естественно, всё можно комбинировать: [a-zA-Z0-9]
  • [^rewfad] – класс символов, но со знаком ^ внутри квадратных скобочек обозначает, что шаблон НЕ должен содержать данных символов.
  • site|cite – обозначает альтернативу: подходит site или cite.

Квантификаторы или кванторы

Все предыдущие примеры обозначали один символ (одну единицу), а что если мы хотим показать, что символов из этого промежутка [a-zA-Z] может быть не один, а сколько угодно. Для этого мы должны использовать квантификаторы:

  • ? — 0 или 1 символ из предшествующего текста (класса символов, символа и тд.)
  • * — 0 или любое количество символов из предшествующего текста (n>0)
  • + — 1 или любое количество символов из предшествующего текста (n>1)
  • {n} — ровно n символов, где n – конкретное число.

Например:

  • {4} — должно быть ровно 4 символа из предшествующего текста.
  • {4,5} — 4 или 5 символов
  • {,6} — от нуля до 6 символов
  • {4,} — от 4 до бесконечности символов

Примером может послужить наша уже известная строчка:

RewriteRule ^useful/([a-z]*)

В которой мы применили квантификатор (квантор) звёздочку (*) после класса символов [a-z]. Это значит, что в нашем URL после useful/ могут находиться символы от a до z в любом количестве и, естественно, в любой последовательности, а могут и не быть вовсе. Домен в счёт не берём, он подразумевается сам по себе.

Экранирование

Также при составлении шаблона не стоит забывать и про экранирование. Если вы хотите заключить в класс символов, например, символ точки, то вам нужно её заэкранировать, так как без экранирования точка (служебный символ) обозначает абсолютно любой символ:

[a-zA-Z0-9.]

Тоже самое касается и квадратных скобочек, они у нас обозначают класс символов, поэтому если в вашем url могут быть квадратные скобочки их нужно заэкранировать:

[a-zA-Z0-9.[]]

Ограничение начала и конца строки (маркеры)

Для того чтобы указать начало или конец строки, без учёта домена, используются символы:

  • ^ — начало URL
  • $ — конец URL

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

RewriteRule ^useful/([a-z])

Обращаю ваше внимание на то, что знак ^ внутри квадратных скобок обозначает отрицание, не путайте!

Обратные связи в mod_rewrite

$n – это наша «переменная» в круглых скобках, о них мы уже говорили. Работает для RewriteRule.

%n – то же самое, только в RewriteCond. RewriteCond мы ещё не рассматривали, он у нас впереди.

Итак, если RewriteRule – это наши правила преобразования URL, то RewriteCond – это условие, аналог if в PHP. RewriteCond нужно в ситуациях, когда вам необходимо выполнить URL преобразование (RewriteRule) только при выполнении какого-то условия.

У сервера есть свои собственные переменные, которые мы можем использовать в наших условиях RewriteCond:

HTTP заголовки: 
HTTP_USER_AGENT
HTTP_REFERER
HTTP_COOKIE
HTTP_FORWARDED
HTTP_HOST
HTTP_PROXY_CONNECTION
HTTP_ACCEPT REMOTE_ADDR

Соединение и запрос:

REMOTE_HOST
REMOTE_USER
REMOTE_IDENT
REQUEST_METHOD
SCRIPT_FILENAME
PATH_INFO
QUERY_STRING
AUTH_TYPE

Внутри серверные:

DOCUMENT_ROOT
SERVER_ADMIN
SERVER_NAME
SERVER_ADDR
SERVER_PORT
SERVER_PROTOCOL
SERVER_SOFTWARE

Системные:

TIME_YEAR
TIME_MON
TIME_DAY
TIME_HOUR
TIME_MIN
TIME_SEC
TIME_WDAY
TIME

Специальные:

API_VERSION
THE_REQUEST
REQUEST_URI
REQUEST_FILENAME
IS_SUBREQ

Синтаксис применения серверных переменных таков:

%{переменная}

Давайте составим наше первое условие:

RewriteCond %{HTTP_USER_AGENT} ^Mozilla.* RewriteRule … 

Если посетитель зашёл с браузера Mozilla Firefox, то выполняем следующее правило. Как видите, в отличие от PHP мы не используем фигурные скобки для обрамления нашего правила, которое выполнится, если условие TRUE.

RewriteCond позволяет использовать операторы сравнения: < (меньше), > (больше), = (равно). Также есть специальные значения, например:

  • -d (является ли каталогом)
  • -f (является ли файлом)
  • -s (является ли файлом с ненулевым размером)
  • ! – отрицание.

Флаги

  • nocase|NC – можно писать либо nocase, либо NC, это одно и то же, обозначает регистро-независмость. То есть мы можем больше не писать:
  • RewriteRule ^useful/[a-zA-Z]

    Вместо этого написать так:

    RewriteRule ^useful/[a-z] [NC]
  • ornext|OR – если это, либо следующее условие TRUE, то выполняем RewriteRule. Пример:
  • RewriteCond %{REMOTE_HOST} ^host1.* [OR] RewriteCond %{REMOTE_HOST} ^host2.* [OR] RewriteCond %{REMOTE_HOST} ^host3.* RewriteRule … 
  • Last|L – последнее правило. Если правило применилось, то правила, расположенные ниже по коду, не сработают.
  • next|N – некий аналог continue. Если правило применилось, заставляет отыгрывать все правила с самого начала, но при этом с уже преобразованной строкой.
  • redirect|R – редирект. По умолчанию 302. Можно указать другой код редиректа, например:
  • [R=301]

  • forbidden|F – URL становится запрещённым.
  • gone|G – посылает 410 ответ сервера.
  • chain|C -связь. Если правило не сработало, то связанные с ним правила тоже автоматически не сработают.
  • type|T – MIME-тип. Принудительное выставление типа файла. Можно выдавать одно расширение файла за другое 🙂 Например, лежат у нас файлы с расширением .zip, а на самом деле это картинки, так вот чтобы отдавать эти файлы как картинку(.png, .gif и тд.), можно использовать данный флаг.
  • skip|S – пропустить следующее правило, можно указывать сразу несколько, например:
  • [S=2]
  • env|E=VAR:VAL – установить переменную окружения.
  • cookie|CO – послать куки.

Если нужно поставить одновременно несколько флагов, ставим их через запятую, например:

[NC,L]

Как вы уже могли догадаться, mod_rewrite можно использовать не только для ЧПУ, но и для многих других интересный целей, например, клоакинга – это метод чёрного SEO, когда по одному и тому же адресу посетителям отдаётся одна страница, а поисковым роботам совершенно другая. Ну и под конец статьи, я покажу вам живой пример использования всего написанного выше и как же это всё работает взаимодействуя с нашим PHP.

site-on.net

Зачем нужна настройка URL ссылок в удобные для восприятия человеком ЧПУ?

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

	http://www.softmaker.kz.php?id=2  

К сожалению такие URL адреса не просто запомнить. Попробуйте сказать такой адрес, например по телефону. Поисковые системы, как и пользователи вашего сайта вряд ли получат информацию о содержании страницы вашего сайта из такого веб-адреса. Пользователь не сможет понять, что он найдет статью c примерами программирования в PHP. Более привлекательные URL адреса являются установленными по умолчанию во многих CMS (Content Management System — система управления содержимым). Например, такой адрес:

	http://www.softmaker.kz/id/2  

Конечно, такой адрес URL вносит больше ясности и он короче. Поэтому его легче запомнить и намного
легче прочесть, но по нему не скажешь точно, куда он ведёт. Но можно использовать другой вариант:

	http://www.softmaker.kz/PHP/PHP-Examples/  

Теперь, используя этот URL пользователь сможет понять, что он сможет прочитать и найти на странице. Поисковик тоже может разбить этот URL адрес на слова, чтобы лучше определить содержание страницы. (дефис «-» в URL адресе воспринимается поисковой системой, как пробел, а знак подчёркивания «_», как символ). Согласитесь, такой URL адрес легче запомнить и передать другому человеку.

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

ЧПУ адреса на сайте — какие инструменты необходимы?

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

Сервер Apache простая система, в которой есть ваозможность настройки ЧПУ ссылок (URL) в удобные для восприятия человеком. Обычно он поставляется со встроенным модулем для настройки ЧПУ адресов, mod_rewrite.

Сервер Майкрософт IIS, не имеет встроенной системы для настройки ЧПУ адресов, но имеет дополнение, которое поддерживает эту возможность. ISAPI_Rewrite очень похожа по функциональность с mod_rewrite.

Код, который мы будем рассматривать, основан на настройке ЧПУ ссылок в mod_rewrite сервера Apache.

Основные сведения о настройке ЧПУ ссылок на PHP сайте

Для начала рассмотрим простой пример. На сайте есть php-файл, который открывает одну страницу. Его URL адрес такой:

	http://www.softmaker.kz/article_CSS_example.php/  

Но нам нужно улучшить адрес для восприятия и мы хотим сделать так:

	http://www.softmaker.kz/article-CSS/  

Чтобы так получилось нужно указать серверу сделать внутреннее перенаправление всех запросов с адреса «article-CSS» на адрес «article_CSS_example.php». Нужно, чтобы такое перенаправление было внутренним, так как ни к чему, чтобы в адресной строке браузера что-то менялось.

Но для начала, необходимо создать текстовый документ с наименованием «.htaccess», который будет содержать правила настройки ЧПУ ссылок (URL) в удобные для восприятия человеком. Файл должен быть названн именно так «.htaccess» с точкой вначале названия, но не «.htaccess.php» или «php.htaccess». Файл «.htaccess» нужно положить в корневую папку вашего сервера, такую же, где лежит файл из нашего примера article_CSS_example.php. Но если файл «.htaccess» уже лежит в корневой папке, то лучше его начать редактировать, чем перезаписать новым.

Файл .htaccess является конфигурационным файлом для сервера. Если в нём допущена ошибка, тогда сервер вернёт сообщение об ошибке. Обычно это ошибка с кодом 500. Если передавать файл .htaccess на сервер, используя FTP, то нужно помнить, что он передается в режиме ASCII, а не в бинарном режиме (BINARY). В файле .htaccess мы будем выполнять два правила. Первое — включение режима RewriteEngine, второе — указание серверу Apache, какое именно правило ему нужно выполнить.

	RewriteEngine On # Включение режима  	RewriteRule ^article-CSS/?$ article_CSS_example.php [NC,L]  	# Управление запросами для «article-CSS»  

Также нужно знать, что всё что находится за символом «#» является комментарием, т.е сервер пропускает мимо всё, что находится за этим символом. Комментариями нужно пользоваться свободно, чтобы потом можно было быстро вспомнить, как это правило работает и для чего его вообще написали. Также в каждом файле «.htaccess» должна быть только одна строчка с включением режима «RewriteEngine».

Поговорим немного об инструкции «RewriteBase». С помощью нее мы преобразуем URL сервера к физическому пути. Если URL вашего сервера не соответствуют физическим путям к файлам, вы должны использовать «RewriteBase» в каждом из «.htaccess» файлов, где вы хотите использовать директивы «RewriteRule».

Предположим, что файл «.htaccess» лежит в /physical/path/.htaccess. Помните: /physical/path это физический путь. Также у вашего сервера настроен алиас:

	Alias /virtual /physical/path  

Тогда даем вашему серверу знать, что мы работаем через /virtual, а не через префикс физического пути /physical/path. В файле «.htaccess» пишем:

	RewriteEngine On  	RewriteBase /virtual  

После этого правила преобразований будут работать следующим образом:

	RewriteRule ^article.php$ post.php  

В примере выше, запрос к /virtual/article.php корректно преобразуется в физический файл /physical/path/post.php.

А теперь давайте подробнее рассмотрим, как работает инструкция «RewriteRule»:

  • RewriteRule — указывает серверу Apache о начале одного правила.
  • ^/article-CSS/?$ — Это шаблон. Сервер проверяет URL адреса каждого запроса и сравнивает с шаблоном. Если адрес совпадает, то сервер Apache меняет URL адрес запроса на то что находиться в следующем параметре.
  • article_CSS_example.php — Параметр замены. Если шаблон совпадает с запросом, сервер Apache использует этот URL адрес вместо адреса запроса.
  • [NC,L] — Это флаги, которые указывают серверу Apache как применять правило. Сейчас мы используем два флага. Флаг «NC» указывают серверу Apache, что правило не зависит от регистра символов (в адресе запроса могут быть, как прописные, так и строчные буквы). Флаг «L» указывают серверу Apache, что нужно остановить процесс преобразования.
  • # Управление запросами для «article-CSS» — Комментарий объясняет, что делает правило (рекомендуется использовать).

Это правило является простым способом настройки преобразования одного URL адреса в другой. Оно является основой для многих правил преобразования ЧПУ ссылок (URL) в удобные для восприятия человеком.

Шаблоны и параметры замены для преобразования в ЧПУ ссылки

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

	http://www.softmaker.kz.php?id=2  

И мы хотим преобразовать его к следующему виду:

	http://www.softmaker.kz/id/2  

Чтобы не писать правило для каждой статьи id необходимо написать правило, чтобы управлять всеми cтатьями. Поэтому нужно изменить правило к следующему виду:

	http://www.softmaker.kz.php?id={номер}  

Нужно изменить этот URL адрес так:

	http://www.softmaker.kz/id/{номер}/  

Чтобы сделать это нужно использовать регулярные выражения. Они являются шаблонами (паттернами, от англ. pattern), определёнными в формате, который сервер может понимать. Вот обычный паттерн, который определяет число:

	[0-9]+  

Квадратные скобки содержат в себе определенный диапазон сиволов и «0-9» указывает на все числа. Симвлол плюс «+» указывает, что в шаблоне может быть одно или более чисел, стоящих перед знаком «+». Этот шаблон подходит для нашей задачи по поиску числовых категорий в URL адресе PHP сайта. Шаблон этого правила рассматривается как регулярное выражение по умолчанию, поэтому нет надобности где-либо указывать, что он включен или активирован.

	RewriteRule ^id/([0-9]+)/?$ articles.php?id=$1 [NC,L]  	# Управление запросом по категориям  

Первое, что можно отметить, так это шаблон взятый в круглые скобки. Он позволяет нам получить обратную ссылку для параметра замены. Выражение «$1» в параметре замены указывает серверу Apache брать из URL адреса всё то, что в скобках шаблона. Можно задать множество обратных ссылок и они будут пронумерованы в порядке появления в шаблоне. Итак, это правило означает, что сервер Apache переправит все запросы для
softmaker.kz/id/{номер}/ на articles.php?id={тот же номер}.

Как используются регулярные выражения для преобразования URL адресов в ЧПУ

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

Очень важной гранью является, использование диапазонов в шаблонах. Часто в шаблонах ставят выражения с использованием всех символов, чем указывают определённый символьный диапазон. Но, если всё же сравнивается диапазон, то нужно экранировать символ, который мы хотим обозначить как литерал (буквенный символ) с помощью обратного слэша, так мы укажем серверу Apache рассматривать следующий символ, как литерал.

Следующий пример правила не просто сравнивает URL ссылки «rss.xml», как таковой, а также происхдит сравнение «rss1xml», «rss-xml» и так далее.

	RewriteRule ^rss.xml$ rss.php [NC,L] # Изменение URL ссылки фида  

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

	RewriteRule ^rss.xml$ rss.php [NC,L]  	# Изменение URL ссылки фида  

Экранирование применимо только для шаблонов и в параметрах замены не используется. Остальные символы, которые следует экранировать, называются метасимволами:

  • . (любой символ, кроме перевода строки (по умолчанию))
  • * (квантификатор, означающий ноль или более вхождений)
  • + (квантификатор, означающий одно или более вхождений)
  • {} (начало и конец количественного квантификатора)
  • ? (расширяет смысл метасимвола, является также квантификатором, означающим отсутствие либо ровно 1 вхождение, также преобразует жадные квантификаторы в ленивые)
  • ! (в начале строки означает отрицание шаблона)
  • ^ (начало строки или отрицание, если находится в начале диапазона)
  • $ (конец строки)
  • [] (сравнивает любое содержание, начало и конец описания символьного класса)
  • — (диапазон, если используется между квадратными скобками)
  • () (начало и конец группы, группа обратной ссылки)
  • | (альтернативный выбор, или)
  • (экранирующий символ)

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

	http://www.softmaker.kz/PHP-Examples/  

И мы хотим указать серверу заменить этот URL адрес, но по всем статьям в категории PHP:

	http://www.softmaker.kz.php?id=PHP-Examples  

Сделать это можно с помощью следующего правила:

	RewriteRule ^PHP/([A-Za-z0-9-]+)/?$ articles.php?id=$1 [NC,L]  	# Обработка статей  

В этом правиле каждый URL адрес будет перенаправлен, если начинается с «PHP», с одного или более (+) разных символов: литералов, чисел и дефисов ([A-Za-z0-9-]) (заметьте, что дефис в конце выбора символов находится внутри квадратных скобок, но он будет определен, как литерал (буквенный символ), но не как разделитель диапазона). И указываем ссылку на категорию в скобках, как «$1» в параметре замены. Теперь сделаем правило общее для всех статей, независимо от категории, то есть, если в адресе будет указана папка отличная от «PHP», скрипт будет работать:

RewriteRule ^[A-Za-z-]+/([A-Za-z0-9-]+)/?$ articles.php?id=$1 [NC,L]  # Обработка всех статей  

Итак, мы заменили «PHP» с помощью шаблона, в котором сравниваются символы и дефисы. Но сейчас сравнение происходит не только с папкой «PHP», но и с другими папками, которые соответствуют шаблону сравнения по символам и дефисам.

Флаги в правилах замены ссылок на ЧПУ

Флаги, которые добавляются в конец правил настройки ссылок ЧПУ указывают серверу Apache, как нужно понимать правило и управлять им. Правила могут быть использованы, чтобы указать серверу Apache, например, использовать ли правило независимо от регистра символов (в адресе запроса могут быть, как прописные, так и строчные буквы). Также можно указать Apache остановить текущее сравнение и так далее. Ниже приведён список флагов, которые используются в правилах:

  • C (связывать текущее правило со следующим)
  • CO=cookie (устанавливать cookie)
  • E=var:value (установить переменную окружения «var» по значению «value»)
  • F (запрещает URL — отсылая в загловок код 403)
  • G (страница больше не существует)
  • L (последнее правило, остановить процесс преобразований)
  • N (следующее правило — переход на первое правило)
  • NC (правило независимо от регистра символов, могут быть, как прописные, так и строчные буквы)
  • NE (не экранировать URL адрес при выводе)
  • NS (пропускать правило, если это подзапрос)
  • P (вызывает прокси, пропускает параметр замены через прокси модуль)
  • PT (используется, когда URL проходит через дополнительный обработчик, например, mod_alias)
  • R (временно перемещенная страница — отсылает в заголовок HTTP код 302, по умолчанию)
  • R=301 (навсегда перемещён на новый URL адрес)
  • QSA (добавляет строку параметров запроса к адресу URL параметра замены)
  • S=x (пропускает следующее x количество правил)
  • T=mime-type (принудительно устанавливает тип mime)

Перенаправление содержания страницы на новый URL адрес

RewriteRule ^article/?$ http://www.novyi-domen.kz/article/ [R,NC,L]  # Временно перемещённая страница  

С помощью флага «R» мы изменяем работу дерективы RewriteRule. Вместо внутреннего изменения URL, сервер Apache возвращает в HTTP заголовок сообщение о том, что страница перемещена временно на новый URL адрес, указанный в параметре замены, независимо от того какая была указана URL ссылка, обсолютная или относительная. Заголовок отсыдается обратно включая код 302, который указывает на временное перемещение контента страницы.

RewriteRule ^article/?$ http://www.novyi-domen.kz/article/ [R=301,NC,L]  # Навсегда перемещён на новый URL адрес  

Если нужно переместить навсегда, то к флагу «R» добавляем строку «=301», тогда сервер Апаче отправит заголовок, указывающий на постоянное перемещение данного контента. В отличие от значения по умолчанию флага «R», «R=301» укажет браузеру показать новую URL ссылку в адресной строке. Перенаправление контента является самым распространённым способом настройки URL адресов.

Условия для правил перенаправлвения с простого URL на ЧПУ

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

	RewriteCond %{HTTP_HOST} ^softmaker.kz [NC]  	RewriteRule ^(.*)$ http://www.softmaker.kz/$1 [L,R=301]  

Это правило перенаправляет все запросы на тот же самый URL адрес вида «www.softmaker.kz». Без этого правила произошло бы зацикливание, потому что каждый запрос постоянно соответствовал бы правилу и отправлялся бы сам на себя. Это правило служит для перенаправления запросов с URL адресами без «www», а условие, стоящее перед правилом выполняет эту задачу.

Условия обрабатываются так же, как и правила. Правило начинаетсч с дерективы «RewriteCond» и указывает модулю mod_rewrite, что строка является правилом. Первым параметром является то, что должно проверятся, вторым параметром является шаблон с которым происходит сравнение. В конце, в квадратных скобках указываются флаги, как и в дерективе «RewriteRule». Первым параметром могут быть разные значения, например проверка домена, какой используется браузер, IP адрес и так далее. В подзаголовке Использование серверных переменных в правилах настройки ЧПУ можно увидеть все варианты, с которыми производится сравнение.

Шаблон в дерективе «RewriteCond» почти всегда используется так же, как и в дерективе «RewriteRule» только в некоторых случаях по-другому. Первый параметр не является шаблоном, если начинается со специального символа, описанного в подзаголовке Исключения и дополнения в услвиях правил настройки ЧПУ. Значит, если нужно использовать регулярные выражения в шаблоне, который начинается с символов «<», «>» или дефиса, то необходимо экранировать их обратным слэшем.

Условия настройки URL адресов в ЧПУ могут, как и правила, содержать в себе флаги, но только два: «NC» и «OR». Флаг «NC», как и в правилах, указывает серверу Apache, что правило не зависит от регистра символов (в адресе запроса могут быть, как прописные, так и строчные буквы). Флаг «OR» используется, когда нужно указать, что несколько условий выполняются для одного правила. По умолчанию, без флага «OR», должны совпасть все условия, тогда правило будет выполнено. С флагом «OR», достаточно выполнения одного из них.

	RewriteCond %{HTTP_HOST} ^m.softmaker.kz [OR]  	RewriteCond %{HTTP_HOST} ^en.softmaker.kz [OR]  	RewriteCond %{HTTP_HOST} ^kz.softmaker.kz  	RewriteRule ^(.*)$ http://www.softmaker.kz/$1 [L,R=301]  	# Правило выполниться, если совпадёт хотя бы одно условие  

Исключения и дополнения в услвиях правил настройки ЧПУ

Условия в правилах настройки ЧПУ обычно сравниваются по шаблону регулярных выражений. Но можно ещё использовать другие способы задания условий с помощью следующих дополнений:

  • «!Шаблон» (проверяемая строка несоответствует шаблону)
  • «<Шаблон» (проверяемая строка лексически меньше шаблона)
  • «>Шаблон» (проверяемая строка лексически больше шаблона)
  • «=Шаблон» (проверяемая строка равна шаблону)
  • «-d» (является ли проверяемая строка каталогом)
  • «-f» (является ли проверяемая строка файлом)
  • «-s» (является ли проверяемая строка по размеру больше нуля)
  • «-l» (является ли проверяемая строка символической ссылкой)
  • «-F» (является ли проверяемая строка файлом, проверка через подзапрос)
  • «-U» (является ли проверяемая строка URL, проверка через подзапрос)

Использование серверных переменных в правилах настройки ЧПУ

Серверные переменные это набор элементов, которые проверяются в условия настройки ЧПУ. Использование этих переменных позволяет применять правила основанные на разных параметрах запросов, включая определение параметров браузера, параметров URL и определение множества других строковых значений. Синтаксис написания выглядит следующим образом:

	%{ИМЯ_ПЕРЕМЕННОЙ}  

В условиях правил настройки «ИМЯ_ПЕРЕМЕННОЙ» заменяется на следующие значения:

  • Заголовки HTTP
    • HTTP_USER_AGENT
    • HTTP_REFERER
    • HTTP_COOKIE
    • HTTP_FORWARDED
    • HTTP_HOST
    • HTTP_PROXY_CONNECTION
    • HTTP_ACCEPT
  • Переменные соединения
    • REMOTE_ADDR
    • REMOTE_HOST
    • REMOTE_USER
    • REMOTE_IDENT
    • REQUEST_METHOD
    • SCRIPT_FILENAME
    • PATH_INFO
    • QUERY_STRING
    • AUTH_TYPE
  • Внутренние переменные сервера
    • DOCUMENT_ROOT
    • SERVER_ADMIN
    • SERVER_NAME
    • SERVER_ADDR
    • SERVER_PORT
    • SERVER_PROTOCOL
    • SERVER_SOFTWARE
  • Переменные даты и времени
    • TIME_YEAR
    • TIME_MON
    • TIME_DAY
    • TIME_HOUR
    • TIME_MIN
    • TIME_SEC
    • TIME_WDAY
    • TIME
  • Специальные переменные
    • API_VERSION
    • THE_REQUEST
    • REQUEST_URI
    • REQUEST_FILENAME
    • IS_SUBREQ

Настройка ЧПУ ссылок с использованием нескольких правил

Чем сложнее структура сайта, тем сложнее нужно настраивать правила для этого сайта. Особенно трудно разрешать противоречия между правилами. Часто возникают противоречия, когда добавляется новое правило в файл .htaccess. В таком случае можно заметить, что новое правило само по себе рабочее и правило, добавленное ранее в файл соответствует URL адресу, но этот URL адрес противоречит новому правилу.

	RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$  	files.php?cat_name=$1&file_title=$2 [NC,L]  	# Обработка закачки блога  	RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$  	articles.php?cat_name=$1&article_title=$2 [NC,L]  	# Обработка статьи блога  

В этом примере страница закачки и страница статьи имеют одинаковые шаблоны. Второе правило никогда не совпадёт с URL адресом, так как всё, что должна быть проверено этим правилом будет перехвачено первым. Есть несколько способов обойти это противоречие. В некоторых CMS легко (включая, wordpress) справляются с этой ситуацией, дополнительно добавляя к каждому запросу свою строку:

	RewriteRule ^files/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$  	files.php?cat_name=$1&file_title=$2 [NC,L]  	# Обработка закачки блога  	RewriteRule ^articles/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$  	articles.php?cat_name=$1&file_title=$2 [NC,L]  	# Обработка статьи блога  

Конечно, можно написать один скрипт на PHP, чтобы обрабатывать все запросы, проверяя вторую часть запроса на совпадение с продуктом или статьёй. Можно пойти этим путём, хотя слегка увеличится нагрузка на сервер, но обработка URL адресов улучшится.

	RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$  	files_or_articles.php?cat_name=$1&blog_name=$2 [NC,L]  	# Обработка запроса по закачке и по статье блога  

Во многих случаях можно составить наиболее точные правила обработки запросов, распределяя их в правильном порядке следования. Представим, что на блоге есть правило обработки статей и ещё одно правило обработки страниц статей раздела (на страницу выводится по десять статей текущего раздела, как на этой странице каталога статей).

	# Обработка статьи блога  	RewriteRule ^articles/([A-Za-z0-9-]+)/([A-Za-z0-9-]+).html$  	articles.php?cat_name=$1&file_name=$2 [NC,L]  	# Обработка страниц статей в разделе  	RewriteRule ^articles/([0-9]+)/$ articles.php?page=$1 [NC,L]  

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

Чтобы разрешить это противоречие нужно поставить правила в правильном порядке следования. Первым поставим правило, которое обрабатывает страницы статей в разделе (номер страницы, числовой тип, длиной в две, максимум в три цифры). Тогда возникнет только один конфликт правил, когда название статьи будет состоять из четырёх цифр.

	# Обработка страниц статей в разделе  	RewriteRule ^articles/([0-9]+)/$ articles.php?page=$1 [NC,L]  	# Обработка статьи блога  	RewriteRule ^articles/([A-Za-z0-9-]+)/([A-Za-z0-9-]+).html$  	articles.php?cat_name=$1&file_name=$2 [NC,L]  

site.softmaker.kz


You May Also Like

About the Author: admind

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.