Ви змінюєте структуру 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 nalashtuvannia-servera, а при повторі — nalashtuvannia-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 під ваш стек і допоможемо уникнути типових помилок. Отримайте консультацію з вашого проєкту вже сьогодні.







