游客发表
上周帮一个做外贸的网站朋友看站点,他问我:“为什么客户点了‘查看产品’之后,跳转页面闪了一下又回到首页?代码”我打开控制台,发现他用的网站跳转代码是 ``,但服务器返回了302重定向,跳转两者打架,代码浏览器直接懵了。网站这不是跳转个例,很多新手在写跳转时,代码根本分不清什么时候该用前端、网站什么时候该用后端。跳转
最常见的代码跳转代码,大概就是网站HTML里的meta refresh。写法简单:``。跳转数字5代表5秒后跳,代码写0就是立刻。这玩意儿的好处是纯前端,不用碰服务器配置。坏处也明显——用户会看到页面闪一下,而且搜索引擎对它的权重传递一直有争议。我自己的博客早年用过,后来全换成301了,因为meta refresh在移动端有时候会被浏览器拦截,尤其是Safari。
JavaScript跳转更灵活。`window.location.href = 'https://example.com'` 是最常用的。想保留历史记录就用 `location.assign()`,不想让用户点后退回到原页面就用 `location.replace()`。有个细节:如果你在 ``。这样做的目的是保留原始请求路径,登录后能跳回去。但要注意,如果用户禁用了JS,这个跳转就废了。所以更稳妥的做法是后端直接返回302到登录页,把 `next` 参数拼在URL里。
实际项目中,跳转代码的坑远不止这些。比如CDN缓存了301,你改都改不掉;比如HTTPS跳转HTTP导致混合内容警告;比如URL里带中文没做encode,跳转后变成乱码。我自己的习惯是:能用301就不用302,能用后端就不用前端,能用相对路径就不用绝对路径。至于meta refresh,除非是那种“5秒后自动跳转到下载页”的临时场景,否则我基本不碰。
最后说个真事。有个做在线教育的客户,课程页用JS跳转做A/B测试,结果Google爬虫抓不到跳转后的内容,收录的全是空白页。后来换成后端302,并且把跳转逻辑放在Nginx配置里,才恢复正常。跳转代码写起来就一行,但背后牵扯到SEO、用户体验、缓存策略,甚至法律合规——比如欧盟要求cookie同意前不能做某些跳转。别小看它。
友情链接