Человекопонятный URL

У этого термина существуют и другие значения, см. ЧПУ (значения).

Человекопонятный URL (сокр. ЧПУ, также семантический URL, англ. friendly URL➤) — URL-путь, состоящий из понятных слов[1][2][3][4], вместо идентификаторов, и отражающий файловую структуру сайта➤. Например, вместо `/c14/3/97/` или `/index.php?cat=10&subcat=2&id=41` используется `/product/phone/Samsung/`.

Человекопонятные пути улучшают удобство использования, кроме того, позволяют по названию ссылки заранее предполагать содержимое страницы по ней[1][5][6] и представлять структуру сайта[1][6].

Технически URL может содержать только буквы латинского алфавита и некоторые символы. Все другие символы, включая русские буквы, кодируются (percent‐encoding) и могут выглядеть вроде `Лук`. Поэтому обычно в адресах используют латиницу, чтобы избегать осложнений для пользователей➤[7].

## Содержание

* 1 Концепция
* 2 Название
* 3 Структура
* 4 Поисковая оптимизация (SEO)
* 4.1 Возможные проблемы
* 5 Реализация
* 5.1 Slug
* 5.2 Реализация на различных серверах
* 6 См. также
* 7 Примечания
* 8 Ссылки

## Концепция

[править | править код]

Semantic URL предназначен для повышения удобства использования и доступности веб-сайта или веб-службы, будучи сразу же естественным образом и интуитивно осмысливаемым для пользователей-неспециалистов. Такие схемы URL стремятся отразить концептуальную структуру набора информации и отвязать пользовательский интерфейс от внутреннего представления информации на сервере. Другие причины для использования «чистых» URL включают в себя поисковую оптимизацию (SEO)[8], соответствие REST-стилю архитектуры программного обеспечения, а также уверенность в том, что отдельные веб-ресурсы[англ.] остаются постоянно на том же URL. Это делает Всемирную паутину более стабильной и полезной системой, а также предоставляет более долговечные и достоверные закладки веб-ресурсов (bookmarkable URL), в которые не попадут данные кук или сессии с другого компьютера[9].

Semantic URL также не содержит деталей реализации веб-приложения, на котором базируется страница. Это приносит пользу, уменьшая сложность изменения реализации ресурса в более позднем периоде. Например, многие несемантические URL включают в себя имя файла сценария на стороне сервера[англ.], такого как example.php, example.asp или cgi-bin. Если базовая реализация ресурса изменялась, такие URL должны были бы меняться вместе с ним. Подобно этому, когда URL non-semantic, если база данных сайта перемещалась или реструктуризировалась, была вероятность возникновения неработающих ссылок, как внутренних, так и из внешних сайтов, причём последние могут привести к их удалению из списков поисковых машин. Использование semantic URL предоставляет различным user agent последовательное расположение для ресурсов, не зависящее от внутренней структуры. Ещё одной потенциальной пользой от использования semantic URL является то, что сокрытие внутренней информации сервера или приложения может улучшить безопасность системы.

Friendly URL не содержит много дополнительных символов[10] (например, `?` или `&`[5]). Такой URL — более запоминающийся, и пользователь может сделать вывод, что будет отображено на странице[5].

«Понятные человеку URL» предполагают сокращение адресов страниц до максимально лаконичных и понятных. Они создают подобие естественной для человека логической структуры данных на сервере, представляя её в виде иерархичной (древовидной) структуры, аналогично файловой системе. Такие адреса удобней прочитать, понять и воспроизвести. К тому же это помогает ориентироваться в логической структуре сайта, лишь взглянув на вложенность каталогов. Не обязательно переходить на страницу, чтобы узнать, что на ней размещено. В некоторых случаях для того, чтобы пройти на родительские каталоги, необходимо всего лишь стереть до нужного места адрес, а чтобы перейти на главную страницу, стирается всё, кроме доменного имени.

Такие адреса демонстрируются поисковыми системами прямо в поисковой выдаче[11], в том числе по этим адресам происходит поиск ключевых слов. ЧПУ используют в методах поисковой оптимизации (SEO)➤.

## Название

[править | править код]

Использование сложных URL вместо «human-readable» каталогов уже в 1996 году выделялось в топ-10 ошибок веб-дизайна[12]. В 1998 году Тим Бернерс-Ли написал статью про «cool URI». Про чистый и понятный URL в марте 2000 года в Ководстве писал Артемий Лебедев. Термин «ЧПУ» обозначает «человекопонятный УРЛ», другой вариант — букв. «человеку понятный урл», где жаргонное «урл» — URL[13]. Основная версия появления этого термина на русском языке состоит в том, что в сентябре-ноябре 2000 года заметка «ЧПУ и PHP» из личного блога[14] была опубликована как статья на нескольких профильных веб-программированию сайтах, а последующая распространённость ссылок на эту статью дала начало и широкому использованию этого термина.

Компания «Google» называет подобный адрес «simple-to-understand URL»[3] или «простым URL»[15]. В Microsoft SharePoint используется название terms-friendly URL или полнотекстовый URL. Также используются названия: semantic URL (букв. семантический URL), clean URL[16], RESTful URL, pretty URL, friendly URL[17] (FURL), search engine friendly URL (SEF URL)[18][19], search engine optimization friendly URL (SEO-friendly URL), human-friendly URL, user-friendly URL и human-readable URL.

## Структура

[править | править код]

Обычно non-semantic URL состоит из пути, имени сценария и строки запроса[англ.]. Параметры строки запроса определяют содержание, показываемое на странице, и часто включают в себя трудную для понимания или не имеющую отношения к пользователям информацию, такую как внутренние числовые идентификаторы для значений из базы данных, «percent‐encoding», идентификаторы сеансов[англ.], детали реализации и так далее. Адреса semantic URL, наоборот, содержат только путь ресурса, который в иерархии отражает некоторую логическую структуру, такую чтобы пользователи могли легко её истолковать и манипулировать ею.

Организация контента должна быть такой, чтобы URL имели логическую структуру[4]. В ЧПУ поисковые системы лучше понимают вложенность[2]. Удаляя непонятную «ненужную» часть не-ЧПУ URL, пользователь получает неработающую ссылку[3]. Для перехода по уровням иерархии структуры сайта также используют подобную ЧПУ, дублирующую навигацию[6]. В случае удаления последнего в ЧПУ слова до знака косой черты пользователь попадет в вышестоящую категорию[2]. URL может отображать путь из каталога на сервере к файлу. В то же время ЧПУ должен содержать ту же информацию для того же файла, какую в не-ЧПУ получает скрипт в строке параметров[8]. Для этого используют разные способы переписывания URL➤.

Non-semantic URL | Semantic URL

|

`http://example.com/index.php?page=name` | `http://example.com/name`
`http://example.com/index.php?page=consulting/marketing` | `http://example.com/consulting/marketing`
`http://example.com/products?category=2&pid=25` | `http://example.com/products/2/25`
`http://example.com/cgi-bin/feed.cgi?feed=news&frm=rss` | `http://example.com/news.rss`
`http://example.com/services/index.jsp?category=legal&id=patents` | `http://example.com/services/legal/patents`
`http://example.com/kb/index.php?cat=8&id=41` | `http://example.com/kb/8/41`
`http://example.com/index.php?mod=profiles&id=193` | `http://example.com/profiles/193`
`en:Semantic_URL` | `en:Semantic_URL`

## Поисковая оптимизация (SEO)

[править | править код]

URL должен быть кратким и описательным, может содержать между словами дефис вместо подчёркиваний. Избегание специальных символов связано и с тем, что поисковые роботы не индексируют URL дальше `?`, предполагая, что после него нет ценной информации.[20]

В методах поисковой оптимизации (SEO) ЧПУ наполняют релевантными ключевыми словами, кратко описывающими содержание[21] и удаляют нерелевантные слова. Общие слова, которые удаляют, включают в себя артикли и союзы, в то время как описательные ключевые слова добавляются для повышения дружелюбности к пользователю и улучшения рейтинга в поисковых системах[8].

### Возможные проблемы

[править | править код]

* Зачастую ЧПУ удлиняет строку веб-адреса. Излишне длинная строка адреса может быть неудобна как для использования людьми, так и не работать из-за технических ограничений на длину веб-адресов.
* В веб-адресе все нелатинские буквы, в частности, русские, а также пробелы и большинство символов, конвертируются кодировкой, называемой англ. percent‐encoding или URL-encoding. Например, «Лук» превратится в `Лук`. Конвертированный вид ссылок непонятен людям и неудобен для ввода. Поэтому обычно слова ЧПУ составляются только из допустимых символов (латинские буквы, цифры и несколько знаков пунктуации:`- _ . ~`[22]), чтобы избежать появления percent‐encoding в адресе. Некоторые сайты используют в URL слова на языке пользователя; в этом случае предполагается, что сам браузер, показывая пользователю URL, перекодирует его из формы percent‐encoding в слова, но так делают не все браузеры.

## Реализация

[править | править код]

Реализация семантических URL включает в себя «URL mapping»[англ.] через сопоставление с образцом или «Rewrite engine»[англ.] — методы прозрачной перезаписи URL. Так как обычно это происходит на стороне сервера, то часто единственной формой видимой пользователю будет семантический URL.

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

### Slug

[править | править код]

Некоторые системы определяют slug как часть URL, которая идентифицирует страницу в удобочитаемых[англ.] ключевых словах.[24][25] Обычно он является концевой частью URL, которая может быть интерпретирована как название самого ресурса, подобно базовому имени в имени файла или заголовоку страницы. Такое название «slug» происходит из использования слова slug[англ.] в средствах массовой информации с целью указания краткого имени, даваемого статье для внутреннего использования.

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

В основном slug делается полностью в нижнем регистре, символы с диакритическим знаком заменяются латинскими буквами, и пробельные символы[англ.] заменяются на дефис или подчёркивание, чтобы избежать «percent‐encoding». Знаки препинания, в основном, удаляются, как и удаляются некоторые короткие общие слова, такие как союзы. Например:

* название: This, That and the Other! An Outré Collection;
* сгенерированный slug: `this-that-other-outre-collection`.

### Реализация на различных серверах

[править | править код]

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

На сервере IIS такая функциональность реализуется бесплатным модулем «URLRewriter». В то же время для сервера Apache существует модуль «mod rewrite», который настраивается через файл .htaccess.

Например, указав следующий код, веб-мастер сможет в PHP через массив `$_SERVER['REQUEST_URI']` получать все переданные параметры, а точкой входа по любому запросу будет index.php[26].

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L,QSA]

В веб-фреймворках (CodeIgniter, Django, Node.js, Ruby on Rails или Zend Framework) веб-сервер не обращается к скрипту, а просматривает специальный файл на предмет настроек указанного пути. Такой путь указывается или регулярными выражениями, или на специальном языке.

Например, в Ruby on Rails, чтобы указать, что при вызове `/users/login` будет вызываться метод `show` класса `users`, а в случае `/users/` — метод `index` класса `users`, используется следующий код:

Rails::Application.routes.draw do
get 'users',     to: 'users#index'
get 'users/:id', to: 'users#show'
end

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

Например, так действует Ramaze. При вызове `show/id/`, где id — переменная (при этом класс обязательно должен быть контроллером):

class CommentsController < Ramaze::Controller
def index
# Создание списка комментариев
end

def show(id)
# Вывод комментария с нужным ID
end
end

## См. также

[править | править код]

* Постоянная ссылка
* Persistent Uniform Resource Locator
* Нормализация URL
* Перенаправление URL
* Сокращение URL

## Примечания

[править | править код]

1. ↑ 1 2 3 § 48\. Боремся за чистоту урлов Архивная копия от 29 июля 2016 на Wayback Machine.
2. ↑ 1 2 3 Создание SEF (ЧПУ) ссылок на сайте Архивная копия от 31 июля 2016 на Wayback Machine.
3. ↑ 1 2 3 Google Inc. Search Engine Optimization Starter Guide. — С. 8. Архивировано 23 сентября 2016 года.
4. ↑ 1 2 Структура URL Архивная копия от 9 августа 2016 на Wayback Machine.
5. ↑ 1 2 3 Rob Allen, Nick Lo, Steven Brown. Zend Framework in Action. — Manning, 2009-01-01. — С. 27. — 438 с. — ISBN 9781933988320.
6. ↑ 1 2 3 § 49\. Дублирующая навигация  (неопр.). Дата обращения: 19 июля 2016. Архивировано 28 июля 2016 года.
7. ↑ Tim Berners-Lee. Electronic publishing and visions of hypertext // Physics World. — 1992-06. — Т. 5, вып. 6. — С. 14–18. — ISSN 2058-7058 0953-8585, 2058-7058. — doi:10.1088/2058-7058/5/6/16.
8. ↑ 1 2 3 Opitz, Pascal. Clean URLs for better search engine ranking  (неопр.). Content with Style (28 февраля 2006). Дата обращения: 9 сентября 2010. Архивировано 6 января 2012 года.
9. ↑ Berners-Lee, Tim. Cool URIs don't change  (неопр.). Style Guide for online hypertext. W3C (1998). Дата обращения: 6 марта 2011. Архивировано 5 ноября 2022 года.
10. ↑ Quentin Zervaas. Practical Web 2.0 Applications with PHP. — Apress, 2008-03-11. — С. 5. — 580 с. — ISBN 9781430204756.
11. ↑ Sefurl — Search Engine Friendly Uniform Resource Locator (нем.). Дата обращения: 10 августа 2015. Архивировано 13 апреля 2015 года.
12. ↑ Нильсен, Якоб. Original Top 10 Mistakes in Web Design  (неопр.). www.nngroup.com (1 мая 1996). Дата обращения: 16 июня 2017. Архивировано 5 июля 2023 года.
13. ↑ Андрей Дыкан. Клиентское SEO. — Litres, 2016-02-20. — С. 323. — 414 с. — ISBN 9785040002634.
14. ↑ Spectator.ru — Заметка №161 — ЧПУ и PHP  (неопр.) (5 сентября 2000). Дата обращения: 16 июня 2017. Архивировано 17 февраля 2001 года.
15. ↑ Google Inc. Руководство по поисковой оптимизации для начинающих. — С. 8. Архивировано 22 августа 2015 года.
16. ↑ Step 6: Configure clean URLs Архивная копия от 26 марта 2016 на Wayback Machine.
17. ↑ Friendly URL Архивная копия от 6 августа 2016 на Wayback Machine.
18. ↑ How to Create an SEO-Friendly URL Structure Архивная копия от 16 июля 2016 на Wayback Machine.
19. ↑ Мэрриотт Дженнифер, Уоринг Элин. SEF URL // Joomla! 3.0. Официальное руководство. — СПб.: Издательский дом «Питер», 2013. — С. 464. — 496 с. — ISBN 9785496006637.
20. ↑ Hussien A. S. Factors Affect Search Engine Optimization // International Journal of Computer Science and Network Security (IJCSNS). — 2014. — Т. 14, № 9. — С. 29. Архивировано 16 августа 2016 года.
21. ↑ Duane Forrester. Turn Clicks Into Customers: Proven Marketing Techniques for Converting Online Traffic into Revenue: Proven. — McGraw Hill Professional, 2010-01-08. — С. 14. — 238 с. — ISBN 9780071638685.
22. ↑ RFC 3986 — Unreserved Characters Архивная копия от 21 мая 2019 на Wayback Machine.
23. ↑ Uniform Resource Identifier (URI): Generic Syntax  (неопр.). RFC 3986. Internet Engineering Task Force. Дата обращения: 2 мая 2014. Архивировано 4 декабря 2012 года.
24. ↑ Slug in the WordPress glossary  (неопр.). Дата обращения: 11 июля 2016. Архивировано 24 июня 2016 года.
25. ↑ Slug in the Django glossary Архивная копия от 3 мая 2016 на Wayback Machine.
26. ↑ ЧПУ на PHP. Прочь от ModeRewrite правил. Единая точка входа Архивная копия от 8 февраля 2014 на Wayback Machine.

## Ссылки

[править | править код]

* Сергей Кокшаров. ЧПУ-адреса - описание, рекомендации, примеры  (неопр.). devaka.ru (27 июня 2012).
* «§ 48\. Боремся за чистоту URL», Артемий Лебедев, «ру/Ководство», 23 марта 2000
* «§ 49\. Дублирующая навигация», Артемий Лебедев, «ру/Ководство», 22 апреля 2000
* Нильсен, Якоб. URL as UI (англ.). Jakob Nielsen's Alertbox (21 марта 1999).
* Пол Хоффман. The User Interface of URLs (англ.) // INET'95 Conference Proceedings: International Networking Conference, Honolulu, Hawaii, USA, 27-30 June 1995 / Kilnam Chon. — Reston, VA: Internet Society, 1995. — Vol. 1. — P. 123—126.
* Бернерс-Ли, Тим. Cool URIs don't change (англ.). Style Guide for online hypertext. Консорциум Всемирной паутины (1998).
* mw:Manual:Short URL/ru MediaWiki
* Friendly URLs and web content viewers  (неопр.). IBM Knowledge Center. IBM.
* Thomas A. Powell, Joe Lima. Next Generation URLs  (неопр.) (22 декабря 2011). Дата обращения: 26 июля 2016. Архивировано 22 декабря 2011 года.
* Cool URIs for the Semantic Web — W3C

*[СПб.]: Санкт-Петербург