ЧПУ. Очевидное — невероятное

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

При желании, ознакомиться с основной идеей можно, например, в Википедии.

Я же попробую уточнить и несколько доосмыслить эту идею.

Расширения


Что такое расширение файла? Это, грубо говоря, короткий алиас к mime-типу этого файла. Например, если у файла расширение gif, то мы ожидаем, что содержимое файла соответствует типу image/gif, если html — то text/html, js — text/javascript и т. д.

И обычно результат соответствует ожиданию. Но бывают исключения:

vkontakte.ru/newsfeed.php
ru.msn.com/iat/us_ru.aspx
www.opennet.ru/cgi-bin/opennet/man.cgi

Что мы видим в запросе? php, aspx и cgi. А что получаем в ответ? Правильно, text/html.

Почему же? Понятно почему. На сервере это действительно php, aspx и cgi. html-ем оно выглядит только «снаружи». Ничто, конечно, не мешает показывать эти файлы наружу с другим, правильным расширением. Но этого обычно не делают. Потому что считается, что это не проблема — пользователю всё равно (по крайней мере, мы привыкли так думать), а разработчику и админу так проще.

Считать ли эту проблему достойной решения вопрос открытый. Но мы, по крайней мере, можем утверждать, что

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

Папки, файлы и страницы


Что такое папка? Это, если по-простому, способ группирования файлов. А что такое папка в контексте сайта? Ответ не так очевиден, как может показаться на первый взгляд.

Да, со стороны веб-сервера это всё ещё способ группирования файлов. Но так ли это для пользователя? Нет, не так. И вот почему.

Позволю себе утверждать (опираясь, в основном, на личный опыт общения с пользователями-не-гиками), что пользователь не воспринимает сайт как часть файловой системы, как набор разрозненных файлов и папок. Сайт для пользователя, это набор связных страницы. Да, конечно, страница продолжает быть файлом. В контексте HTTP html-файл ничем не примечателен, это точно такой же файл, как png или js. И HTTP не знает ничего ни о каких страницах.

Для пользователя же, ничего не знающего про TCP/IP, HTTP и HTML, разница огромна. Страница — это некая магическая субстанция, с картиночками, кнопочками, ссылочками. А файл — это просто файл. Его можно скачать, положить рядом с другими файлами и он ничем не будет от них отличаться. Там тоже, конечно, есть своя магия, но она не имеет отношения к интернету (читай, вебу). Страница же существует только пока открыт браузер. Да, её тоже можно скачать, но тогда пропадёт вся особая магия интернета — ссылочки перестанут кликаться, кнопочки — нажиматься и выглядеть она будет, скорее всего, совсем не так, как «в интернете». В общем, это будет мёртвая страница.

Итак, страница — не файл. Страница — это страница.

Но если файл — больше не файл, то что же тогда такое папка? Файлов нет, а папки есть? В папку же можно заглянуть и увидеть там файлы. А тут — нельзя. А если таки попытаться, то увидишь не её содержимое, а другую страницу. Так какая же это папка? А это и не папка. Это страница и есть.

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

А если нет разницы, то зачем их различать? Не надо их различать, надо отказаться от расширений, а запросы со слешом на конце и без него сделать синонимами друг друга.

/news.php — непонятно (к тому же, неправда, ведь в ответ приходит не php, а html)
/news — гораздо лучше
/news/ — и так тоже хорошо

Последний вариант используют Гугл, Хабр и Студия Лебедева. Что как бы намекает :)

Страница — это не файл и не папка, страница — это страница.

Параметры


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

Здесь мне добавить особо нечего. Да, некрасиво. Да, нечитаемо. Да, надо избавляться.

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

/catalogue.php?sect=11&kind=6 — некрасиво
/catalog/11/16/ — немногим лучше (пример из Википедии)
/catalogue/light/bulbs/ — уже неплохо (этот пример теперь тоже есть в Википедии)

Параметры — главный враг человеко-понятности.

Язык


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

Возьмём пример (почти) идеальной реализации ЧПУ, сайт Студии Артемия Лебедева (я, кстати, только при написании статьи обнаружил, что они отказались от расширений для html-файлов, ещё недавно они были, причём, не какие-нибудь php или py, а честные html):

www.artlebedev.ru/everything/optimus/

Замечательный урл. Но, всё же, что-то в нём не так, вы не находите? Что-то едва заметно режет глаз. Что же?

А ведь части адреса не вполне соответствуют названиям разделов/страниц. Раздел «Наше всё» представлен в урле словом everything, а страница про клавиатуру «Оптимус» — словом optimus.

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

Странноватое исключение, вы не находите?

Все названия дублируются на инородном, по отношению к контенту сайта, языке. С какой целью? Это удобно. Нет. Очевидно? Нет.

Почему бы не написать /всё/оптимус/? Или, даже /всё/Оптимус/.

Так делает Википедия, а также все проекты фонда Викимедиа и некоторые другие сервисы на базе Медиавики.

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

PS. Я намеренно опустил все нюансы реализации подобных урлов, чтобы сосредоточиться на теории. Реализацию, при желании, можно обсудить отдельным топиком. Есть желание? :)

PPS. Подскажите, куда лучше переложить топик, ничего лучше Веб-стандартов я не придумал.
–6
3 марта 2010, 07:05
12

комментарии (68)

+6
Nc_Soft #
«ЧПУ. Очевидное — невероятное».
Ничего невероятного я тут не увидел. Рядовому юзеру абсолютно наплевать что там в адресной строке творится, так что чпу придумали сеошники, хотя отчасти согласен что ключевики в урл улучшают выдачу.
+3
homm #
Пока там творится черти что, юзеру наплевать. Если все сайты будут иметь понятные URL на родном языке, пользователи начнут обращать туда внимание чаще.

У Ильи Бирмана есть концепт умной адресной строки.
0
gigimon #
Почему это начнут? Большинство ходит на сайты из закладок или поиска. У меня, например, папа вообще сидит без адресной строки (полный экран в опере), он посещает 2 десятка сайтов из закладок и клацает у них на ссылки — все, он даже не задумывается, что там.
Красивый и понятный урл обычно легче для программиста, легче разбирать куда что вывело
0
smmurf #
К примеру, хороший УРЛ можно быстро найти и выбрать в автокомплите из адресной строки браузера. Даже если его нет в закладках. Если он в закладках, то от этого хуже не станет, а если нет — то будет удонее.
0
maxmaximov #
Ну не все, конечно, но некоторые наверняка начнут. Назовём их латентными гиками :)
0
maxmaximov #
Неудивительно, что не увидел, это же ирония :)

Мне неважно, кто автор идеи. Важно, что она позволяет сделать пользователю удобно. Пусть даже это и не самый рядовой пользователь.
0
samlabs821 #
Желание есть!!! Особенно CGI
НЛО прилетело и опубликовало эту надпись здесь
+7
papasha_mike #
О том, что «Страница — не файл. Страница — это страница. Но если файл — больше не файл, то что же тогда такое папка? Файлов нет, а папки есть?» Примерно о том же рассуждал и Диоген, подремывая в бочке.
НЛО прилетело и опубликовало эту надпись здесь
0
maxmaximov #
Спасибо, конечно, но ты мне льстишь :)
+6
kalpsik #
автор борец за кириллицу в url'ах? имхо — бред. раз так — хорошо, домен.рф, кириллические url'ы, а вот http:// для указания урла кто писать будет? а / тоже очень удобно в русской раскладке писать. почему страны с иероглификой или вязью не стремятся в адресную строку засунуть свою письменность? а потому что тогда ресурс потерян для других языков. или например мультиязычный сайт, что с ним делать? сразу несколько доменов делать под свой язык в своей доменной зоне?
есть устоявшиеся понятия, в их числе и, признанный международным, английский язык, поэтому нет ничего страшного в написании урлов на этом языке.
+1
maxmaximov #
Почему же не стремятся:

http://例子.测试/首页
http://مثال.إختبار/مثال.إختبار
http://בײַשפּיל.טעסט/בײַשפּיל.טעסט

Кстати, попробуйте перейти по последней ссылке и повыделять адрес в строке запроса, и мышкой и клавиатурой. Вот где песня-то!

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

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

С английским языком есть, по меньшей мере, одна серьёзная проблема. Не знает русскоязычный пользователь английского языка. Среди пользователей, например, Яндекса им владеют только 7%. А это, на минуточку, самый посещаемый портал Рунета.

Я не чтобы агитирую этим топиком за кириллицу в урлах, скорее предлагаю обсудить. Объективные плюсы/минусы, субъективные ощущения.

Кстати, слеш в предыдущем предложении набран в русской раскладке — Shift-\ — рекомендую.
0
kalpsik #
=) китайский я не знаю, но иногда приходится посещать китайские сайты, и примерно понять стоит туда лезть или нет, помогают как раз английские url'ы. особого смысла в кириллице в адресной строке я не вижу, на мой взгляд понятная навигация на сайте более необходима, да и если использовать адресную строку для поиска — почему бы просто не забить слово в пустую адресную строку и получить выдачу ПС по нему?
–4
claustrofob #
во всех закладках и ссылках у вас будет www.artlebedev.ru/%D0%B2%D1%81%D1%91/%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D1%83%D1%81/.
В википедии так сделано, потому что там урл это практическм строка поиска, что ввёл то и получил.
0
Shvonder #
С этим я согласен. Имеет смысл делать русский язык, когда человек с большой вероятностью сможет туда ввести что то и получить правильный ответ. /всё/Оптимус/ — я отсюда могу понять где я нахожусь и не более. Хотя узнать, где я нахожусь я могу и по меню (навигации) сайта. Я больше не знаю, что там еще есть кроме «Оптимуса».
0
claustrofob #
Точно так же организован поиск по тэгам на хабре, да и не только на хабре. И это удобно. А делать мешанину из русских слов, слешей и параметров — это по меньшей мере неэстэтично.
+2
homm #
Я вот кликнул по вашей ссылке, Опера сама преобразовала в www.artlebedev.ru/всё/Оптимус/. Добавил в закладки, там тоже на русском.
0
claustrofob #
повезло, жаль что кроме оперы есть ещё несколько хороших браузеров
+3
homm #
Хром и ФФ тоже преобразовали. Только ИЕ не смог.
Помоему вы просто немного отстали от прогресса. Никаких проблема с кирилицей в URI со стороны браузеров нет. Вот в доменах есть, к сожалению.
0
claustrofob #
Нет, преобразовать то они не преобразовывают. В опере всё супер, согласен. В ФФ и Хроме в закладке русские буквы энкодятся как в моём примере. ИЕ не могу проверить под убунтой.
0
claustrofob #
Нет, преобразовать то они не преобразовывают
+1
homm #
Пешие багрепорты хрому и ФФ.
+1
smmurf #
С другой стороны так получается, что у нас в УРЛе смешаны кириллица и латиница. Кириллические домены — зло, обосновывать, надеюсь, даже не нужно. То есть домен у нас останется латиницей, а путь будет кириллическим? Как-то просто некрасиво и неаккуратно получается.
Как вариант, если ориентируемся на русскоязычную аудиторию — писать пути транслитом. Это получается что-то среднее: и не английский язык, и не кириллический алфавит.
А еще как вариант делать альясы к документу и по-русски, и по-английски. С использованием национальных алфавитов. Но и тут не все гладко — как в этом случае определить, какой вариант использовать для адресации внутри самого сайта? Я пока не знаю.
В общем, я, скорее всего, консерватор. Со всеми пунктами, в принципе, согласен, но вот кириллица в адресах сильно смущает.
0
maxmaximov #
Почему же не надо? Обоснуй, пожалуйста :)
+1
smmurf #
Продиктуйте эти адреса знакомому по телефону :-)
Это как минимум.
Нужно или делать для такого рода сайта домен и латиницей, и в национальном алфавите, или ограничиться посетителями преимущественно из своей страны. Хотя там может и быть контент на английском.
0
maxmaximov #
А зачем бы мне это делать? Не вижу ни одной причины. Я как не пользовался китайскими сайтами, так и продолжу ими не пользоваться :)

И китайцы как не пользоваться русскими сайтами так и продолжат не пользоваться.

Ну а если сайт у тебя мультиязычный, то будь добр приобрести домен для каждого языка. Чтобы всем было одинаково удобно. Для больших международных порталов это не проблема. Либо откажись от нелатиницы в урлах, да, это тоже вариант для мультиязычного сайта.
НЛО прилетело и опубликовало эту надпись здесь
+1
claustrofob #
%D0 — это не фигня. URL по стандарту не может содержать кириллических символов и их поддержка и отображение лежит на плечах клиентов-браузеров. И как раз ФФ и Хром у меня в закладках заэнкодили этот урл.
НЛО прилетело и опубликовало эту надпись здесь
+1
smmurf #
Так пусть к серверу запросы отправляют в таком виде, кто же им мешает? А вот пользователю должны показывать раскодированный адрес. Как в закладках, так и в адресной строке.
–1
r21514 #
Кстати, softodrom на днях разродился кириллическими URL'ами… так, к слову
+4
dohlik #
PPS. Подскажите, куда лучше переложить топик, ничего лучше Веб-стандартов я не придумал.


Переложите в черновики ;)

ЗЫ. Правильно в комментах говорят — юзер не будет руками вбивать в адресной строке названия на русском языке, ему проще в строке поиска ввести, либо выбрать где-то в навигационном меню (если оно грамотно сделано).
+2
smmurf #
Он и не должен вбивать руками. Он должен видеть, куда приведет его та или иная ссылка, а для этого достаточно навести на нее мышь и посмотреть в строку состояния. Набирать ничего не надо :-)
+1
dohlik #
Куда ведет ссылка должно быть видно из самого текста ссылки. А техническая реализация пользователя волновать не должна.
+1
smmurf #
Так бывает не всегда
Хотя да, так должно быть.
0
maxmaximov #
Ну вообще-то, к сожалению, должна. Пока есть товарищи, пытающиеся пользователя обмануть и увести не туда.
0
dohlik #
Ну уж домен-то видно и так, безо всяких кириллиц в ЧПУ.
0
maxmaximov #
Домена не всегда достаточно. Слышал что-нибудь про XSS?
0
dohlik #
Поправьте меня, но по большей части это проблема сервера (если мы говорим про необходимость фильтрации поступающих данных), а не пользователя. Уж бОльшая часть пользователей про XSS наверняка не слышала
0
maxmaximov #
В конечном итоге это всегда проблема пользователя. Ну и слышали, не слышали, но лишить их возможности ознакомиться со ссылкой, прежде чем переходить по ней, мы пока, к сожалению, не можем.
–1
Busla #
плюс стопиццот, а ещё, автор, откажись от dns — пусть будут только ip ;-)

А если серьёзно, то по логике вещей странички с расширением — это конечные материалы: статьи, отдельные записи блога и т.п., а «папки» — индексные файлы, т.е. списки сылок на эти самые статьи и записи блога.
+1
maxmaximov #
Попробуй объяснить своей бабушке разницу между «/», «/index.html» и «/Главная_страница» :)
0
Busla #
При чём тут бабушка? — если можно добавить немножко логичности структуре адреса, почему это не делать?! Или вы делаете сайты только для бабушек?
+1
maxmaximov #
Ты, видимо, не пробовал спросить это у бабушки. Попробовал бы и узнал, что нет, расширения у html-файлов это нисколько не логично.

Ну и да, мы делаем сайты для бабушек. Ведь ты, конечно, догадался, что бабушка — это метафора массового пользователя? :)
+1
Busla #
У бабушки — может быть, а большинство студентов и школьников (что больше подхожит для метафоры массового пользователя) пробовали хоть раз сохранить страничку и для них расширение естественно (без него хрен потом откроется).
0
maxmaximov #
Про студентов/школьников согласен. Им должен помочь специальный заголовок — Content-Disposition. Деталей, впрочем, не знаю.

С другой стороны, я вот не могу вспомнить, когда мне последний раз приходилось сохранять страницы из браузеры.
0
maxmaximov #
А, ну да, я же их wget-ом сохраняю ) Это не вариант. Надо будет внимательно на Content-Disposition посмотреть.
0
Busla #
Для тех, кто пользуется wget'ом понятие расширения ещё более естественно ;-)
0
maxmaximov #
Да, и, пожалуйста, спроси её заодно, какой вариант ей больше нравится.
+1
FTM #
не думаю, что пользователь будет ручками вбивать урлы сайтов дальше доменного имени, а посему ему будет глубоко плевать, как там внутри все устроено, лишь бы была удобная навигация, которая позволит быстро добраться до нужного места.
+1
lexazloy #
Будут. Вы не учитываете сайты вроде php.net, википедии и подобных, где вбить адрес руками проще хотя бы потому что быстрее.

Перед ЧПУдрочем просто стоит задаваться вопросами: будут ли; надо ли?
0
maxmaximov #
Перед любым дрочем стоит задаться вопросом: надо ли? :)
0
maxmaximov #
Удобная навигации, конечно, важно. Но и удобные урлы тоже не совсем уж бесполезны. Просто у них целевая аудитория меньше.
0
maxmaximov #
Боже, что это было. Удобная навигации, конечно, важно.
+1
barker #
Судя по недавней истории с логином на фейсбук ( lotares.habrahabr.ru/blog/84473/ ) большинство «обычных» пользователей (о которых и пекутся в этой статье) вообще понятия не имеют где находится адресная строка и зачем она там.
0
maxmaximov #
Всего сотни? Из миллионов пользователей Гугла и Фейсбука? Мне кажется, это хорошая новость!
0
Evengard #
А вы знаете, что, например, в том же Фаерфоксе, русские УРЛы превращаются в нечто вроде %D5%G1%25 и тд? Какое ж это ЧПУ? Я могу понять — транслит, в википедии видимо чтото особенное для норм отображения используется (кста, интересно — что?), но в стандартных условиях?..
А русскоязычные домены, которые превращаются в xn--непоймичего — вообще враг ЧПУ как таковой
0
smmurf #
Насчет доменов глупо спорить, а вот отображение адресов — это явный «косяк» в интерфейсе Fx.
НЛО прилетело и опубликовало эту надпись здесь
0
maxmaximov #
Проблема не в cp1251, просто кодировка урла и страницы должны совпадать.
0
maxmaximov #
Автор текста по ссылке меня немного пугает.

Спецификация:
Рекомендуем браузерам сделать следующее:
— Заменить каждый символ кодировкой urf-8…

Девушка-автор:
Следуя рекомендациям экранируем нашу ссылку…

Девушка — браузер? :)
0
lexazloy #
> Почему бы не написать /всё/оптимус/? Или, даже /всё/Оптимус/

Потому что до недавнего времени, браузеры конвертили такой УРЛ в какую.

Потому что, если структура описана не в БД, а файлами, то надо сильно-сильно морочиться.

Потому что, чтобы сделать английскую версию сайта придётся дублировать идентификатор УРЛа.

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

Конечно, русский в адресной строке был бы предпочтительнее, если не связанный с ним геморрой. Но имеет то, что имеем.
0
maxmaximov #
«Но имеет то, что имеем».

Ты про лень? Согласен, это проблема! :)
0
maxic #
Кстати google советует «язык» использовать как раз как параметр.
Вот так например: /about/awards/?lang=ru а не /ru/about/awards/

–1
Zada #
«Страница» это не страница, «страница», это ресурс. ru.wikipedia.org/wiki/REST
НЛО прилетело и опубликовало эту надпись здесь
–1
maxmaximov #
REST — это прекрасно. Но речь про массового пользователя.

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