Разделение SEO-дружественных URL - PullRequest
0 голосов
/ 31 мая 2019

Мне нужно создать сайт (интернет-магазин) в Laravel, используя оптимизированные для SEO и иерархические URL.

Некоторые примеры:

  • www.example.com/cat1/cat11 (который указывает на товарный список категории)
  • www.example.com/cat1/cat11/cat111 (указывает на товарный список категории)
  • www.example.com/cat1/cat11/cat111/product-title (указывает на страницу с описанием товара)
  • www.example.com/contact-us (который указывает на страницу)

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

Возможные мысли:

1) Добавьте префикс к каждому типу URL, чтобы узнать контроллер * например, * 1023

  • www.example.com/categories/cat1/cat11/cat111> CategoryController
  • www.example.com/products/cat1/cat11/cat111/product-title> ProductController
  • www.example.com/page/contact-us> PageController

2) Предварительно сгенерируйте и сохраните в таблице все URL сайта. Таблица может содержать два столбца: URL (cat1 / cat11 / cat111) и модель: id (категория: 8) Глобальный контроллер проанализирует URL-адрес и с помощью таблицы может загрузить требуемую модель и идентификатор.

Есть еще идеи?

1 Ответ

1 голос
/ 31 мая 2019

Мы уже сталкивались с этой проблемой несколько раз.Я думаю, что нет «лучшего пути».Это зависит от данных обстоятельств.

Структура /products/cat1/cat11/cat111/product-title должна использоваться осторожно.При неправильном добавлении канонического тега могут возникнуть проблемы с дублированием контента.

Мы закончили со следующей настройкой:

  • www.site.com / shop/ product-title> Route::get('/shop/{slug}', [\App\Http\Controllers\ProductController::class, 'show'])->name('product.show');
  • www.site.com / shop / category / cat1 / cat11 / cat111> Route::get('/shop/categories/{slugNum}', [\App\Http\Controllers\CategoryController::class, 'show'])->name('category.show')->where('slugNum', '(.*)');
  • www.site.com / contact-us> Route::get('/{any}', [\App\Http\Controllers\PageController::class, 'show'])->name('page.show')->where('any', '.*')->fallback();

Надеюсь, это поможет.

...