外链失效实测1336条出处链接:真死链只有6条,打不开的有181条
跑法分两轮:先用8线程并发把1336条去重出处链接过一遍,再对所有非200的目标换成单线程、完整浏览器请求头、45秒超时并重试一次,同时单独做一次域名解析,把真死链、被反爬拦住、本地连不上三种情况拆开;最后打开能取回的目标页,用原样、归一化、只比数字串三层匹配找一遍被引的那个数值。
内容再好,爬虫抓不到、收录不进去也是白搭。这里深入技术SEO,从抓取预算、robots与sitemap、canonical与hreflang到JS渲染、日志分析和索引膨胀治理,帮开发和SEO协作把工程底子打牢。
跑法分两轮:先用8线程并发把1336条去重出处链接过一遍,再对所有非200的目标换成单线程、完整浏览器请求头、45秒超时并重试一次,同时单独做一次域名解析,把真死链、被反爬拦住、本地连不上三种情况拆开;最后打开能取回的目标页,用原样、归一化、只比数字串三层匹配找一遍被引的那个数值。
测法写清楚了好复现:从131个站的站点地图里筛门店类网址,分层抽样95条取回84个页面,人工剔掉商品页和专题页,再按门店详情与查找入口分档,最后逐页量结构化数据的属性字段与身份字段。顺带记了一次探测节奏把结论带偏15个百分点的过程。
把抓取引荐比的公式拆成六个必须自己拍板的口径:窗口长度、爬虫标识范围、样本来源、状态码取舍、垃圾来路清洗、网页判定方式。再用本站十五天、258560行nginx日志原样跑一遍,附上改日志格式、清来路、分标识计数、验真假这四步落地顺序。
做法是把131个英文独立站首页与商品页上所有以井号开头的链接取下来,连同解析成绝对地址后只多一个井号的那一类,按HTML规范里滚动到片段的四步逐条判定目标在不在。同时把页面上所有按名字指认别人的属性一起量了一遍——label的for、输入框的form、以及aria那一族。这里踩过一个坑:第一遍把单值属性也按空格拆成了多个名字,算出label有一半指不到,改对分类之后真实数字是另一个量级,两个口径都写在文里。死锚点最后按第三方组件的钩子与…
做法是用真实浏览器逐页打开131个英文独立站的首页与商品页,把每个页面上所有带id的元素连同标签名、当场可不可见、往上四层的祖先链一并取下来,按名字分组找出撞名的那些。统计前先把内联SVG导出时自动生成的图层名和写成空字符串的id剔到另外两栏,否则排行榜会被Figma的默认图层名占满。再拿服务端吐出的原始HTML与渲染完的DOM逐页对照,判断这些撞名是模板带来的还是脚本后加的;另挑30个站的首页做两组对照,桌面视口连读三遍再换手机视口读…
实验台把53个英文独立站392个商品页的JSON-LD节点全部取下,对每一个Product节点上的url与@id补全成绝对地址,再与页面自身地址逐字比对,据此判断这一页能不能指出它的主体。第一版比对忽略了查询参数,得到的通过率虚高三十多个百分点,翻查具体案例后改成完整地址严格比对。随后逐项统计@id、url、mainEntityOfPage的写入率与取值形态,把WebPage节点、结构化数据里的商品名与页面h1、以及同一页内的h1数量一…
做法是把同一批页面上的form元素连同它的action、method、enctype、novalidate、提交按钮与全部隐藏域一并取下来,按站内签名合并重复渲染的表单,再把每个收邮箱的输入框与它所在的那张表逐一对上,看去向写在哪儿。跨域判据取注册域比较,不看子域;隐藏域按名字归成八类用途,并记下取值长度。另外对每个页面再取一次原始HTML,与渲染后的DOM逐页对照,用来区分“页面本来就这么写”和“脚本后来插进去的”。
实验台用真实浏览器逐页打开53个英文独立站的392个商品页,等页面渲染完成后取出全部application/ld+json脚本,递归遍历每一个带@type的对象,按类型和它在JSON结构里的位置分别计数,同时记录字节量与脚本标签数。为了把模板复制与变体展开这两种不同的膨胀来源分开,每个站另外抽取了主推款与长尾款做同站对照;三个拿不到真实商品页的站——反爬拦截、跳转首页、地址全部失效——从统计中整体剔除。最后用加长等待时间的第二轮采集做自…
实验台从60个英文独立站的公开商品清单接口取回43912件在售商品的描述字段,先按站算空值率并观察整体分布形态,再用逐站剔除法看单个站对行业指标的影响幅度。随后给每一件空值商品跑一遍归因,按站级用法、非商品条目、占位测试、整条半成品四档依次往下扣。最后用真实浏览器打开商品页,把JSON-LD里的description与页面meta描述取出来跟接口值三方对照——正是这一步推翻了第一档的扣减依据,把2542件从待定改判回真缺,缺口最终从最初…
实验台从60个英文独立站的公开商品清单接口取回43912件在售商品的品牌字段,先按站算出主品牌,再把每一个非主品牌的取值做三级归一化——去掉重音符号、把与号换成and、砍掉地区码与公司后缀,据此把它们分成同一品牌的别写、字面空值、真正的另一个牌子三类,并逐条做字符级差异归因。随后用真实浏览器逐站打开商品页,等页面渲染完成后取出JSON-LD里Product节点的brand属性,与接口值一件件对照,判断这些取值有多少原样进入了搜索引擎读取…
量法是同一个地址问五遍:普通GET、带压缩的Range、不带压缩的Range、只要末尾一百字节、一次要两段、以及一个不可能满足的越界范围,每一遍都记原始字节数而不只是状态码;再对同一批站的CSS与JS各问一遍做对照;最后在自己的nginx上把动态压缩、预压缩、不压缩三档摆开,逐个开关复现。
量法分两层:131个站的首页各抓两轮,流式记下首字节与末字节的时刻;再把112份文档按字节位置摊开,找第一个能被预扫描发现的资源引用落在第几位。两层各自成立,但坐标系不同,一层是压缩后的字节,一层是解压后的字符,中间不能互相换算。
测法是三档请求头加一次定宽对照:先把每条地址的尺寸参数统一改成800,再用现代、只认WebP、两样都不认三种身份各要一次。尺子先自查——把通配符去掉重问一遍,那16个站16个照旧。
量法分三步:先把五类内联内容从HTML里挖出来称重,再用brotli和gzip各压一遍验证压缩会不会推翻结论,最后隔段时间重抓一次逐块比哈希。第二步的结果和直觉相反。
做法是三条通道并用:URL路径里写着的版本、打包器留下的banner注释、库自己给版本变量赋的值。上全量之前先拿16份版本已知的官方文件验尺子,命中12份、读错0份,所以所有数字都是下限。
用RDAP协议逐个拉130个大牌域名的注册局记录,解析EPP状态位、到期事件、注册商归属与DNSSEC委派标记,再用DNS over HTTPS查DS记录两边对账;聚合服务限流掉的44个站,改从IANA引导表直连各注册局补齐。四把尺子中途改过,其中一把关系到整篇的分母。
先用公共解析器把131个海外站的SOA七个字段全部取下来,再直连各自的权威服务器复核,最后隔几秒重问一遍,剔掉那些每次都在变的动态读数。尺子中途改过三次,其中一次把已经写好的结论砍掉了一半还多。
取127个海外电商站首页的全部外链脚本,把每份文件里的块注释扒出来,先按写法筛出构建工具刻意保留的那批,再判断哪些真是许可声明;随后把webpack抽到旁边的36个LICENSE文件逐个访问。第一版判据太窄,把短格式的声明整批判成了非许可,修完结论方向就变了。
对131个海外电商站首页引用的JS与CSS逐个下载,在文件尾部搜sourceMappingURL声明,顺着声明拉map并解析;用正文首字节而不是状态码判真伪,剔掉单页应用的兜底首页和只有29字节的空壳map,最后把拿到的自有源码全文扫一遍工单链接、非生产域名与实验配置。五道尺子全部修过一遍。
对同一个首页地址依次发GET、HEAD、OPTIONS,记录状态码、全部响应头、正文字节与耗时,再往下测一层内页、一个静态资源和robots.txt;被拦的站打乱顺序多轮重试,把分母从84做回124。五把尺子中途改过,其中ETag那把把41个站的结论砍成了2个。