Вы меняете структуру URL, а старые ссылки из поиска перестают работать. Или URL выглядят как /page?id=123 — пользователи их не читают, CTR падает. Мы сталкивались с этим на десятках проектов. Например, для интернет-магазина бытовой техники после внедрения ЧПУ количество страниц в индексе выросло в 3 раза за месяц, а CTR увеличился на 34%. Мы выработали систему, которая гарантирует читаемые и индексируемые URL без битых ссылок.
ЧПУ повышают CTR — пользователь видит в сниппете адрес и понимает, куда попадёт. А поисковые роботы быстрее обрабатывают логичную структуру. Мы гарантируем, что ваши URL станут читаемыми, уникальными и легко поддерживаемыми. В этой статье разберём ключевые принципы, типичные ошибки и готовые решения для Laravel. По данным Google Search Central, понятные URL помогают поисковым системам точнее определять содержимое страницы. Мы подготовили проверенный подход, который исключает проблемы с дубликатами, коллизиями и битыми ссылками.
Принципы хорошего URL
| Плохо | Хорошо |
|---|---|
/product.php?id=4521 |
/products/iphone-15-pro-256gb |
/cat/12/sub/45 |
/catalog/smartphones/apple |
/articles/blog-post-with-date |
/blog/kak-vybrat-noutbuk |
/page?lang=ru&id=about |
/o-kompanii |
/Products/Laptops/Dell |
/products/laptops/dell (строчные) |
Правила:
- Только строчные буквы
- Разделитель — дефис, не подчёркивание
- Без технических ID (если можно обойтись)
- Транслитерация или семантический перевод на английский
- Логичная иерархия, отражающая структуру сайта
- Без лишних стоп-слов: the, и, или, для
Как генерировать уникальные слаги без коллизий?
В Laravel можно использовать встроенный Str::slug, но он не проверяет уникальность. Мы добавляем проверку при создании записи и, если slug занят, генерируем новый с числовым суффиксом. Например, заголовок "Настройка сервера" даст slug nastrojka-servera, а при повторе — nastrojka-servera-2.
use Illuminate\Support\Str; // Простая транслитерация через iconv function translit(string $text): string { $text = mb_strtolower($text); $cyrToLat = [ 'а'=>'a','б'=>'b','в'=>'v','г'=>'g','д'=>'d','е'=>'e','ё'=>'yo', 'ж'=>'zh','з'=>'z','и'=>'i','й'=>'y','к'=>'k','л'=>'l','м'=>'m', 'н'=>'n','о'=>'o','п'=>'p','р'=>'r','с'=>'s','т'=>'t','у'=>'u', 'ф'=>'f','х'=>'kh','ц'=>'ts','ч'=>'ch','ш'=>'sh','щ'=>'shch', 'ъ'=>'','ы'=>'y','ь'=>'','э'=>'e','ю'=>'yu','я'=>'ya', ' '=>'-','_'=>'-', ]; $text = strtr($text, $cyrToLat); return preg_replace('/[^a-z0-9\-]/', '', $text); } // В модели protected static function boot(): void { parent::boot(); static::creating(function (self $model) { if (empty($model->slug)) { $model->slug = static::generateUniqueSlug($model->title); } }); } protected static function generateUniqueSlug(string $title): string { $slug = translit($title); $original = $slug; $count = 1; while (static::where('slug', $slug)->exists()) { $slug = "{$original}-{$count}"; $count++; } return $slug; } Почему стоит хранить историю слагов?
Отметим: когда slug меняется (например, из-за ручного редактирования), старый URL должен автоматически редиректить на новый. Иначе поисковики вернут 404, а пользователи увидят ошибку. Мы создаём таблицу slug_redirects, которая хранит пары старый → новый slug для каждой модели.
Schema::create('slug_redirects', function (Blueprint $table) { $table->string('old_slug')->primary(); $table->string('new_slug'); $table->string('model_type'); $table->unsignedBigInteger('model_id'); $table->timestamps(); }); После этого middleware при запросе проверяет, нет ли редиректа для запрошенного URL, и возвращает 301.
Маршрутизация
// Вложенные маршруты для иерархии Route::get('/catalog/{category}/{subcategory?}', [CatalogController::class, 'show']) ->where(['category' => '[a-z0-9\-]+', 'subcategory' => '[a-z0-9\-]+']); Route::get('/catalog/{category}/{subcategory}/{product}', [ProductController::class, 'show']) ->where(['product' => '[a-z0-9\-]+']); Как обеспечить постоянство URL без багов?
Фиксированный slug не меняется при редактировании заголовка — это SEO-предпочтительно, так как нет битых ссылок. Автоматический slug обновляется с заголовком, но требует обязательного 301-редиректа со старого slug. Мы рекомендуем фиксированный slug с возможностью ручного редактирования. Если клиенту важно автоматическое обновление, обязательно подключаем историю редиректов.
Типичные ошибки, которые встречаются при настройке ЧПУ: использование ID в URL вместо слага, неправильная транслитерация (например, "щи" превращается в "schi" вместо правильного "shchi"), отсутствие редиректов при изменении slug, игнорирование мультиязычности. Все эти проблемы мы решаем на этапе аудита и проектирования.
URL для мультиязычных сайтов
Варианты структуры:
| Структура | Пример |
|---|---|
| Субдомен | ru.example.com/products/laptop |
| Префикс пути | example.com/ru/products/laptop |
| Отдельный домен | example.ru/products/laptop |
Для Яндекса предпочтительны региональные домены (.ru). Для Google — любой вариант работает, если настроен hreflang. Мы поможем выбрать оптимальную структуру под ваш регион. Экономия на SEO-продвижении за счёт правильных URL достигает 30%.
Пагинация
Предпочтительный формат: /blog/page/2 или /blog?page=2. Второй вариант удобнее — не требует отдельного роута, canonical автоматически корректен. Для больших каталогов используем пагинацию с номером страницы в URL.
Что входит в работу
- Аудит текущих URL — выявление проблем (ID, дубликаты, стоп-слова)
- Проектирование структуры — иерархия, транслитерация, мультиязычность
- Реализация slug-системы — модель, генерация, проверка уникальности
- Настройка редиректов — таблица истории, 301 с любого старого URL
- Тестирование — проверка всех переходов, отсутствие 404
- Документация — описание структуры и правил редактирования
- Обучение команды — как добавлять новые страницы без ошибок
Пример реализации middleware для 301 редиректа
public function handle($request, Closure $next) { $path = $request->path(); $redirect = SlugRedirect::where('old_slug', $path)->first(); if ($redirect) { return redirect($redirect->new_slug, 301); } return $next($request); } Сроки и как заказать
Типичный проект по настройке ЧПУ для сайта на Laravel занимает от 1 до 3 дней в зависимости от сложности и количества страниц. Мы оцениваем каждый проект индивидуально — свяжитесь с нами, и получите консультацию с точными сроками. Наш опыт — более 50 внедрений, гарантируем качество. Закажите настройку ЧПУ — и ваши URL станут читаемыми, индексируемыми и без битых ссылок.
Процесс работы:
- Аналитика и аудит текущих URL
- Проектирование идеальной структуры с учётом SEO и UX
- Реализация slug-системы с редиректами
- Тестирование на staging-окружении
- Деплой и финальная проверка
Свяжитесь с нами, чтобы оценить ваш проект. Мы подберём оптимальную структуру URL под ваш стек и поможем избежать типичных ошибок. Получите консультацию по вашему проекту уже сегодня.







