Налаштування ЧПУ (людинозрозумілі URL) для сайту

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.
Розробка та обслуговування будь-яких видів сайтів:
Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Налаштування ЧПУ (людинозрозумілі URL) для сайту
Середня
від 1 робочого дня до 3 робочих днів
Часті питання
Наші компетенції:
Етапи розробки
Останні роботи
  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Налаштування SEO-дружних URL для вашого сайту

SEO-дружні URL — читабельні, зрозумілі адреси сторінок без технічних параметрів. Вони впливають на CTR у результатах пошуку (користувачі бачать URL у сніпеті), на сприйняття посилання та опосередковано впливають на ранжування.

Принципи хорошого URL

Погано Добре
/product.php?id=4521 /products/iphone-15-pro-256gb
/cat/12/sub/45 /catalog/smartphones/apple
/articles/2024/03/15/post-1 /blog/yak-vybrata-noutbuk
/page?lang=ru&id=about /pro-kompaniu
/Products/Laptops/Dell /products/laptops/dell (малі букви)

Правила:

  • Тільки малі букви
  • Роздільник — дефіс, не підкреслення
  • Без технічних ID (якщо можна обійтися)
  • Транслітерація або семантичний переклад англійською
  • Логічна ієрархія, що відображає структуру сайту
  • Без непотрібних стоп-слів: the, та, або, для

Транслітерація slug у Laravel

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;
}

Маршрутизація

// Вкладені маршрути для ієрархії
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\-]+']);

Постійний slug vs. генерований із заголовка

  • Фіксований slug — не змінюється при редагуванні заголовка (SEO-переважно, немає розбитих посилань)
  • Автоматичний — оновлюється із заголовком (потребує автоматичного редиректа 301 зі старого slug)

Зберігайте історію slug для автоматичних 301-редиректів:

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();
});

URL для багатомовних сайтів

Варіанти структури:

Структура Приклад
Піддомен ru.example.com/products/laptop
Префікс шляху example.com/ru/products/laptop
Окремий домен example.ru/products/laptop

Для Яндекса, регіональні домени (.ru) переважні. Для Google — будь-який варіант працює, якщо налаштований hreflang.

Паджинація

Переважний формат: /blog/page/2 або /blog?page=2. Другий варіант зручніший — не потребує окремого маршруту, canonical автоматично правильний.

Час налаштування: 1 день для реалізації slug-системи з історією редиректів.