我应该动态创建一个slu or还是存储在DB中?

时间:2009-04-30 14:27:34

标签: slug

slug是描述或标题页面的URL的一部分,通常是该页面的关键字丰富,可以改善SEO。例如在这个URL PHP/JS - Create thumbnails on the fly or store as files中,最后一节“php-js-create-thumbnails-on-the-fly-or-store-as-files”就是slug。

目前,我正在为每个页面存储slug,并在数据库中存储页面记录。当页面生成并与页面一起存储时,从标题字段生成slug。但是,我正在考虑动态生成slug,以防我想要改变它。我正在努力找出哪个更好,哪些更好。

到目前为止,我已经为每个人提出了这些要点:

Store slug: - “更快”的处理器不需要每次都生成它(生成一次)

即时生成: - 灵活(可以调整slug算法,不需要为整个表重新生成)。 - 在DB中占用较少的空间 - 减少从数据库传输到应用程序的数据

我还错过了什么,你会怎么做?

编辑:

我只想澄清答案中的误解。 slu to对登陆正确的页面没有影响。要理解这一点,只需切断或破坏本网站上任何部分的slu .. e.g:

PHP/JS - Create thumbnails on the fly or store as files

PHP/JS - Create thumbnails on the fly or store as files

PHP/JS - Create thumbnails on the fly or store as files

将全部带您到同一页面。 slu from永远不会被编入索引。

你不需要保存旧的slu ..如果你登陆了一个有“旧slu”的页面,那么你可以检测到这一点,然后只需301重定向到正确的“slu”“。在上面的例子中,如果Stack Overflow实现了它,那么当你登陆任何带有截断slug的链接时,它会将url中的slug与当前slug算法生成的slug进行比较,如果不同,它会执行301重定向到同一页面,但使用新的slug。

请记住,所有内部生成的链接都将立即使用新算法,并且只有指向外部的链接才会使用旧的slug。

4 个答案:

答案 0 :(得分:9)

不会改变现有页面的slu is是一个非常糟糕的主意吗?它会打破你所有的inlinks开始。

编辑,跟随盖伊在问题中的澄清:你仍然需要考虑旧的slu ..例如:如果您更改了slug算法,Google可能会开始看到每个页面的多个版本,并且您可能会遭受重复的内容损失,或者最多在同一页面的多个版本之间共享PR和SERP。为了避免这种情况,您需要一个规范版本的页面,任何非规范的重定向重定向到 - 因此无论如何您都需要数据库中的规范slu。

答案 1 :(得分:4)

您可能需要考虑另一件事,如果您希望用户/您自己能够定义自己的slu what。也许算法并不总是足够的。

如果是这样,你或多或少需要将它存储在数据库中。

如果不是我认为不重要,你可以动态生成它们,但是如果你不确定是否要更改它们,请让它们在数据库中。在我看来,任何一种方法都没有真正的性能问题(除非动态生成非常慢或者类似的东西)。

选择最灵活的那个。

答案 2 :(得分:3)

对于slug生成我不认为生成时间应该是一个问题,除非你的slug算法非常复杂!同样,存储空间不会成为问题。

我会将slug存储在数据库中,原因很简单,slu is通常是永久链接的一部分,一旦永久链接出现在外,它应该被认为是不可变的。能够更改已发布数据的slug似乎是一个坏主意。

答案 3 :(得分:1)

处理slug的最佳方法是仅将slug的说话部分存储在数据库中,并使路由部分保留动态生成的唯一标识符。否则(如果你将整个url或uri存储在数据库中)如果你改变了对如何调用它们的想法,那么首先重写数据库中的所有slug可能会成为一项艰巨的任务。

让我们以此问题为例:

/问题/ 807195 /应-I-创建-A-蛞蝓 - 上的蝇或-店中分贝

它是:

/route/unique-ID/the-speaking-part-thats-not-so-important

动态部分显然是:

/route/unique-ID/

我将存储在数据库中的是说话部分:

the-speaking-part-thats-not-so-important

这使您可以随时改变对路线名称的看法,并进行正确的重定向,而无需先查看数据库内部,也不必强制进行数据库更改。唯一ID始终是您的数据库数据唯一ID,因此您可以正确识别它并且您知道您的路线是什么。

不要忘记设置规范标签。如果您查看此页面代码,请访问:

<link rel="canonical" href="http://stackoverflow.com/questions/807195/should-i-create-a-slug-on-the-fly-or-store-in-db" />

这允许搜索引擎识别正确的页面链接,并在您有重复内容时忽略其他链接。

相关问题