创建 SEO 友好的 URI 字符串的最佳方法
Posted
技术标签:
【中文标题】创建 SEO 友好的 URI 字符串的最佳方法【英文标题】:Best way to create SEO friendly URI string 【发布时间】:2011-06-02 15:13:55 【问题描述】:该方法应该只允许在 URI 字符串中使用“0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-
”字符。
制作漂亮的 SEO URI 字符串的最佳方法是什么?
【问题讨论】:
这听起来是个糟糕的主意。请考虑使用encoding the URL。 @marcog:这听起来很像 SO 从标题生成对 SEO 友好的 URL。请注意,我很想用一个连字符替换所有非 alnum 字符序列;相同的一般效果(如果在极端情况下可能略有不同)但更容易理解。 @Donal 哦,对。不过,您肯定会从允许的字符集中生成一个随机字符串吗? @marcog:SO 所做的是将那部分(实际上无关紧要)放在 URL 的末尾;之前的路径片段是一个 ID,它是实际定位问题的位置。为此使用用户输入是安全的,因为清理是根据严格的字符白名单定义的。 (随机字符串?这是从哪里来的?) @Donal 好的,我明白你指的是什么。我以为你的意思是ID,例如4581025 这个问题。感谢您的澄清! 【参考方案1】:如果您想搜索更多信息,这些通常称为“slug”。
您可能想查看其他答案,例如 How can I create a SEO friendly dash-delimited url from a string? 和 How to make Django slugify work properly with Unicode strings?
它们涵盖 C# 和 Python 而非 javascript,但对 slug 约定和您在制作它们时可能面临的问题(例如唯一性、unicode 规范化问题等)进行了一些与语言无关的讨论。
【讨论】:
【参考方案2】:这是普遍共识:
Lowercase 字符串。
string = string.toLowerCase();
Normalize所有字符并去掉所有diacritical marks(这样例如é、ö、à变成e、o、a)。
string = Normalizer.normalize(string, Form.NFD).replaceAll("\\pInCombiningDiacriticalMarks+", "");
Replace all-
剩余的非字母数字字符并在必要时折叠。
string = string.replaceAll("[^\\pAlnum]+", "-");
所以,总结一下:
public static String toPrettyURL(String string)
return Normalizer.normalize(string.toLowerCase(), Form.NFD)
.replaceAll("\\pInCombiningDiacriticalMarks+", "")
.replaceAll("[^\\pAlnum]+", "-");
【讨论】:
还建议删除前导和尾随标点符号。 // 删除结尾标点符号 .replaceAll("[^a-z0-9]+$", "") // 删除开头标点符号 .replaceAll("^[^a-z0-9]+", ""); 【参考方案3】:以下正则表达式将与您的算法执行相同的操作。我不知道图书馆会做这种事情。
字符串 s = 输入 .replaceAll(" ?- ?","-") // 删除连字符周围的空格 .replaceAll("[ ']","-") // 把空格和引号变成连字符 .replaceAll("[^0-9a-zA-Z-]",""); // 删除不在我们允许的字符集中的所有内容【讨论】:
以上是关于创建 SEO 友好的 URI 字符串的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章
301 通过 .htaccess 将查询字符串重定向到 SEO 友好的 URL
seo 友好的 url 使用西里尔字符 х 字符,它总是得到 404。如何修复它?