SEO友好网址的分离

时间:2019-05-31 13:15:05

标签: laravel controller url-routing laravel-5.8 url-design

我需要使用SEO友好的分层URL在Laravel中创建一个网站(电子商店)。

一些例子是:

  • 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类型添加前缀,以便了解控制器 例如

  • 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)和model:id(类别:8) 全局控制器将解析URL,使用该表可以加载所需的模型和ID。

还有其他想法吗?

1 个答案:

答案 0 :(得分:0)

我们已经多次遇到这个问题。我认为没有“最佳方法”。这取决于给定的情况。

/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/categories/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();

希望这会有所帮助。