用户在旧链接上点开,地址栏闪了两下才到新页:先跳到一版中间页,再跳一次才落到新地址。用户感觉不到,浏览器把两跳走完只多一次请求往返,爬虫那边却要一次一次跟。问题不在用户这一侧,在链的长度。
301是永久重定向,写在RFC 9110里,意思是这个地址以后就归新地址了,客户端和爬虫应当把记录改过去。写成链,对方要先把中间那一环走完,再走终址,中间那一环就成了必经之路。
查法是一条命令看全链:curl -IL老地址,L让curl自己跟着跳,I只取响应头。每跳会打印一组响应头,第一行是状态码,后面跟一行Location指向下一站。数一下打印了几组头,就知道链有多长。只看第一跳不够,第一跳返回301看着没问题,问题常出在第二跳和第三跳。有些站点在手机上跳得更多,因为多了一层移动端适配的跳转。抽查时把首页、栏目页、文章页各取一条。
多一跳就多一次抓取开销,也多一个失败点:中间那一跳哪天被删掉、规则被改、或者超时,整条链就断在那里,后面的跳转不再执行,页面也就打不开了,白设了一条永久重定向。
站长圈常说的漏掉权重是个通俗说法。公开文档能确认的只是多一跳多一次抓取、多一个断点;按跳数折算多少,没有任何官方数值,也没有链式跳转到底会衰减多少的官方说法,本文也不给。搜到这类数字先看它有没有出处,凡是能给出确切百分比的说法,先问它出自哪份文档;答不上来,那只是估算,不能当成调整依据。判断链该不该改,看抓取开销和失败点就够。
修法是把A到B到C合并成A直接到C。在Nginx的rewrite、Apache的RedirectMatch,或者CMS的重定向插件里,把老地址的目标写成终址,不要指向中间页;中间页如果还有别的地方在用,就单独留一条直指终址的规则。
改版时容易出链的地方有两处。一是栏目页先跳新栏目、新栏目再跳文章,二级结构没拆干净;二是http到https、带www到不带www、带斜杠到不带斜杠这几条规则各自写了一条,叠在一起就成了多跳。批量查的办法是把老URL导出成清单,逐条curl -IL,把跳数大于一的挑出来单独改。清单按栏目归类,同一类的地址大多出自同一条规则。
复测一遍:只打印一组响应头,第一行是301,Location直接是新地址,就对了。改完把中间页那条规则删掉。删之前先把配置文件另存一份,并确认没有推广链接、二维码、外部友链还指着中间页;还有入口的,就把那条规则改成直指终址,别直接删。
申请创业报道,分享创业好点子。点击此处,共同探讨创业新机遇!
