[{"data":1,"prerenderedAt":365},["ShallowReactive",2],{"blog-cloaking-wordpress-zh-CN":3},{"id":4,"title":5,"excerpt":6,"content":7,"coverImage":306,"meta":314,"site":318,"status":339,"slug":340,"author":341,"category":351,"publishDate":18,"featured":121,"updatedAt":360,"createdAt":361,"contentHtml":362,"previewUrl":363,"localeSlugs":364},531,"WordPress 斗篷：三种实现路径、一个缓存陷阱与平台政策红线（2026）","「WordPress 斗篷」是两个问题共用一个名字：搜索引擎那个别做，投放侧分流那个是真实工程问题。本文讲三种实现路径（PHP／JavaScript／边缘层）、整页缓存如何悄悄让服务端分流失效，以及 Meta、Google、TikTok 的红线到底画在哪。",{"root":8},{"children":9,"direction":18,"format":15,"indent":13,"type":305,"version":17},[10,21,26,30,34,38,43,49,59,63,67,71,76,85,89,93,97,101,105,109,126,130,134,138,148,152,160,168,172,176,201,209,217,221,225,229,233,237,241,245,249,253,257,293,297,301],{"children":11,"direction":18,"format":15,"indent":13,"type":19,"version":17,"tag":20},[12],{"detail":13,"format":13,"mode":14,"style":15,"text":5,"type":16,"version":17},0,"normal","","text",1,null,"heading","h1",{"children":22,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":13,"textStyle":15},[23],{"detail":13,"format":13,"mode":14,"style":15,"text":24,"type":16,"version":17},"搜「cloaking WordPress」，你会同时撞进两场几乎不相干的讨论。","paragraph",{"children":27,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":13,"textStyle":15},[28],{"detail":13,"format":13,"mode":14,"style":15,"text":29,"type":16,"version":17},"一场是搜索引擎的问题：WordPress 站能不能给 Googlebot 一个页面、给真人另一个页面？这就是教科书定义的搜索引擎斗篷，违反 Google 的垃圾内容政策，答案很短——别做。",{"children":31,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":13,"textStyle":15},[32],{"detail":13,"format":13,"mode":14,"style":15,"text":33,"type":16,"version":17},"另一场是投放的问题：广告主把流量打到一个 WordPress 落地页，希望这个页面对审核、对机器人、对地域不符的访客，表现和对真正目标受众不一样。同一个词，机制完全不同，规则也完全不同。",{"children":35,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":13,"textStyle":15},[36],{"detail":13,"format":13,"mode":14,"style":15,"text":37,"type":16,"version":17},"本文讲第二件事——请求级分流在 WordPress 上到底怎么落地、有哪一个坑是 WordPress 独有的、以及广告平台的红线画在哪。",{"children":39,"direction":18,"format":15,"indent":13,"type":19,"version":17,"tag":42},[40],{"detail":13,"format":13,"mode":14,"style":15,"text":41,"type":16,"version":17},"同一个词，两件不同的事","h2",{"children":44,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":17,"textStyle":15},[45,47],{"detail":13,"format":17,"mode":14,"style":15,"text":46,"type":16,"version":17},"搜索引擎斗篷",{"detail":13,"format":13,"mode":14,"style":15,"text":48,"type":16,"version":17},"指的是：在同一个 URL 上，给搜索爬虫的内容与给真人的内容有实质差异，目的是影响排名。Google 在垃圾内容政策里点名了它。处罚不是一条警告横幅，是从索引里拿掉。本文没有一段是在教怎么\"安全地\"做这件事，因为不存在这种做法。",{"children":50,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":17,"textStyle":15},[51,53,55,57],{"detail":13,"format":17,"mode":14,"style":15,"text":52,"type":16,"version":17},"投放侧分流",{"detail":13,"format":13,"mode":14,"style":15,"text":54,"type":16,"version":17},"指的是：落地页根据请求信号渲染不同内容——点击来自哪里、什么设备发起、请求形态是否像自动化程序。广告平台并不禁止分流本身，它们禁止的是",{"detail":13,"format":17,"mode":14,"style":15,"text":56,"type":16,"version":17},"失实呈现",{"detail":13,"format":13,"mode":14,"style":15,"text":58,"type":16,"version":17},"：让审核看到的页面，与真实用户在同一条广告下看到的页面有实质差异。",{"children":60,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":13,"textStyle":15},[61],{"detail":13,"format":13,"mode":14,"style":15,"text":62,"type":16,"version":17},"真正决定性质的不是技术手段，而是审核或爬虫看到的那一版，是不是对这个报价的诚实呈现。两套实现可以用一模一样的代码，却落在这条线的两侧。",{"children":64,"direction":18,"format":15,"indent":13,"type":19,"version":17,"tag":42},[65],{"detail":13,"format":13,"mode":14,"style":15,"text":66,"type":16,"version":17},"WordPress 上的三种实现路径",{"children":68,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":13,"textStyle":15},[69],{"detail":13,"format":13,"mode":14,"style":15,"text":70,"type":16,"version":17},"WordPress 给了你三个切入点，行为差别很大。",{"children":72,"direction":18,"format":15,"indent":13,"type":19,"version":17,"tag":75},[73],{"detail":13,"format":13,"mode":14,"style":15,"text":74,"type":16,"version":17},"PHP 路径（服务端）","h3",{"children":77,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":13,"textStyle":15},[78,80,83],{"detail":13,"format":13,"mode":14,"style":15,"text":79,"type":16,"version":17},"挂在 ",{"detail":13,"format":81,"mode":14,"style":15,"text":82,"type":16,"version":17},16,"template_redirect",{"detail":13,"format":13,"mode":14,"style":15,"text":84,"type":16,"version":17}," 上、或在请求早期过滤模板，检查请求后返回不同的标记。所有判断都在字节送达浏览器之前完成。",{"children":86,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":13,"textStyle":15},[87],{"detail":13,"format":13,"mode":14,"style":15,"text":88,"type":16,"version":17},"这是三种里最可靠、也最容易出事的一种。可靠在于判断发生在你完全掌控的位置，不会出现内容闪烁。危险在于它对每一个请求都生效——包括某位审核人员在你没考虑过的国家、用手机点开你广告的那一次。",{"children":90,"direction":18,"format":15,"indent":13,"type":19,"version":17,"tag":75},[91],{"detail":13,"format":13,"mode":14,"style":15,"text":92,"type":16,"version":17},"JavaScript 路径（客户端）",{"children":94,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":13,"textStyle":15},[95],{"detail":13,"format":13,"mode":14,"style":15,"text":96,"type":16,"version":17},"页面只发一份 HTML 文档，加载后由脚本按浏览器侧探测到的信息改写它。",{"children":98,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":13,"textStyle":15},[99],{"detail":13,"format":13,"mode":14,"style":15,"text":100,"type":16,"version":17},"好处是容易加装到现成主题上，而且能绕过大多数缓存设置——因为被缓存的 HTML 对所有人都一样。代价是：改写前的那份文档，正是爬虫读到的、\"查看源代码\"看到的、任何无头抓取拿到的东西。如果发出的 HTML 与渲染后的页面讲的是实质不同的两个故事，这个落差本身就是把柄，而且极易被发现。",{"children":102,"direction":18,"format":15,"indent":13,"type":19,"version":17,"tag":75},[103],{"detail":13,"format":13,"mode":14,"style":15,"text":104,"type":16,"version":17},"边缘路径（反向代理）",{"children":106,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":13,"textStyle":15},[107],{"detail":13,"format":13,"mode":14,"style":15,"text":108,"type":16,"version":17},"判断完全发生在 WordPress 之前——一个 worker、一个边缘函数，或者在请求到达 PHP 之前就完成路由的代理层。",{"children":110,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":13,"textStyle":15},[111,113,124],{"detail":13,"format":13,"mode":14,"style":15,"text":112,"type":16,"version":17},"这让 WordPress 保持简单，也把逻辑从插件这个会自行更新的面上挪走了。相应地，你的分流逻辑和 CMS 变成两套可能各自漂移的系统，而且 WordPress 迁站时它不会跟着走。把这件事做成产品的平台——",{"children":114,"direction":18,"format":15,"indent":13,"type":117,"version":118,"fields":119,"id":123},[115],{"detail":13,"format":13,"mode":14,"style":15,"text":116,"type":16,"version":17},"DeepClick 的绿盾","link",3,{"linkType":120,"newTab":121,"url":122},"custom",false,"/product/shield","6a8fb1b1524cd000c85e0593",{"detail":13,"format":13,"mode":14,"style":15,"text":125,"type":16,"version":17},"是其中之一——正是出于这个原因待在这一层。",{"children":127,"direction":18,"format":15,"indent":13,"type":19,"version":17,"tag":42},[128],{"detail":13,"format":13,"mode":14,"style":15,"text":129,"type":16,"version":17},"只有 WordPress 会踩的那个坑",{"children":131,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":13,"textStyle":15},[132],{"detail":13,"format":13,"mode":14,"style":15,"text":133,"type":16,"version":17},"下面这段是大多数教程会跳过的，而它恰恰是真正让部署失效的原因。",{"children":135,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":13,"textStyle":15},[136],{"detail":13,"format":13,"mode":14,"style":15,"text":137,"type":16,"version":17},"WordPress 站几乎一定在跑整页缓存。WP Rocket、W3 Total Cache、LiteSpeed Cache、主机层的 Varnish、Cloudflare APO——总有一种在开着，常常不止一种，有时站长自己都不知道。",{"children":139,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":17,"textStyle":15},[140,142,144,146],{"detail":13,"format":17,"mode":14,"style":15,"text":141,"type":16,"version":17},"整页缓存与服务端分流是直接冲突的。",{"detail":13,"format":13,"mode":14,"style":15,"text":143,"type":16,"version":17}," 缓存的全部职责，是把一个页面算一次，然后把同样的字节发给所有请求同一 URL 的人；而你 PHP 分流逻辑的全部职责，是给每个请求算出",{"detail":13,"format":17,"mode":14,"style":15,"text":145,"type":16,"version":17},"不同",{"detail":13,"format":13,"mode":14,"style":15,"text":147,"type":16,"version":17},"的页面。谁先跑，谁说了算。",{"children":149,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":13,"textStyle":15},[150],{"detail":13,"format":13,"mode":14,"style":15,"text":151,"type":16,"version":17},"实际后果是：缓存清空后的第一个访客，决定了在缓存过期之前所有后续访客看到什么。如果第一个请求来自爬虫，所有人都拿到爬虫那一版；如果它来自目标受众，下一个审核就拿到目标受众那一版。两种结果都不是你配置的意图——而且你每次登录着测都会觉得一切正常，因为登录用户绕过缓存。",{"children":153,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":13,"textStyle":15},[154,156,158],{"detail":13,"format":13,"mode":14,"style":15,"text":155,"type":16,"version":17},"如果这篇只带走一句话：",{"detail":13,"format":17,"mode":14,"style":15,"text":157,"type":16,"version":17},"在你调试分流逻辑之前，先确认缓存在做什么。",{"detail":13,"format":13,"mode":14,"style":15,"text":159,"type":16,"version":17}," 退出登录测、用干净会话测、测不止一次，并检查响应里有没有缓存命中头。一套从没在热缓存下被验证过的分流配置，等于没验证过。",{"children":161,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":13,"textStyle":15},[162,164,166],{"detail":13,"format":13,"mode":14,"style":15,"text":163,"type":16,"version":17},"可行的解法有三个：把落地路径整个排除出整页缓存；让缓存键随你分流依据的信号变化；或者把判断挪到缓存之前的边缘层。",{"detail":13,"format":17,"mode":14,"style":15,"text":165,"type":16,"version":17},"不可行",{"detail":13,"format":13,"mode":14,"style":15,"text":167,"type":16,"version":17},"的做法是假设插件和缓存会自己商量好。",{"children":169,"direction":18,"format":15,"indent":13,"type":19,"version":17,"tag":42},[170],{"detail":13,"format":13,"mode":14,"style":15,"text":171,"type":16,"version":17},"广告平台的红线到底在哪",{"children":173,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":13,"textStyle":15},[174],{"detail":13,"format":13,"mode":14,"style":15,"text":175,"type":16,"version":17},"各家措辞不同，实质是收敛的：",{"children":177,"direction":18,"format":15,"indent":13,"type":198,"version":17,"listType":199,"start":17,"tag":200},[178,185,192],{"children":179,"direction":18,"format":15,"indent":13,"type":184,"version":17,"value":17},[180,182],{"detail":13,"format":17,"mode":14,"style":15,"text":181,"type":16,"version":17},"Meta",{"detail":13,"format":13,"mode":14,"style":15,"text":183,"type":16,"version":17}," 归入\"规避系统\"（circumventing systems）——多数广告主第一次遇到的处罚通知就是它，触发条件是审核所见与用户所得之间的落差，而不是某种具体技术。","listitem",{"children":186,"direction":18,"format":15,"indent":13,"type":184,"version":17,"value":191},[187,189],{"detail":13,"format":17,"mode":14,"style":15,"text":188,"type":16,"version":17},"Google Ads",{"detail":13,"format":13,"mode":14,"style":15,"text":190,"type":16,"version":17}," 放在目标网址要求里：目标页必须与广告承诺、与被审核的内容一致。",2,{"children":193,"direction":18,"format":15,"indent":13,"type":184,"version":17,"value":118},[194,196],{"detail":13,"format":17,"mode":14,"style":15,"text":195,"type":16,"version":17},"TikTok",{"detail":13,"format":13,"mode":14,"style":15,"text":197,"type":16,"version":17}," 写在落地页政策里，失实呈现的逻辑完全相同。","list","bullet","ul",{"children":202,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":13,"textStyle":15},[203,205,207],{"detail":13,"format":13,"mode":14,"style":15,"text":204,"type":16,"version":17},"没有任何一家说\"不许分流\"。把商店按地域路由到区域目录是分流；按 ",{"detail":13,"format":81,"mode":14,"style":15,"text":206,"type":16,"version":17},"Accept-Language",{"detail":13,"format":13,"mode":14,"style":15,"text":208,"type":16,"version":17}," 给对应语言是分流；按设备给不同版式是分流；A/B 测试是分流，而且每家主流广告平台都自带 A/B 工具。",{"children":210,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":13,"textStyle":15},[211,213,215],{"detail":13,"format":13,"mode":14,"style":15,"text":212,"type":16,"version":17},"一致的触发条件是：",{"detail":13,"format":17,"mode":14,"style":15,"text":214,"type":16,"version":17},"被审核的体验和被交付的体验，描述的是两个不同的报价",{"detail":13,"format":13,"mode":14,"style":15,"text":216,"type":16,"version":17},"。当各个分支只是同一个诚实报价的变体时，没有平台会有意见；当一个分支的存在是为了被审核、另一个分支的存在是为了成交，那就是违规——无论它是用 PHP、JavaScript 还是边缘层写的。",{"children":218,"direction":18,"format":15,"indent":13,"type":19,"version":17,"tag":42},[219],{"detail":13,"format":13,"mode":14,"style":15,"text":220,"type":16,"version":17},"常见问题",{"children":222,"direction":18,"format":15,"indent":13,"type":19,"version":17,"tag":75},[223],{"detail":13,"format":13,"mode":14,"style":15,"text":224,"type":16,"version":17},"在 WordPress 上做斗篷违反 Google 规则吗？",{"children":226,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":13,"textStyle":15},[227],{"detail":13,"format":13,"mode":14,"style":15,"text":228,"type":16,"version":17},"在同一 URL 上给爬虫与用户实质不同的内容、目的是影响排名，违反 Google 垃圾内容政策。同一内容的地域、语言、设备变体不算斗篷，明确是允许的。",{"children":230,"direction":18,"format":15,"indent":13,"type":19,"version":17,"tag":75},[231],{"detail":13,"format":13,"mode":14,"style":15,"text":232,"type":16,"version":17},"用插件做安全吗？",{"children":234,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":13,"textStyle":15},[235],{"detail":13,"format":13,"mode":14,"style":15,"text":236,"type":16,"version":17},"插件能实现请求分流，但它无法让分流变得诚实，而且同样受上面那个缓存冲突的影响。插件层也是最容易在 WordPress 核心更新后失效的一层。",{"children":238,"direction":18,"format":15,"indent":13,"type":19,"version":17,"tag":75},[239],{"detail":13,"format":13,"mode":14,"style":15,"text":240,"type":16,"version":17},"客户端分流能对审核隐藏什么吗？",{"children":242,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":13,"textStyle":15},[243],{"detail":13,"format":13,"mode":14,"style":15,"text":244,"type":16,"version":17},"不能。服务器发出的那份文档，任何不执行脚本就抓取该 URL 的一方都读得到，包括自动化审核工具。客户端实现是最容易被检查的，不是最难的。",{"children":246,"direction":18,"format":15,"indent":13,"type":19,"version":17,"tag":75},[247],{"detail":13,"format":13,"mode":14,"style":15,"text":248,"type":16,"version":17},"为什么我自己测好好的，真实流量就不对？",{"children":250,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":13,"textStyle":15},[251],{"detail":13,"format":13,"mode":14,"style":15,"text":252,"type":16,"version":17},"几乎总是整页缓存，加上你测的时候是登录状态。登录请求绕过大多数 WordPress 缓存。请用干净会话、退出登录再测。",{"children":254,"direction":18,"format":15,"indent":13,"type":19,"version":17,"tag":42},[255],{"detail":13,"format":13,"mode":14,"style":15,"text":256,"type":16,"version":17},"上线前的五项自检",{"children":258,"direction":18,"format":15,"indent":13,"type":198,"version":17,"listType":291,"start":17,"tag":292},[259,265,271,277,284],{"children":260,"direction":18,"format":15,"indent":13,"type":184,"version":17,"value":17},[261,263],{"detail":13,"format":17,"mode":14,"style":15,"text":262,"type":16,"version":17},"先说清哪一版是诚实的那版。",{"detail":13,"format":13,"mode":14,"style":15,"text":264,"type":16,"version":17}," 哪个分支你愿意直接拿给审核看？如果答案是\"都不愿意\"，到此为止——没有任何实现细节能补救这一点。",{"children":266,"direction":18,"format":15,"indent":13,"type":184,"version":17,"value":191},[267,269],{"detail":13,"format":17,"mode":14,"style":15,"text":268,"type":16,"version":17},"确认缓存行为。",{"detail":13,"format":13,"mode":14,"style":15,"text":270,"type":16,"version":17}," 退出登录、反复测，验证响应不是从热缓存里发出来的。",{"children":272,"direction":18,"format":15,"indent":13,"type":184,"version":17,"value":118},[273,275],{"detail":13,"format":17,"mode":14,"style":15,"text":274,"type":16,"version":17},"不执行 JavaScript 抓一次自己的 URL。",{"detail":13,"format":13,"mode":14,"style":15,"text":276,"type":16,"version":17}," 拿回来的东西就是爬虫和审核工具看到的东西，按他们的视角读一遍。",{"children":278,"direction":18,"format":15,"indent":13,"type":184,"version":17,"value":283},[279,281],{"detail":13,"format":17,"mode":14,"style":15,"text":280,"type":16,"version":17},"检查兜底分支。",{"detail":13,"format":13,"mode":14,"style":15,"text":282,"type":16,"version":17}," 当信号缺失或含混时渲染的是哪一版？那个默认值，就是大多数未被识别流量拿到的东西。",4,{"children":285,"direction":18,"format":15,"indent":13,"type":184,"version":17,"value":290},[286,288],{"detail":13,"format":17,"mode":14,"style":15,"text":287,"type":16,"version":17},"写下留存策略。",{"detail":13,"format":13,"mode":14,"style":15,"text":289,"type":16,"version":17}," 如果你无法还原\"哪个访客看到了哪一版\"，你就没法应对申诉。",5,"number","ol",{"children":294,"direction":18,"format":15,"indent":13,"type":19,"version":17,"tag":42},[295],{"detail":13,"format":13,"mode":14,"style":15,"text":296,"type":16,"version":17},"一句话总结",{"children":298,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":13,"textStyle":15},[299],{"detail":13,"format":13,"mode":14,"style":15,"text":300,"type":16,"version":17},"「WordPress 斗篷」是两个问题共用一个名字。搜索引擎那个问题，答案只有一个词；投放那个问题是真实的工程问题——三个实现层、一个 WordPress 独有的陷阱（整页缓存悄悄让服务端分流失效），以及一条关于诚实呈现而非技术手段的政策线。",{"children":302,"direction":18,"format":15,"indent":13,"type":25,"version":17,"textFormat":13,"textStyle":15},[303],{"detail":13,"format":13,"mode":14,"style":15,"text":304,"type":16,"version":17},"先把缓存这件事搞清楚，再去把分流逻辑写得聪明。大多数失败的部署，问题从来不在代码里。","root",{"id":307,"alt":308,"updatedAt":309,"createdAt":309,"url":310,"thumbnailURL":18,"filename":311,"mimeType":312,"filesize":313,"width":18,"height":18},1024,"Diagram of a WordPress request branching into two page versions with a caching layer in between","2026-08-27T03:40:02.792Z","https://cms-r2.deepclick.com/cover-673-3ac990db75b3.jpg","cover-673-3ac990db75b3.jpg","application/octet-stream",146819,{"title":315,"description":316,"image":317},"WordPress 斗篷：三种实现路径与缓存陷阱（2026）","请求级分流在 WordPress 上怎么落地：PHP、JavaScript、边缘层三条路径，整页缓存为什么会让服务端分流失效，以及广告平台的失实呈现红线在哪。",{"id":307,"alt":308,"updatedAt":309,"createdAt":309,"url":310,"thumbnailURL":18,"filename":311,"mimeType":312,"filesize":313,"width":18,"height":18},{"id":17,"key":319,"name":320,"prodHost":321,"testHost":322,"blogPath":323,"docPath":324,"zhPrefix":325,"deployHookTest":326,"deployHookProd":327,"brandAuthor":328,"brandKit":332,"enabled":336,"updatedAt":337,"createdAt":338},"deepclick","DeepClick","https://deepclick.com","https://www-test-deepclick.qiliangjia.one","/resources/blog/{slug}","/docs/{slug}","/zh-CN","https://api.cloudflare.com/client/v4/pages/webhooks/deploy_hooks/60a9adef-153b-4c89-8d07-7118e91e9522","https://api.cloudflare.com/client/v4/pages/webhooks/deploy_hooks/05323321-f694-4ce8-a5af-173c507b8bae",{"id":191,"name":320,"avatar":329,"updatedAt":330,"createdAt":331},25,"2026-04-22T08:09:35.299Z","2026-04-22T06:42:49.116Z",{"logoLight":18,"logoDark":18,"primaryColor":333,"accentColor":334,"tagline":335,"wechatName":18,"xhsHandle":18,"wechatQr":18},"#1a73e8","#ff6600","一次点击，多重价值",true,"2026-08-25T06:40:57.663Z","2026-07-14T06:26:38.962Z","published","cloaking-wordpress",{"id":283,"name":342,"avatar":343,"updatedAt":350,"createdAt":350},"Ethan Cole",{"id":344,"alt":345,"updatedAt":346,"createdAt":346,"url":347,"thumbnailURL":18,"filename":348,"mimeType":312,"filesize":349,"width":18,"height":18},922,"Ethan Cole — growth & ad-tech editor","2026-07-27T07:17:05.290Z","https://cms-r2.deepclick.com/gpt_1785136218181_0-d1b8139c1927.png","gpt_1785136218181_0-d1b8139c1927.png",1965798,"2026-07-27T07:17:07.920Z",{"id":352,"site":353,"titleZh":355,"titleEn":356,"slug":357,"order":290,"updatedAt":358,"createdAt":359},7,{"id":17,"key":319,"name":320,"prodHost":321,"testHost":322,"blogPath":323,"docPath":324,"zhPrefix":325,"deployHookTest":326,"deployHookProd":327,"brandAuthor":191,"brandKit":354,"enabled":336,"updatedAt":337,"createdAt":338},{"logoLight":18,"logoDark":18,"primaryColor":333,"accentColor":334,"tagline":335,"wechatName":18,"xhsHandle":18,"wechatQr":18},"技术导航","Tech Guides","tech-guides","2026-04-27T08:37:10.576Z","2026-04-23T02:59:13.436Z","2026-08-27T03:40:51.120Z","2026-08-27T03:40:19.836Z","\u003Cdiv class=\"payload-richtext\">\u003Ch1>WordPress 斗篷：三种实现路径、一个缓存陷阱与平台政策红线（2026）\u003C/h1>\u003Cp>搜「cloaking WordPress」，你会同时撞进两场几乎不相干的讨论。\u003C/p>\u003Cp>一场是搜索引擎的问题：WordPress 站能不能给 Googlebot 一个页面、给真人另一个页面？这就是教科书定义的搜索引擎斗篷，违反 Google 的垃圾内容政策，答案很短——别做。\u003C/p>\u003Cp>另一场是投放的问题：广告主把流量打到一个 WordPress 落地页，希望这个页面对审核、对机器人、对地域不符的访客，表现和对真正目标受众不一样。同一个词，机制完全不同，规则也完全不同。\u003C/p>\u003Cp>本文讲第二件事——请求级分流在 WordPress 上到底怎么落地、有哪一个坑是 WordPress 独有的、以及广告平台的红线画在哪。\u003C/p>\u003Ch2>同一个词，两件不同的事\u003C/h2>\u003Cp>\u003Cstrong>搜索引擎斗篷\u003C/strong>指的是：在同一个 URL 上，给搜索爬虫的内容与给真人的内容有实质差异，目的是影响排名。Google 在垃圾内容政策里点名了它。处罚不是一条警告横幅，是从索引里拿掉。本文没有一段是在教怎么&quot;安全地&quot;做这件事，因为不存在这种做法。\u003C/p>\u003Cp>\u003Cstrong>投放侧分流\u003C/strong>指的是：落地页根据请求信号渲染不同内容——点击来自哪里、什么设备发起、请求形态是否像自动化程序。广告平台并不禁止分流本身，它们禁止的是\u003Cstrong>失实呈现\u003C/strong>：让审核看到的页面，与真实用户在同一条广告下看到的页面有实质差异。\u003C/p>\u003Cp>真正决定性质的不是技术手段，而是审核或爬虫看到的那一版，是不是对这个报价的诚实呈现。两套实现可以用一模一样的代码，却落在这条线的两侧。\u003C/p>\u003Ch2>WordPress 上的三种实现路径\u003C/h2>\u003Cp>WordPress 给了你三个切入点，行为差别很大。\u003C/p>\u003Ch3>PHP 路径（服务端）\u003C/h3>\u003Cp>挂在 \u003Ccode>template_redirect\u003C/code> 上、或在请求早期过滤模板，检查请求后返回不同的标记。所有判断都在字节送达浏览器之前完成。\u003C/p>\u003Cp>这是三种里最可靠、也最容易出事的一种。可靠在于判断发生在你完全掌控的位置，不会出现内容闪烁。危险在于它对每一个请求都生效——包括某位审核人员在你没考虑过的国家、用手机点开你广告的那一次。\u003C/p>\u003Ch3>JavaScript 路径（客户端）\u003C/h3>\u003Cp>页面只发一份 HTML 文档，加载后由脚本按浏览器侧探测到的信息改写它。\u003C/p>\u003Cp>好处是容易加装到现成主题上，而且能绕过大多数缓存设置——因为被缓存的 HTML 对所有人都一样。代价是：改写前的那份文档，正是爬虫读到的、&quot;查看源代码&quot;看到的、任何无头抓取拿到的东西。如果发出的 HTML 与渲染后的页面讲的是实质不同的两个故事，这个落差本身就是把柄，而且极易被发现。\u003C/p>\u003Ch3>边缘路径（反向代理）\u003C/h3>\u003Cp>判断完全发生在 WordPress 之前——一个 worker、一个边缘函数，或者在请求到达 PHP 之前就完成路由的代理层。\u003C/p>\u003Cp>这让 WordPress 保持简单，也把逻辑从插件这个会自行更新的面上挪走了。相应地，你的分流逻辑和 CMS 变成两套可能各自漂移的系统，而且 WordPress 迁站时它不会跟着走。把这件事做成产品的平台——\u003Ca href=\"/product/shield\">DeepClick 的绿盾\u003C/a>是其中之一——正是出于这个原因待在这一层。\u003C/p>\u003Ch2>只有 WordPress 会踩的那个坑\u003C/h2>\u003Cp>下面这段是大多数教程会跳过的，而它恰恰是真正让部署失效的原因。\u003C/p>\u003Cp>WordPress 站几乎一定在跑整页缓存。WP Rocket、W3 Total Cache、LiteSpeed Cache、主机层的 Varnish、Cloudflare APO——总有一种在开着，常常不止一种，有时站长自己都不知道。\u003C/p>\u003Cp>\u003Cstrong>整页缓存与服务端分流是直接冲突的。\u003C/strong> 缓存的全部职责，是把一个页面算一次，然后把同样的字节发给所有请求同一 URL 的人；而你 PHP 分流逻辑的全部职责，是给每个请求算出\u003Cstrong>不同\u003C/strong>的页面。谁先跑，谁说了算。\u003C/p>\u003Cp>实际后果是：缓存清空后的第一个访客，决定了在缓存过期之前所有后续访客看到什么。如果第一个请求来自爬虫，所有人都拿到爬虫那一版；如果它来自目标受众，下一个审核就拿到目标受众那一版。两种结果都不是你配置的意图——而且你每次登录着测都会觉得一切正常，因为登录用户绕过缓存。\u003C/p>\u003Cp>如果这篇只带走一句话：\u003Cstrong>在你调试分流逻辑之前，先确认缓存在做什么。\u003C/strong> 退出登录测、用干净会话测、测不止一次，并检查响应里有没有缓存命中头。一套从没在热缓存下被验证过的分流配置，等于没验证过。\u003C/p>\u003Cp>可行的解法有三个：把落地路径整个排除出整页缓存；让缓存键随你分流依据的信号变化；或者把判断挪到缓存之前的边缘层。\u003Cstrong>不可行\u003C/strong>的做法是假设插件和缓存会自己商量好。\u003C/p>\u003Ch2>广告平台的红线到底在哪\u003C/h2>\u003Cp>各家措辞不同，实质是收敛的：\u003C/p>\u003Cul class=\"list-bullet\">\u003Cli\n          class=\"\"\n          style=\"\"\n          value=\"1\"\n        >\u003Cstrong>Meta\u003C/strong> 归入&quot;规避系统&quot;（circumventing systems）——多数广告主第一次遇到的处罚通知就是它，触发条件是审核所见与用户所得之间的落差，而不是某种具体技术。\u003C/li>\u003Cli\n          class=\"\"\n          style=\"\"\n          value=\"2\"\n        >\u003Cstrong>Google Ads\u003C/strong> 放在目标网址要求里：目标页必须与广告承诺、与被审核的内容一致。\u003C/li>\u003Cli\n          class=\"\"\n          style=\"\"\n          value=\"3\"\n        >\u003Cstrong>TikTok\u003C/strong> 写在落地页政策里，失实呈现的逻辑完全相同。\u003C/li>\u003C/ul>\u003Cp>没有任何一家说&quot;不许分流&quot;。把商店按地域路由到区域目录是分流；按 \u003Ccode>Accept-Language\u003C/code> 给对应语言是分流；按设备给不同版式是分流；A/B 测试是分流，而且每家主流广告平台都自带 A/B 工具。\u003C/p>\u003Cp>一致的触发条件是：\u003Cstrong>被审核的体验和被交付的体验，描述的是两个不同的报价\u003C/strong>。当各个分支只是同一个诚实报价的变体时，没有平台会有意见；当一个分支的存在是为了被审核、另一个分支的存在是为了成交，那就是违规——无论它是用 PHP、JavaScript 还是边缘层写的。\u003C/p>\u003Ch2>常见问题\u003C/h2>\u003Ch3>在 WordPress 上做斗篷违反 Google 规则吗？\u003C/h3>\u003Cp>在同一 URL 上给爬虫与用户实质不同的内容、目的是影响排名，违反 Google 垃圾内容政策。同一内容的地域、语言、设备变体不算斗篷，明确是允许的。\u003C/p>\u003Ch3>用插件做安全吗？\u003C/h3>\u003Cp>插件能实现请求分流，但它无法让分流变得诚实，而且同样受上面那个缓存冲突的影响。插件层也是最容易在 WordPress 核心更新后失效的一层。\u003C/p>\u003Ch3>客户端分流能对审核隐藏什么吗？\u003C/h3>\u003Cp>不能。服务器发出的那份文档，任何不执行脚本就抓取该 URL 的一方都读得到，包括自动化审核工具。客户端实现是最容易被检查的，不是最难的。\u003C/p>\u003Ch3>为什么我自己测好好的，真实流量就不对？\u003C/h3>\u003Cp>几乎总是整页缓存，加上你测的时候是登录状态。登录请求绕过大多数 WordPress 缓存。请用干净会话、退出登录再测。\u003C/p>\u003Ch2>上线前的五项自检\u003C/h2>\u003Col class=\"list-number\">\u003Cli\n          class=\"\"\n          style=\"\"\n          value=\"1\"\n        >\u003Cstrong>先说清哪一版是诚实的那版。\u003C/strong> 哪个分支你愿意直接拿给审核看？如果答案是&quot;都不愿意&quot;，到此为止——没有任何实现细节能补救这一点。\u003C/li>\u003Cli\n          class=\"\"\n          style=\"\"\n          value=\"2\"\n        >\u003Cstrong>确认缓存行为。\u003C/strong> 退出登录、反复测，验证响应不是从热缓存里发出来的。\u003C/li>\u003Cli\n          class=\"\"\n          style=\"\"\n          value=\"3\"\n        >\u003Cstrong>不执行 JavaScript 抓一次自己的 URL。\u003C/strong> 拿回来的东西就是爬虫和审核工具看到的东西，按他们的视角读一遍。\u003C/li>\u003Cli\n          class=\"\"\n          style=\"\"\n          value=\"4\"\n        >\u003Cstrong>检查兜底分支。\u003C/strong> 当信号缺失或含混时渲染的是哪一版？那个默认值，就是大多数未被识别流量拿到的东西。\u003C/li>\u003Cli\n          class=\"\"\n          style=\"\"\n          value=\"5\"\n        >\u003Cstrong>写下留存策略。\u003C/strong> 如果你无法还原&quot;哪个访客看到了哪一版&quot;，你就没法应对申诉。\u003C/li>\u003C/ol>\u003Ch2>一句话总结\u003C/h2>\u003Cp>「WordPress 斗篷」是两个问题共用一个名字。搜索引擎那个问题，答案只有一个词；投放那个问题是真实的工程问题——三个实现层、一个 WordPress 独有的陷阱（整页缓存悄悄让服务端分流失效），以及一条关于诚实呈现而非技术手段的政策线。\u003C/p>\u003Cp>先把缓存这件事搞清楚，再去把分流逻辑写得聪明。大多数失败的部署，问题从来不在代码里。\u003C/p>\u003C/div>","https://deepclick.com/zh-CN/resources/blog/cloaking-wordpress",{"zh-CN":340,"en":340},1787802230333]