URL-структура и ЧПУ

Проектируем URL так, чтобы они были понятны человеку, поисковику и не плодили дубли.

ЧПУ (человекопонятный URL) — адрес из читаемых слов, отражающий содержимое и иерархию страницы: /tutorials/seo/canonical, а не /page?id=8472&cat=3.

Почему URL важен для SEO

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

ПлохоХорошо
/p?id=8472&c=3/tutorials/seo/canonical
/Article_Final_NEW.html/journal/kak-rabotaet-https
/products/category/12/item/99/shop/keyboards/mx-keys

URL живёт дольше страницы

Важная для разработчика мысль: URL — это долгосрочный контракт. На него ставят внешние ссылки, его сохраняют в закладки, он накапливает поисковый вес годами. Поэтому проектировать структуру адресов стоит на вырост, а менять — только при крайней необходимости и обязательно с 301-редиректом. Частая ошибка — зашивать в URL то, что меняется: дату (/2024/...), технологию (/wordpress/...), временную категорию. Когда это устареет, вы окажетесь перед выбором: жить с нелогичным адресом или ломать ссылки переездом. Лучше сразу закладывать стабильную иерархию, основанную на смысле, а не на сиюминутных деталях реализации.

Правила хорошего слага

  • Латиница, нижний регистр, дефисы как разделители: web-vitals, не Web_Vitals.
  • Транслит или перевод кириллицы: kak-ubrat-dubli (URL-кодированная кириллица читается людьми, но выглядит уродливо в ссылках).
  • Коротко и по делу: ключевое слово есть, мусорных «и», «как», «the» — минимум.
  • Иерархия отражает структуру: /категория/подкатегория/страница.
  • Стабильность: URL не должен меняться без необходимости — каждое изменение требует 301-редиректа.

Опасность параметров и регистра

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

/shop/keyboards          и  /shop/keyboards/      (слэш в конце)
/Shop/Keyboards          и  /shop/keyboards       (регистр)
/shop/keyboards?ref=tg   и  /shop/keyboards       (utm/ref-метки)
/shop/keyboards?sort=price&sort=name              (порядок параметров)

Лечится это canonical (следующий раздел) и нормализацией URL на сервере: единый регистр, единая политика по завершающему слэшу, 301 с дублей на канон.

Как работает под капотом: генерация слага

Слаг генерируется из заголовка: приводим к нижнему регистру, заменяем пробелы дефисами, выкидываем мусорные символы. Базовая реализация:

import re

def slugify(title):
    s = title.lower().strip()
    # кириллицу для примера переводим простой таблицей
    table = {"а":"a","б":"b","в":"v","г":"g","д":"d","е":"e","и":"i",
             "к":"k","л":"l","н":"n","о":"o","р":"r","с":"s","т":"t",
             "у":"u","ь":"","я":"ya"," ":"-"}
    s = "".join(table.get(ch, ch) for ch in s)
    s = re.sub(r"[^a-z0-9-]", "", s)   # оставляем только латиницу, цифры, дефис
    s = re.sub(r"-+", "-", s).strip("-")  # схлопываем повторы дефисов
    return s

print(slugify("Как убрать дубли"))
print(slugify("Core Web Vitals 2024!!!"))

Вывод:

kak-ubrat-dubli
core-web-vitals-2024

Частые ошибки

  • ID вместо слов: /page?id=42 ничего не говорит ни человеку, ни поиску.
  • Меняющиеся URL без 301 — потеря накопленных позиций и битые ссылки.
  • Дубли из-за регистра/слэша/меток без нормализации и canonical.
  • Слишком глубокая вложенность: /a/b/c/d/e/page — и людям сложно, и сигнал «страница далеко от корня».

Итог

  • ЧПУ читаемы людьми и поисковиком: латиница, дефисы, ключевое слово, отражённая иерархия.
  • Один контент по разным URL — это дубли; нормализуйте регистр, слэш и метки.
  • URL должны быть стабильны; любое изменение сопровождайте 301-редиректом.
Проверьте себя
1. Какой URL является «человекопонятным» (ЧПУ)?
A/p?id=8472&c=3
B/tutorials/seo/canonical
C/Article_Final_NEW.html
D/index.php?page=42
2. Почему /shop/keyboards и /shop/keyboards?ref=tg — это проблема?
Aref-метка ускоряет индексацию
BЭто две версии одной страницы — дубли, дробящие сигналы и тратящие бюджет краулинга
CВторой URL вообще не откроется
DПараметры запрещены в robots.txt
3. Что нужно сделать при изменении URL страницы, чтобы не потерять позиции?
AНичего, поисковик сам найдёт новый адрес
BПоставить 301-редирект со старого URL на новый
CУдалить страницу из sitemap
DЗакрыть старый URL в noindex