TorrentPier 3.0: роутинг, ЧПУ и канонические URL

Exile

Administrator
Привет.

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

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

Что было​

Если вы когда-нибудь обращали внимание на адресную строку TorrentPier, то видели такие URL:
Code:
/viewtopic.php?t=123
/viewforum.php?f=5
/profile.php?mode=viewprofile&u=1
Классика из эпохи phpBB2. Такие адреса работают, но поисковики их не любят, а пользователи не понимают куда ведет ссылка.

Что стало​

В версии 3.0 все основные сущности получили красивые семантические URL (ЧПУ):
СущностьБылоСтало
Главная/index.php/
Темы/viewtopic.php?t=123/threads/topic-title.123/
Форумы/viewforum.php?f=5/forums/forum-name.5/
Категории/index.php?c=2/categories/category-name.2/
Профили/profile.php?mode=viewprofile&u=1/members/username.1/
Группы/group.php?g=3/groups/group-name.3/
Настройки профиля/profile.php?mode=editprofile/settings/

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

Главное - обратная совместимость​

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

При этом:
  • GET-запросы получают 301 редирект (постоянный) - поисковики постепенно переиндексируют сайт
  • POST-запросы обрабатываются как обычно - данные форм не потеряются

Умные слаги​

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

Тема «Новый фильм 2025» превратится в /threads/novyj-film-2025.123/.

Если название темы изменилось - не проблема. При переходе по старому слагу произойдет редирект на актуальный. SEO-вес сохраняется.

Канонические URL​

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

Что это дает​

  • SEO. Поисковики любят понятные URL с ключевыми словами
  • UX. Пользователи видят куда ведет ссылка до клика
  • Шаринг. Ссылками приятно делиться в соцсетях и мессенджерах
  • Консистентность. Все URL заканчиваются на /, автоматический редирект если без слеша

Для разработчиков​

В шаблонах появились удобные хелперы:
Code:
{{ url.thread(topic_id, topic_title) }}
{{ url.forum(forum_id, forum_name) }}
{{ url.member(user_id, username) }}
В PHP-коде:
PHP:
url()->thread($topicId, $topicTitle);
url()->forum($forumId, $forumName);
url()->member($userId, $username);
Больше не нужно склеивать строки вручную - просто вызываете метод и получаете правильный URL.

Что дальше​

Семантические URL - часть большой работы над улучшением TorrentPier. В следующих статьях расскажем о других изменениях в версии 3.0.
 
Напомнило xenforo..

url()->member($userId, $username);
username какой тут несёт смысл если передается user_id?

В торрентпир было profile_url($row) где функция сама выбирала поля пользователя из передаваемого массива. Из-за твига перешли к конструкции с двумя переменными?

К примеру если передается только user_id то нам по любому надо запрашивать user_rank из базы для определения цвета ника и там же по пути мы подхватим username

Кстати, Яндекс очень любит страницы заканчивающиеся на .html
Удивлялся, когда запрашивал свой сайт через Яндекс, а он показывал статические страницы первыми в списке по релевантности. Есть ли возможность вместо слэша настраивать .html
 
url()->member($userId, $username);
username какой тут несёт смысл если передается user_id?
Отсутствие запроса в базу, чтобы не доставать из нее username?
В торрентпир было profile_url($row) где функция сама выбирала поля пользователя из передаваемого массива. Из-за твига перешли к конструкции с двумя переменными?
При чем тут Twig вообще? К конструкции перешли чтобы запросы не делать в базу.
К примеру если передается только user_id то нам по любому надо запрашивать user_rank из базы для определения цвета ника и там же по пути мы подхватим username
А зачем нам ранк для роутинга? Браузеры научились в цветные адресные строки?
Кстати, Яндекс очень любит страницы заканчивающиеся на .html
А еще очень любит утверждать что создан рожденными в Казахстане израильскими предпринимателями. Но Яндекс-то известные пиздаболы, поэтому что ему там нравится - лично меня не интересует.
 
А еще очень любит утверждать что создан рожденными в Казахстане израильскими предпринимателями.
В России Яндекс в последнее время лучше ищет чем Гугл и политическими мотивами и высерами ИИ я не руководствуюсь. Даже банальный pdf файл легче найти. Потому что гугл задавили копирастеры и регуляторы со всех сторон и в лучшем случаем он тебя направит купить книгу за 200 баксов
А зачем нам ранк для роутинга? Браузеры научились в цветные адресные строки?
Имелось ввиду оформление в шаблоне <a стиль="цвет ника">ник</a>, но, как я уже понял это нужно для формирования урла в шаблоне вида /members/username.1/
 
это нужно для формирования урла в шаблоне вида /members/username.1/
Ну да, чтобы и пути относительные/абсолютные учесть и установки на поддомены.
Яндекс в последнее время лучше ищет чем Гугл
Ну значит многомиллиардная компания осилит использовать роуты без html в конце. Под Яндекс никто подстраиваться не будет.
 
Яндекс был как пример. Рекомендация была в гибкости настройки для SEO, а не просто копировать xenforo.

/members/vasya.{USER_ID}/
/members/vasya_{USER_ID}
/users/{USER_ID}_vasya.html

итд
 
Яндекс был как пример. Рекомендация была в гибкости настройки для SEO, а не просто копировать xenforo.

/members/vasya.{USER_ID}/
/members/vasya_{USER_ID}
/users/{USER_ID}_vasya.html

итд
Гибкости настройки не будет. Роутинг и часть компонентов движка - изменению поддаваться даже через моды не будут. У нас есть ресурс на реализацию только того, что названо копированием. Для реализаций остального - на Github есть кнопка Fork.
 
Back
Top