[{"data":1,"prerenderedAt":1095},["ShallowReactive",2],{"blog-cloaking-vs-smart-landing-pages-en":3},{"id":4,"title":5,"excerpt":6,"content":7,"coverImage":1057,"meta":1067,"status":1071,"slug":1072,"author":1073,"category":1084,"publishDate":1089,"featured":36,"updatedAt":1090,"createdAt":1091,"contentHtml":1092,"previewUrl":1093,"localeSlugs":1094},96,"Cloaking vs Smart Landing Pages: A Technical Deep-Dive","Cloaking switches between compliant and non-compliant pages; smart landing pages switch between compliant variants. A four-dimension architecture deep-dive.",{"root":8},{"type":9,"format":10,"indent":11,"version":12,"direction":13,"children":14},"root","",0,1,"ltr",[15,24,28,44,50,57,61,65,69,73,78,82,86,90,94,98,102,105,109,113,117,120,128,132,135,139,143,147,151,155,159,163,166,174,178,326,334,338,342,346,389,397,401,436,448,452,595,599,603,607,611,615,619,623,627,631,635,639,643,647,651,655,659,663,667,670,674,678,681,685,716,720,724,728,732,760,764,887,891,895,899,907,911,915,919,923,927,935,947,951,955,961,967,973,985,989,993,997,1001,1005,1009,1013,1017,1029,1033,1037,1041,1045,1049,1053],{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":17},"paragraph",[18,22],{"type":19,"text":20,"format":11,"detail":11,"mode":21,"style":10,"version":12},"text","The two phrases get bundled together in compliance reviews, ad-platform support threads, and engineering RFCs, and the conflation has cost teams real money. They share several primitives — server-side decisions, request-context parsing, multi-variant rendering — but diverge on one axis that matters to every ad platform: ","normal",{"type":19,"text":23,"format":12,"detail":11,"mode":21,"style":10,"version":12},"what set of pages the system is allowed to route to.",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":25},[26],{"type":19,"text":27,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Cloaking routes between a compliant page and a non-compliant page based on who is asking. Smart landing pages route between several compliant variants based on what the visitor needs. Same plumbing, different policy. This article walks through that distinction architecturally — four lenses (system architecture, data flow, decision logging, audit traceability) — so engineering, growth, and legal teams stop arguing past each other.",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":29},[30,32,42],{"type":19,"text":31,"format":11,"detail":11,"mode":21,"style":10,"version":12},"For policy and history, our ",{"type":33,"fields":34,"format":10,"indent":11,"version":38,"direction":13,"children":39},"link",{"url":35,"newTab":36,"linkType":37},"/resources/blog/what-is-website-cloaking",false,"custom",3,[40],{"type":19,"text":41,"format":11,"detail":11,"mode":21,"style":10,"version":12},"website cloaking",{"type":19,"text":43,"format":11,"detail":11,"mode":21,"style":10,"version":12}," explainer covers the definitional ground. This piece is for teams that already understand the basics and need to design — or evaluate — a personalization system without tripping platform reviews.",{"type":45,"tag":46,"format":10,"indent":11,"version":12,"direction":13,"children":47},"heading","h2",[48],{"type":19,"text":49,"format":11,"detail":11,"mode":21,"style":10,"version":12},"The one-sentence definition that resolves 80% of confusion",{"type":51,"format":10,"indent":11,"version":12,"direction":13,"children":52},"quote",[53],{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":54},[55],{"type":19,"text":56,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Cloaking serves materially different content to bots versus real users, where at least one of the served pages would violate the ad platform's policies. Smart landing pages serve different variants to different real-user segments, where every variant complies with the same policies as the approved ad.",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":58},[59],{"type":19,"text":60,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Read that twice. The mechanical difference is \"bots vs. users.\" The legal difference is \"at least one variant is non-compliant.\" Most marketing teams that get banned were not banned for personalizing — they were banned because one of their variants was a page the platform would never have approved. The personalization machinery was incidental.",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":62},[63],{"type":19,"text":64,"format":11,"detail":11,"mode":21,"style":10,"version":12},"This matters because vendors and consultants often pitch \"AI cloaking\" or \"smart cloak\" as if it were a sophisticated form of personalization. It is not. A smart cloak that hides a non-compliant page is still cloaking, and the more sophisticated the hiding, the harsher the eventual sanction.",{"type":45,"tag":46,"format":10,"indent":11,"version":12,"direction":13,"children":66},[67],{"type":19,"text":68,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Dimension 1: System architecture",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":70},[71],{"type":19,"text":72,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Both systems look surprisingly alike on a whiteboard. Both have an inbound request, a context parser, a decision engine, and a rendering layer. The internals are where they diverge.",{"type":45,"tag":74,"format":10,"indent":11,"version":12,"direction":13,"children":75},"h3",[76],{"type":19,"text":77,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Cloaking architecture (the high-risk pattern)",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":79},[80],{"type":19,"text":81,"format":11,"detail":11,"mode":21,"style":10,"version":12},"```",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":83},[84],{"type":19,"text":85,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Request -> Edge worker -> Fingerprint check -> Branch",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":87},[88],{"type":19,"text":89,"format":11,"detail":11,"mode":21,"style":10,"version":12},"                                              |",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":91},[92],{"type":19,"text":93,"format":11,"detail":11,"mode":21,"style":10,"version":12},"+-------------------+--------------------+",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":95},[96],{"type":19,"text":97,"format":11,"detail":11,"mode":21,"style":10,"version":12},"                          |                                        |",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":99},[100],{"type":19,"text":101,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Suspected reviewer/bot              Real user (or \"approved\" geo)",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":103},[104],{"type":19,"text":97,"format":11,"detail":11,"mode":21,"style":10,"version":12},{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":106},[107],{"type":19,"text":108,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Render WHITE PAGE                       Render BLACK PAGE",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":110},[111],{"type":19,"text":112,"format":11,"detail":11,"mode":21,"style":10,"version":12},"(compliant, fake)                       (the real offer,",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":114},[115],{"type":19,"text":116,"format":11,"detail":11,"mode":21,"style":10,"version":12},"often non-compliant)",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":118},[119],{"type":19,"text":81,"format":11,"detail":11,"mode":21,"style":10,"version":12},{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":121},[122,124,126],{"type":19,"text":123,"format":11,"detail":11,"mode":21,"style":10,"version":12},"The defining feature is the ",{"type":19,"text":125,"format":12,"detail":11,"mode":21,"style":10,"version":12},"binary fork between a \"white page\" and a \"black page.\"",{"type":19,"text":127,"format":11,"detail":11,"mode":21,"style":10,"version":12}," The white page exists to satisfy platform review. The black page is what the operator actually wants users to see. Detection logic typically inspects IP ASN, UA strings, header fingerprints, TLS JA3, behavioral signals, or referrer chains.",{"type":45,"tag":74,"format":10,"indent":11,"version":12,"direction":13,"children":129},[130],{"type":19,"text":131,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Smart landing page architecture (the compliant pattern)",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":133},[134],{"type":19,"text":81,"format":11,"detail":11,"mode":21,"style":10,"version":12},{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":136},[137],{"type":19,"text":138,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Request -> Edge worker -> Context parser -> Decision engine -> Variant catalog",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":140},[141],{"type":19,"text":142,"format":11,"detail":11,"mode":21,"style":10,"version":12},"                                                                     |",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":144},[145],{"type":19,"text":146,"format":11,"detail":11,"mode":21,"style":10,"version":12},"+-----------+-----------+-----+",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":148},[149],{"type":19,"text":150,"format":11,"detail":11,"mode":21,"style":10,"version":12},"                                       |           |           |",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":152},[153],{"type":19,"text":154,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Variant A   Variant B    Variant C",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":156},[157],{"type":19,"text":158,"format":11,"detail":11,"mode":21,"style":10,"version":12},"(compliant) (compliant)  (compliant)",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":160},[161],{"type":19,"text":162,"format":11,"detail":11,"mode":21,"style":10,"version":12},"\\_________ all approvable ________/",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":164},[165],{"type":19,"text":81,"format":11,"detail":11,"mode":21,"style":10,"version":12},{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":167},[168,170,172],{"type":19,"text":169,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Smart landing pages have ",{"type":19,"text":171,"format":12,"detail":11,"mode":21,"style":10,"version":12},"no white/black split.",{"type":19,"text":173,"format":11,"detail":11,"mode":21,"style":10,"version":12}," Every variant must pass the same compliance bar as the original approved ad. The decision engine routes by context — device, locale, traffic source, prior interaction, time of day, inventory — and selects from a pool that is, by construction, uniformly compliant.",{"type":45,"tag":74,"format":10,"indent":11,"version":12,"direction":13,"children":175},[176],{"type":19,"text":177,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Side-by-side architecture table",{"type":179,"direction":180,"format":10,"indent":11,"version":12,"colWidths":181,"children":183},"table",null,[182,182,182],280,[184,206,226,246,266,286,306],{"type":185,"direction":180,"format":10,"indent":11,"version":12,"children":186},"tablerow",[187,194,200],{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":12,"children":189},"tablecell",[190],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":191},[192],{"type":19,"text":193,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Component",{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":12,"children":195},[196],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":197},[198],{"type":19,"text":199,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Cloaking",{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":12,"children":201},[202],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":203},[204],{"type":19,"text":205,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Smart landing pages",{"type":185,"direction":180,"format":10,"indent":11,"version":12,"children":207},[208,214,220],{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":11,"children":209},[210],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":211},[212],{"type":19,"text":213,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Inbound parsing",{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":11,"children":215},[216],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":217},[218],{"type":19,"text":219,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Heavy bot/reviewer detection",{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":11,"children":221},[222],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":223},[224],{"type":19,"text":225,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Visitor context (device, locale, source)",{"type":185,"direction":180,"format":10,"indent":11,"version":12,"children":227},[228,234,240],{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":11,"children":229},[230],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":231},[232],{"type":19,"text":233,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Decision input",{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":11,"children":235},[236],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":237},[238],{"type":19,"text":239,"format":11,"detail":11,"mode":21,"style":10,"version":12},"\"Is this a reviewer?\"",{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":11,"children":241},[242],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":243},[244],{"type":19,"text":245,"format":11,"detail":11,"mode":21,"style":10,"version":12},"\"Which variant fits this visitor?\"",{"type":185,"direction":180,"format":10,"indent":11,"version":12,"children":247},[248,254,260],{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":11,"children":249},[250],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":251},[252],{"type":19,"text":253,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Page catalog",{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":11,"children":255},[256],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":257},[258],{"type":19,"text":259,"format":11,"detail":11,"mode":21,"style":10,"version":12},"2 pages (white + black)",{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":11,"children":261},[262],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":263},[264],{"type":19,"text":265,"format":11,"detail":11,"mode":21,"style":10,"version":12},"N variants, all approvable",{"type":185,"direction":180,"format":10,"indent":11,"version":12,"children":267},[268,274,280],{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":11,"children":269},[270],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":271},[272],{"type":19,"text":273,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Variant compliance bar",{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":11,"children":275},[276],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":277},[278],{"type":19,"text":279,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Asymmetric (white passes, black doesn't)",{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":11,"children":281},[282],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":283},[284],{"type":19,"text":285,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Uniform (all pass)",{"type":185,"direction":180,"format":10,"indent":11,"version":12,"children":287},[288,294,300],{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":11,"children":289},[290],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":291},[292],{"type":19,"text":293,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Failure mode",{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":11,"children":295},[296],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":297},[298],{"type":19,"text":299,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Bot detection misfires -> reviewer sees black page -> ban",{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":11,"children":301},[302],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":303},[304],{"type":19,"text":305,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Wrong variant served -> lower conversion, no policy hit",{"type":185,"direction":180,"format":10,"indent":11,"version":12,"children":307},[308,314,320],{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":11,"children":309},[310],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":311},[312],{"type":19,"text":313,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Defensibility under review",{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":11,"children":315},[316],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":317},[318],{"type":19,"text":319,"format":11,"detail":11,"mode":21,"style":10,"version":12},"None — system is the violation",{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":11,"children":321},[322],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":323},[324],{"type":19,"text":325,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Full — every variant can be shown to a reviewer",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":327},[328,330,332],{"type":19,"text":329,"format":11,"detail":11,"mode":21,"style":10,"version":12},"The last row is the punchline. A cloaking system ",{"type":19,"text":331,"format":12,"detail":11,"mode":21,"style":10,"version":12},"cannot",{"type":19,"text":333,"format":11,"detail":11,"mode":21,"style":10,"version":12}," defend itself in an ad-platform appeal — revealing how it works is admitting the violation. A smart landing page system can be fully disclosed to a reviewer; the disclosure is the defense.",{"type":45,"tag":46,"format":10,"indent":11,"version":12,"direction":13,"children":335},[336],{"type":19,"text":337,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Dimension 2: Data flow",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":339},[340],{"type":19,"text":341,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Architecture diagrams are static. The real difference shows up at request time, in what data crosses which boundary.",{"type":45,"tag":74,"format":10,"indent":11,"version":12,"direction":13,"children":343},[344],{"type":19,"text":345,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Cloaking data flow",{"type":347,"listType":348,"start":12,"tag":349,"format":10,"indent":11,"version":12,"direction":13,"children":350},"list","number","ol",[351,358,365,375,382],{"type":352,"value":12,"format":10,"indent":11,"version":12,"direction":13,"children":353},"listitem",[354],{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":355},[356],{"type":19,"text":357,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Request arrives at the edge.",{"type":352,"value":359,"format":10,"indent":11,"version":12,"direction":13,"children":360},2,[361],{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":362},[363],{"type":19,"text":364,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Edge worker pulls IP, ASN, UA, headers, TLS fingerprint, cookies, referrer.",{"type":352,"value":38,"format":10,"indent":11,"version":12,"direction":13,"children":366},[367],{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":368},[369,371,373],{"type":19,"text":370,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Fingerprint is ",{"type":19,"text":372,"format":12,"detail":11,"mode":21,"style":10,"version":12},"matched against a reviewer blocklist",{"type":19,"text":374,"format":11,"detail":11,"mode":21,"style":10,"version":12}," (often a third-party feed).",{"type":352,"value":376,"format":10,"indent":11,"version":12,"direction":13,"children":377},4,[378],{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":379},[380],{"type":19,"text":381,"format":11,"detail":11,"mode":21,"style":10,"version":12},"If matched: serve white page, log minimally.",{"type":352,"value":383,"format":10,"indent":11,"version":12,"direction":13,"children":384},5,[385],{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":386},[387],{"type":19,"text":388,"format":11,"detail":11,"mode":21,"style":10,"version":12},"If not matched: serve black page, log conversions to the operator's analytics.",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":390},[391,393,395],{"type":19,"text":392,"format":11,"detail":11,"mode":21,"style":10,"version":12},"The critical telemetry — the fingerprint match — is the thing the operator most wants to ",{"type":19,"text":394,"format":12,"detail":11,"mode":21,"style":10,"version":12},"not",{"type":19,"text":396,"format":11,"detail":11,"mode":21,"style":10,"version":12}," be logged where the platform can subpoena. Cloaking systems log defensively: short retention, no PII, often offshore storage.",{"type":45,"tag":74,"format":10,"indent":11,"version":12,"direction":13,"children":398},[399],{"type":19,"text":400,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Smart landing page data flow",{"type":347,"listType":348,"start":12,"tag":349,"format":10,"indent":11,"version":12,"direction":13,"children":402},[403,408,414,420,430],{"type":352,"value":12,"format":10,"indent":11,"version":12,"direction":13,"children":404},[405],{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":406},[407],{"type":19,"text":357,"format":11,"detail":11,"mode":21,"style":10,"version":12},{"type":352,"value":359,"format":10,"indent":11,"version":12,"direction":13,"children":409},[410],{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":411},[412],{"type":19,"text":413,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Edge worker extracts visitor context: device class, geo, language, traffic-source attribution, returning-visitor cookie, campaign UTM.",{"type":352,"value":38,"format":10,"indent":11,"version":12,"direction":13,"children":415},[416],{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":417},[418],{"type":19,"text":419,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Decision engine queries the variant catalog with that context.",{"type":352,"value":376,"format":10,"indent":11,"version":12,"direction":13,"children":421},[422],{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":423},[424,426,428],{"type":19,"text":425,"format":11,"detail":11,"mode":21,"style":10,"version":12},"A variant is selected; the selection rule (e.g., \"device=mobile AND locale=pt-BR -> variant_b\") is ",{"type":19,"text":427,"format":12,"detail":11,"mode":21,"style":10,"version":12},"emitted to a decision log",{"type":19,"text":429,"format":11,"detail":11,"mode":21,"style":10,"version":12},".",{"type":352,"value":383,"format":10,"indent":11,"version":12,"direction":13,"children":431},[432],{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":433},[434],{"type":19,"text":435,"format":11,"detail":11,"mode":21,"style":10,"version":12},"The variant renders; analytics tracks the full funnel keyed by variant_id.",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":437},[438,440,442,444,446],{"type":19,"text":439,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Notice the inversion: cloaking wants to ",{"type":19,"text":441,"format":12,"detail":11,"mode":21,"style":10,"version":12},"forget",{"type":19,"text":443,"format":11,"detail":11,"mode":21,"style":10,"version":12}," how it routed each request; smart landing pages want to ",{"type":19,"text":445,"format":12,"detail":11,"mode":21,"style":10,"version":12},"remember",{"type":19,"text":447,"format":11,"detail":11,"mode":21,"style":10,"version":12}," how they routed each request. The decision log is a first-class artifact, used downstream for A/B analysis, optimization, and — critically — for ad-platform audit response.",{"type":45,"tag":74,"format":10,"indent":11,"version":12,"direction":13,"children":449},[450],{"type":19,"text":451,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Data-flow comparison table",{"type":179,"direction":180,"format":10,"indent":11,"version":12,"colWidths":453,"children":454},[182,182,182],[455,475,495,515,535,555,575],{"type":185,"direction":180,"format":10,"indent":11,"version":12,"children":456},[457,463,469],{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":12,"children":458},[459],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":460},[461],{"type":19,"text":462,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Signal",{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":12,"children":464},[465],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":466},[467],{"type":19,"text":468,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Cloaking uses it to...",{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":12,"children":470},[471],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":472},[473],{"type":19,"text":474,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Smart landing pages use it to...",{"type":185,"direction":180,"format":10,"indent":11,"version":12,"children":476},[477,483,489],{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":11,"children":478},[479],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":480},[481],{"type":19,"text":482,"format":11,"detail":11,"mode":21,"style":10,"version":12},"IP / ASN",{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":11,"children":484},[485],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":486},[487],{"type":19,"text":488,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Detect reviewer infrastructure",{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":11,"children":490},[491],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":492},[493],{"type":19,"text":494,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Route by geo, fraud-screen",{"type":185,"direction":180,"format":10,"indent":11,"version":12,"children":496},[497,503,509],{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":11,"children":498},[499],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":500},[501],{"type":19,"text":502,"format":11,"detail":11,"mode":21,"style":10,"version":12},"User-Agent",{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":11,"children":504},[505],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":506},[507],{"type":19,"text":508,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Detect bots / reviewer tools",{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":11,"children":510},[511],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":512},[513],{"type":19,"text":514,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Device-class targeting",{"type":185,"direction":180,"format":10,"indent":11,"version":12,"children":516},[517,523,529],{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":11,"children":518},[519],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":520},[521],{"type":19,"text":522,"format":11,"detail":11,"mode":21,"style":10,"version":12},"TLS fingerprint",{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":11,"children":524},[525],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":526},[527],{"type":19,"text":528,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Anti-detection arms race",{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":11,"children":530},[531],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":532},[533],{"type":19,"text":534,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Largely unused",{"type":185,"direction":180,"format":10,"indent":11,"version":12,"children":536},[537,543,549],{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":11,"children":538},[539],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":540},[541],{"type":19,"text":542,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Referrer",{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":11,"children":544},[545],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":546},[547],{"type":19,"text":548,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Detect platform crawlers",{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":11,"children":550},[551],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":552},[553],{"type":19,"text":554,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Attribute traffic source",{"type":185,"direction":180,"format":10,"indent":11,"version":12,"children":556},[557,563,569],{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":11,"children":558},[559],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":560},[561],{"type":19,"text":562,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Behavior signals",{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":11,"children":564},[565],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":566},[567],{"type":19,"text":568,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Distinguish humans from bots",{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":11,"children":570},[571],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":572},[573],{"type":19,"text":574,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Personalize messaging",{"type":185,"direction":180,"format":10,"indent":11,"version":12,"children":576},[577,583,589],{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":11,"children":578},[579],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":580},[581],{"type":19,"text":582,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Decision output",{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":11,"children":584},[585],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":586},[587],{"type":19,"text":588,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Discarded or short-retained",{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":11,"children":590},[591],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":592},[593],{"type":19,"text":594,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Persisted to decision log",{"type":45,"tag":46,"format":10,"indent":11,"version":12,"direction":13,"children":596},[597],{"type":19,"text":598,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Dimension 3: Decision logging",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":600},[601],{"type":19,"text":602,"format":11,"detail":11,"mode":21,"style":10,"version":12},"This is where the boundary becomes legible to a reviewer, an auditor, or a regulator.",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":604},[605],{"type":19,"text":606,"format":11,"detail":11,"mode":21,"style":10,"version":12},"A smart landing page system that does personalization correctly emits, for every request, a structured record roughly like:",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":608},[609],{"type":19,"text":610,"format":11,"detail":11,"mode":21,"style":10,"version":12},"```json",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":612},[613],{"type":19,"text":614,"format":11,"detail":11,"mode":21,"style":10,"version":12},"{",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":616},[617],{"type":19,"text":618,"format":11,"detail":11,"mode":21,"style":10,"version":12},"\"request_id\": \"req_2026_06_09_abc123\",",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":620},[621],{"type":19,"text":622,"format":11,"detail":11,"mode":21,"style":10,"version":12},"\"timestamp\": \"2026-06-09T14:22:11Z\",",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":624},[625],{"type":19,"text":626,"format":11,"detail":11,"mode":21,"style":10,"version":12},"\"ad_id\": \"fb_camp_4471_ad_22\",",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":628},[629],{"type":19,"text":630,"format":11,"detail":11,"mode":21,"style":10,"version":12},"\"context\": {",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":632},[633],{"type":19,"text":634,"format":11,"detail":11,"mode":21,"style":10,"version":12},"\"device_class\": \"mobile\",",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":636},[637],{"type":19,"text":638,"format":11,"detail":11,"mode":21,"style":10,"version":12},"\"locale\": \"es-MX\",",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":640},[641],{"type":19,"text":642,"format":11,"detail":11,"mode":21,"style":10,"version":12},"\"traffic_source\": \"facebook_paid\",",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":644},[645],{"type":19,"text":646,"format":11,"detail":11,"mode":21,"style":10,"version":12},"\"returning_visitor\": false",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":648},[649],{"type":19,"text":650,"format":11,"detail":11,"mode":21,"style":10,"version":12},"},",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":652},[653],{"type":19,"text":654,"format":11,"detail":11,"mode":21,"style":10,"version":12},"\"decision\": {",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":656},[657],{"type":19,"text":658,"format":11,"detail":11,"mode":21,"style":10,"version":12},"\"variant_id\": \"lp_v3_es_mobile\",",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":660},[661],{"type":19,"text":662,"format":11,"detail":11,"mode":21,"style":10,"version":12},"\"rule_fired\": \"device=mobile AND locale=es-* -> v3_es_mobile\",",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":664},[665],{"type":19,"text":666,"format":11,"detail":11,"mode":21,"style":10,"version":12},"\"compliance_tag\": \"approved_2026_05_18\"",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":668},[669],{"type":19,"text":650,"format":11,"detail":11,"mode":21,"style":10,"version":12},{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":671},[672],{"type":19,"text":673,"format":11,"detail":11,"mode":21,"style":10,"version":12},"\"rendered_url\": \"/lp/checkout-es-mobile\"",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":675},[676],{"type":19,"text":677,"format":11,"detail":11,"mode":21,"style":10,"version":12},"}",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":679},[680],{"type":19,"text":81,"format":11,"detail":11,"mode":21,"style":10,"version":12},{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":682},[683],{"type":19,"text":684,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Three properties make this record audit-grade:",{"type":347,"listType":348,"start":12,"tag":349,"format":10,"indent":11,"version":12,"direction":13,"children":686},[687,700,708],{"type":352,"value":12,"format":10,"indent":11,"version":12,"direction":13,"children":688},[689],{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":690},[691,693,695,698],{"type":19,"text":692,"format":12,"detail":11,"mode":21,"style":10,"version":12},"The variant_id maps to an approved artifact.",{"type":19,"text":694,"format":11,"detail":11,"mode":21,"style":10,"version":12}," The compliance team can pull ",{"type":19,"text":696,"format":697,"detail":11,"mode":21,"style":10,"version":12},"lp_v3_es_mobile",16,{"type":19,"text":699,"format":11,"detail":11,"mode":21,"style":10,"version":12}," out of a versioned catalog and show it to a reviewer.",{"type":352,"value":359,"format":10,"indent":11,"version":12,"direction":13,"children":701},[702],{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":703},[704,706],{"type":19,"text":705,"format":12,"detail":11,"mode":21,"style":10,"version":12},"The rule_fired is human-readable.",{"type":19,"text":707,"format":11,"detail":11,"mode":21,"style":10,"version":12}," A reviewer doesn't have to reverse-engineer behavior; the routing rule is right there.",{"type":352,"value":38,"format":10,"indent":11,"version":12,"direction":13,"children":709},[710],{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":711},[712,714],{"type":19,"text":713,"format":12,"detail":11,"mode":21,"style":10,"version":12},"The record is per-request, not aggregated.",{"type":19,"text":715,"format":11,"detail":11,"mode":21,"style":10,"version":12}," If a specific user complains about a specific page, the team can reconstruct what they saw.",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":717},[718],{"type":19,"text":719,"format":11,"detail":11,"mode":21,"style":10,"version":12},"A cloaking system has every reason not to emit this. Logging \"rule_fired: ua_contains_googlebot -> white_page\" is documenting the offense in machine-readable form.",{"type":45,"tag":46,"format":10,"indent":11,"version":12,"direction":13,"children":721},[722],{"type":19,"text":723,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Dimension 4: Audit traceability",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":725},[726],{"type":19,"text":727,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Audit traceability is the question: if your ad account got flagged tomorrow, could you produce — within 24 hours — a complete record of every page every user saw, mapped to the ad they clicked?",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":729},[730],{"type":19,"text":731,"format":11,"detail":11,"mode":21,"style":10,"version":12},"For smart landing pages, this is a solved engineering problem:",{"type":347,"listType":733,"start":12,"tag":734,"format":10,"indent":11,"version":12,"direction":13,"children":735},"bullet","ul",[736,742,748,754],{"type":352,"value":12,"format":10,"indent":11,"version":12,"direction":13,"children":737},[738],{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":739},[740],{"type":19,"text":741,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Variant catalog is versioned (Git or a CMS with versioning).",{"type":352,"value":359,"format":10,"indent":11,"version":12,"direction":13,"children":743},[744],{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":745},[746],{"type":19,"text":747,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Each variant has an approval record (who approved, when, against which platform policy).",{"type":352,"value":38,"format":10,"indent":11,"version":12,"direction":13,"children":749},[750],{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":751},[752],{"type":19,"text":753,"format":11,"detail":11,"mode":21,"style":10,"version":12},"The decision log indexes by request_id, ad_id, and variant_id.",{"type":352,"value":376,"format":10,"indent":11,"version":12,"direction":13,"children":755},[756],{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":757},[758],{"type":19,"text":759,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Cross-joining the three gives you: \"ad X served variants A, B, C in proportions 40/35/25; here are the live URLs of each.\"",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":761},[762],{"type":19,"text":763,"format":11,"detail":11,"mode":21,"style":10,"version":12},"For cloaking, the audit is structurally impossible. The black page may not have a persistent URL — many cloaking systems template the offer page at request time precisely so nothing can be shown to a reviewer. The feature that makes cloaking \"work\" is the same feature that makes it unauditable.",{"type":179,"direction":180,"format":10,"indent":11,"version":12,"colWidths":765,"children":766},[182,182,182],[767,787,807,827,847,867],{"type":185,"direction":180,"format":10,"indent":11,"version":12,"children":768},[769,775,781],{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":12,"children":770},[771],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":772},[773],{"type":19,"text":774,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Audit question",{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":12,"children":776},[777],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":778},[779],{"type":19,"text":780,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Cloaking answer",{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":12,"children":782},[783],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":784},[785],{"type":19,"text":786,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Smart landing pages answer",{"type":185,"direction":180,"format":10,"indent":11,"version":12,"children":788},[789,795,801],{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":11,"children":790},[791],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":792},[793],{"type":19,"text":794,"format":11,"detail":11,"mode":21,"style":10,"version":12},"\"Show me every variant for this ad.\"",{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":11,"children":796},[797],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":798},[799],{"type":19,"text":800,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Can't, or won't",{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":11,"children":802},[803],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":804},[805],{"type":19,"text":806,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Pull from versioned catalog",{"type":185,"direction":180,"format":10,"indent":11,"version":12,"children":808},[809,815,821],{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":11,"children":810},[811],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":812},[813],{"type":19,"text":814,"format":11,"detail":11,"mode":21,"style":10,"version":12},"\"Who approved this variant?\"",{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":11,"children":816},[817],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":818},[819],{"type":19,"text":820,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Not tracked",{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":11,"children":822},[823],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":824},[825],{"type":19,"text":826,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Approval record in catalog",{"type":185,"direction":180,"format":10,"indent":11,"version":12,"children":828},[829,835,841],{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":11,"children":830},[831],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":832},[833],{"type":19,"text":834,"format":11,"detail":11,"mode":21,"style":10,"version":12},"\"What did user X see?\"",{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":11,"children":836},[837],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":838},[839],{"type":19,"text":840,"format":11,"detail":11,"mode":21,"style":10,"version":12},"No per-request log",{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":11,"children":842},[843],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":844},[845],{"type":19,"text":846,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Reconstruct from decision log",{"type":185,"direction":180,"format":10,"indent":11,"version":12,"children":848},[849,855,861],{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":11,"children":850},[851],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":852},[853],{"type":19,"text":854,"format":11,"detail":11,"mode":21,"style":10,"version":12},"\"Why did the system route this way?\"",{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":11,"children":856},[857],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":858},[859],{"type":19,"text":860,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Detection logic is sensitive",{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":11,"children":862},[863],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":864},[865],{"type":19,"text":866,"format":11,"detail":11,"mode":21,"style":10,"version":12},"rule_fired is explicit",{"type":185,"direction":180,"format":10,"indent":11,"version":12,"children":868},[869,875,881],{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":11,"children":870},[871],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":872},[873],{"type":19,"text":874,"format":11,"detail":11,"mode":21,"style":10,"version":12},"\"Prove no variant violates policy.\"",{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":11,"children":876},[877],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":878},[879],{"type":19,"text":880,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Definitionally fails",{"type":188,"direction":180,"format":10,"indent":11,"version":12,"backgroundColor":180,"colSpan":12,"rowSpan":12,"headerState":11,"children":882},[883],{"type":16,"direction":180,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":884},[885],{"type":19,"text":886,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Compliance tag per variant",{"type":45,"tag":46,"format":10,"indent":11,"version":12,"direction":13,"children":888},[889],{"type":19,"text":890,"format":11,"detail":11,"mode":21,"style":10,"version":12},"The four components every compliant-personalization system needs",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":892},[893],{"type":19,"text":894,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Whether you build in-house or buy a SaaS, a credible smart-landing-page stack has four components. Teams that skip any of these end up — usually by accident — drifting toward the cloaking pattern.",{"type":45,"tag":74,"format":10,"indent":11,"version":12,"direction":13,"children":896},[897],{"type":19,"text":898,"format":11,"detail":11,"mode":21,"style":10,"version":12},"1. Context parser",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":900},[901,903,905],{"type":19,"text":902,"format":11,"detail":11,"mode":21,"style":10,"version":12},"A request-time extractor that produces a structured context object: device, locale, attribution, fraud signals, returning-visitor state, and any consented first-party signals. Critically, ",{"type":19,"text":904,"format":12,"detail":11,"mode":21,"style":10,"version":12},"the parser should not consume bot-detection signals as a routing input",{"type":19,"text":906,"format":11,"detail":11,"mode":21,"style":10,"version":12},". Bot filtering belongs upstream, as a separate concern.",{"type":45,"tag":74,"format":10,"indent":11,"version":12,"direction":13,"children":908},[909],{"type":19,"text":910,"format":11,"detail":11,"mode":21,"style":10,"version":12},"2. Variant catalog",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":912},[913],{"type":19,"text":914,"format":11,"detail":11,"mode":21,"style":10,"version":12},"A versioned store of approved variants, each carrying an explicit compliance tag tied to the platforms it has been approved for. The catalog must support variant CRUD, version history, approval workflow, and a queryable index by context predicate (e.g., \"all variants approved for Meta + Brazil + checkout funnel\").",{"type":45,"tag":74,"format":10,"indent":11,"version":12,"direction":13,"children":916},[917],{"type":19,"text":918,"format":11,"detail":11,"mode":21,"style":10,"version":12},"3. Decision engine",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":920},[921],{"type":19,"text":922,"format":11,"detail":11,"mode":21,"style":10,"version":12},"A deterministic rules layer that, given a context object, returns a variant_id. Determinism matters: the same context must always return the same variant under a given rule set, so audits and A/B analyses are reproducible. Probabilistic routing is fine, but the random seed should be part of the context, not opaque.",{"type":45,"tag":74,"format":10,"indent":11,"version":12,"direction":13,"children":924},[925],{"type":19,"text":926,"format":11,"detail":11,"mode":21,"style":10,"version":12},"4. Audit log + replay",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":928},[929,931,933],{"type":19,"text":930,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Per-request emission of context + decision + variant_id, with retention that survives platform review cycles (typically 90+ days). The system should also support ",{"type":19,"text":932,"format":12,"detail":11,"mode":21,"style":10,"version":12},"decision replay",{"type":19,"text":934,"format":11,"detail":11,"mode":21,"style":10,"version":12},": feed a historical context back through the current ruleset and verify the same decision. Without replay, you cannot defend against \"you served me variant X\" claims.",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":936},[937,939,945],{"type":19,"text":938,"format":11,"detail":11,"mode":21,"style":10,"version":12},"These four components are not optional. They are the difference between a system you can disclose to a Meta or TikTok reviewer with confidence and one you cannot. ",{"type":33,"fields":940,"format":10,"indent":11,"version":38,"direction":13,"children":942},{"url":941,"newTab":36,"linkType":37},"/products/smart-landing-pages",[943],{"type":19,"text":944,"format":11,"detail":11,"mode":21,"style":10,"version":12},"DeepClick smart landing pages",{"type":19,"text":946,"format":11,"detail":11,"mode":21,"style":10,"version":12}," ships these four components as a SaaS, but the architectural pattern is the same whether you adopt the platform or build it yourself.",{"type":45,"tag":46,"format":10,"indent":11,"version":12,"direction":13,"children":948},[949],{"type":19,"text":950,"format":11,"detail":11,"mode":21,"style":10,"version":12},"When the line gets blurry (and how to stay on the right side of it)",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":952},[953],{"type":19,"text":954,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Three scenarios trip up well-meaning teams.",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":956},[957,959],{"type":19,"text":958,"format":12,"detail":11,"mode":21,"style":10,"version":12},"Geo-gating a checkout page.",{"type":19,"text":960,"format":11,"detail":11,"mode":21,"style":10,"version":12}," A team shows a \"we don't ship to your country\" page to ineligible geos and the real checkout to eligible ones. Cloaking or smart landing? Smart landing — as long as the \"we don't ship\" page is itself something you would happily show a reviewer, and as long as the eligible-geo page is the page the ad was approved against. The test is uniform compliance of every served variant.",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":962},[963,965],{"type":19,"text":964,"format":12,"detail":11,"mode":21,"style":10,"version":12},"Logged-in vs. anonymous users.",{"type":19,"text":966,"format":11,"detail":11,"mode":21,"style":10,"version":12}," A team shows a richer experience to logged-in users. Cloaking or smart landing? Smart landing — provided the anonymous experience is itself a complete, compliant offer page, not a \"decoy.\"",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":968},[969,971],{"type":19,"text":970,"format":12,"detail":11,"mode":21,"style":10,"version":12},"Reviewer-detected page suppression.",{"type":19,"text":972,"format":11,"detail":11,"mode":21,"style":10,"version":12}," A team suppresses a price-comparison module when the visitor looks like an ad reviewer, because that module sometimes triggers false-positive policy hits. Cloaking — full stop. The moment a code path activates based on \"looks like a reviewer,\" you are cloaking, even if both page versions would individually pass review. Defensibility breaks.",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":974},[975,977,983],{"type":19,"text":976,"format":11,"detail":11,"mode":21,"style":10,"version":12},"For when personalization or routing tips into the cloaking bucket regardless of intent, the ",{"type":33,"fields":978,"format":10,"indent":11,"version":38,"direction":13,"children":980},{"url":979,"newTab":36,"linkType":37},"/resources/blog/when-not-to-use-cloaking",[981],{"type":19,"text":982,"format":11,"detail":11,"mode":21,"style":10,"version":12},"when not to use cloaking",{"type":19,"text":984,"format":11,"detail":11,"mode":21,"style":10,"version":12}," breakdown is the companion read.",{"type":45,"tag":46,"format":10,"indent":11,"version":12,"direction":13,"children":986},[987],{"type":19,"text":988,"format":11,"detail":11,"mode":21,"style":10,"version":12},"FAQ",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":990},[991],{"type":19,"text":992,"format":12,"detail":11,"mode":21,"style":10,"version":12},"Q: Is A/B testing a form of cloaking?",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":994},[995],{"type":19,"text":996,"format":11,"detail":11,"mode":21,"style":10,"version":12},"No. A/B testing routes between compliant variants and is the textbook smart-landing-pages pattern. The only way an A/B test becomes cloaking is if one of the variants is a non-compliant page — at which point the framing as a \"test\" is irrelevant.",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":998},[999],{"type":19,"text":1000,"format":12,"detail":11,"mode":21,"style":10,"version":12},"Q: Can I geo-target without it being cloaking?",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":1002},[1003],{"type":19,"text":1004,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Yes, if every geo-specific variant would pass platform review on its own. The platforms expect geo personalization (currency, language, shipping copy). They sanction geo-based reviewer evasion.",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":1006},[1007],{"type":19,"text":1008,"format":12,"detail":11,"mode":21,"style":10,"version":12},"Q: Does serving different pages to bots and humans always count as cloaking?",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":1010},[1011],{"type":19,"text":1012,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Effectively yes for ad-platform policy purposes. Even bot-filtering for fraud reasons should be done as a security layer (block, rate-limit, challenge) rather than as content substitution. If your system serves a \"different\" page to bots, that page should be an error or block page, not an alternative experience.",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":1014},[1015],{"type":19,"text":1016,"format":12,"detail":11,"mode":21,"style":10,"version":12},"Q: Server-side vs client-side rendering — is one inherently cloaking?",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":1018},[1019,1021,1027],{"type":19,"text":1020,"format":11,"detail":11,"mode":21,"style":10,"version":12},"No. Rendering location is orthogonal to cloaking. A server-side smart landing page system is fine; a client-side cloaking script is still cloaking. The distinction lives at the policy layer. The ",{"type":33,"fields":1022,"format":10,"indent":11,"version":38,"direction":13,"children":1024},{"url":1023,"newTab":36,"linkType":37},"/resources/blog/server-side-vs-client-side-cloaking",[1025],{"type":19,"text":1026,"format":11,"detail":11,"mode":21,"style":10,"version":12},"server-side vs client-side cloaking",{"type":19,"text":1028,"format":11,"detail":11,"mode":21,"style":10,"version":12}," breakdown covers this in depth.",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":1030},[1031],{"type":19,"text":1032,"format":12,"detail":11,"mode":21,"style":10,"version":12},"Q: We use a CDN edge worker that picks pages by header. Are we cloaking?",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":1034},[1035],{"type":19,"text":1036,"format":11,"detail":11,"mode":21,"style":10,"version":12},"You're cloaking only if one of the picked pages would not pass review on its own. The edge worker is just the routing mechanism. Run each rendered page through the platform's review checklist independently — if all pass, you have a smart landing page system; if any fail, you have cloaking.",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":1038},[1039],{"type":19,"text":1040,"format":12,"detail":11,"mode":21,"style":10,"version":12},"Q: My ad platform flags personalized pages as cloaking even though every variant is compliant. What do I do?",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":1042},[1043],{"type":19,"text":1044,"format":11,"detail":11,"mode":21,"style":10,"version":12},"This is where decision logs and the variant catalog earn their keep. File an appeal with: (a) the full variant list the ad routes to, (b) the rule set, (c) decision-log samples showing routing was context-based, not reviewer-based. A documented system wins these appeals more often than people assume.",{"type":45,"tag":46,"format":10,"indent":11,"version":12,"direction":13,"children":1046},[1047],{"type":19,"text":1048,"format":11,"detail":11,"mode":21,"style":10,"version":12},"The takeaway",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":1050},[1051],{"type":19,"text":1052,"format":11,"detail":11,"mode":21,"style":10,"version":12},"The mechanical similarity between cloaking and smart landing pages misleads almost every team that thinks about them for the first time. The architectural similarity is real; the policy difference is total. Cloaking exists to hide one page from reviewers. Smart landing pages exist to match the right compliant page to the right real visitor.",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":1054},[1055],{"type":19,"text":1056,"format":11,"detail":11,"mode":21,"style":10,"version":12},"If the four components above — context parser, variant catalog, decision engine, audit log — are in place and every variant can be defended on its own merits, the team is doing personalization. If any component is missing, or any variant can't be defended, the team is doing cloaking, regardless of internal naming. The platforms care about the rendered pages and the decision rationale, not the marketing copy on the vendor's homepage.",{"id":1058,"alt":1059,"updatedAt":1060,"createdAt":1060,"url":1061,"thumbnailURL":180,"filename":1062,"mimeType":1063,"filesize":1064,"width":1065,"height":1066},301,"Cloaking vs smart landing pages architecture · 斗篷 vs 智能落地页架构对比","2026-06-10T02:41:52.111Z","https://cms-r2.deepclick.com/hero-cloaking-vs-smart-97bca18b85fc.png","hero-cloaking-vs-smart-97bca18b85fc.png","image/png",682629,1600,900,{"title":1068,"description":1069,"image":1070},"Cloaking vs Smart Landing Pages: Technical Comparison","Compare cloaking and smart landing pages across architecture, data flow, logs, and audit. The four components every compliant personalization system needs.",{"id":1058,"alt":1059,"updatedAt":1060,"createdAt":1060,"url":1061,"thumbnailURL":180,"filename":1062,"mimeType":1063,"filesize":1064,"width":1065,"height":1066},"published","cloaking-vs-smart-landing-pages",{"id":359,"name":1074,"avatar":1075,"updatedAt":1082,"createdAt":1083},"DeepClick",{"id":1076,"alt":1074,"updatedAt":1077,"createdAt":1077,"url":1078,"thumbnailURL":180,"filename":1079,"mimeType":1063,"filesize":1080,"width":1081,"height":1081},25,"2026-04-22T08:09:22.606Z","https://cms-r2.deepclick.com/头像-白.png","头像-白.png",26626,1024,"2026-04-22T08:09:35.299Z","2026-04-22T06:42:49.116Z",{"id":38,"titleZh":1085,"titleEn":1086,"slug":1087,"order":359,"updatedAt":1088,"createdAt":1088},"行业信息","Industry Info","industry-info","2026-04-22T03:32:29.529Z","2026-06-10T02:43:57.782Z","2026-06-10T02:44:07.210Z","2026-06-09T07:53:11.591Z","\u003Cdiv class=\"payload-richtext\">\u003Cp>The two phrases get bundled together in compliance reviews, ad-platform support threads, and engineering RFCs, and the conflation has cost teams real money. They share several primitives — server-side decisions, request-context parsing, multi-variant rendering — but diverge on one axis that matters to every ad platform: \u003Cstrong>what set of pages the system is allowed to route to.\u003C/strong>\u003C/p>\u003Cp>Cloaking routes between a compliant page and a non-compliant page based on who is asking. Smart landing pages route between several compliant variants based on what the visitor needs. Same plumbing, different policy. This article walks through that distinction architecturally — four lenses (system architecture, data flow, decision logging, audit traceability) — so engineering, growth, and legal teams stop arguing past each other.\u003C/p>\u003Cp>For policy and history, our \u003Ca href=\"/resources/blog/what-is-website-cloaking\">website cloaking\u003C/a> explainer covers the definitional ground. This piece is for teams that already understand the basics and need to design — or evaluate — a personalization system without tripping platform reviews.\u003C/p>\u003Ch2>The one-sentence definition that resolves 80% of confusion\u003C/h2>\u003Cblockquote>\u003Cp>Cloaking serves materially different content to bots versus real users, where at least one of the served pages would violate the ad platform&#39;s policies. Smart landing pages serve different variants to different real-user segments, where every variant complies with the same policies as the approved ad.\u003C/p>\u003C/blockquote>\u003Cp>Read that twice. The mechanical difference is &quot;bots vs. users.&quot; The legal difference is &quot;at least one variant is non-compliant.&quot; Most marketing teams that get banned were not banned for personalizing — they were banned because one of their variants was a page the platform would never have approved. The personalization machinery was incidental.\u003C/p>\u003Cp>This matters because vendors and consultants often pitch &quot;AI cloaking&quot; or &quot;smart cloak&quot; as if it were a sophisticated form of personalization. It is not. A smart cloak that hides a non-compliant page is still cloaking, and the more sophisticated the hiding, the harsher the eventual sanction.\u003C/p>\u003Ch2>Dimension 1: System architecture\u003C/h2>\u003Cp>Both systems look surprisingly alike on a whiteboard. Both have an inbound request, a context parser, a decision engine, and a rendering layer. The internals are where they diverge.\u003C/p>\u003Ch3>Cloaking architecture (the high-risk pattern)\u003C/h3>\u003Cp>```\u003C/p>\u003Cp>Request -&gt; Edge worker -&gt; Fingerprint check -&gt; Branch\u003C/p>\u003Cp>                                              |\u003C/p>\u003Cp>+-------------------+--------------------+\u003C/p>\u003Cp>                          |                                        |\u003C/p>\u003Cp>Suspected reviewer/bot              Real user (or &quot;approved&quot; geo)\u003C/p>\u003Cp>                          |                                        |\u003C/p>\u003Cp>Render WHITE PAGE                       Render BLACK PAGE\u003C/p>\u003Cp>(compliant, fake)                       (the real offer,\u003C/p>\u003Cp>often non-compliant)\u003C/p>\u003Cp>```\u003C/p>\u003Cp>The defining feature is the \u003Cstrong>binary fork between a &quot;white page&quot; and a &quot;black page.&quot;\u003C/strong> The white page exists to satisfy platform review. The black page is what the operator actually wants users to see. Detection logic typically inspects IP ASN, UA strings, header fingerprints, TLS JA3, behavioral signals, or referrer chains.\u003C/p>\u003Ch3>Smart landing page architecture (the compliant pattern)\u003C/h3>\u003Cp>```\u003C/p>\u003Cp>Request -&gt; Edge worker -&gt; Context parser -&gt; Decision engine -&gt; Variant catalog\u003C/p>\u003Cp>                                                                     |\u003C/p>\u003Cp>+-----------+-----------+-----+\u003C/p>\u003Cp>                                       |           |           |\u003C/p>\u003Cp>Variant A   Variant B    Variant C\u003C/p>\u003Cp>(compliant) (compliant)  (compliant)\u003C/p>\u003Cp>\\_________ all approvable ________/\u003C/p>\u003Cp>```\u003C/p>\u003Cp>Smart landing pages have \u003Cstrong>no white/black split.\u003C/strong> Every variant must pass the same compliance bar as the original approved ad. The decision engine routes by context — device, locale, traffic source, prior interaction, time of day, inventory — and selects from a pool that is, by construction, uniformly compliant.\u003C/p>\u003Ch3>Side-by-side architecture table\u003C/h3>\u003Cdiv class=\"lexical-table-container\">\n        \u003Ctable class=\"lexical-table\" style=\"border-collapse: collapse;\">\n          \u003Ctbody>\u003Ctr class=\"lexical-table-row\">\n        \u003Cth\n        class=\"lexical-table-cell lexical-table-cell-header-1\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>Component\u003C/p>\n      \u003C/th>\n    \u003Cth\n        class=\"lexical-table-cell lexical-table-cell-header-1\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>Cloaking\u003C/p>\n      \u003C/th>\n    \u003Cth\n        class=\"lexical-table-cell lexical-table-cell-header-1\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>Smart landing pages\u003C/p>\n      \u003C/th>\n    \n      \u003C/tr>\u003Ctr class=\"lexical-table-row\">\n        \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>Inbound parsing\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>Heavy bot/reviewer detection\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>Visitor context (device, locale, source)\u003C/p>\n      \u003C/td>\n    \n      \u003C/tr>\u003Ctr class=\"lexical-table-row\">\n        \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>Decision input\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>&quot;Is this a reviewer?&quot;\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>&quot;Which variant fits this visitor?&quot;\u003C/p>\n      \u003C/td>\n    \n      \u003C/tr>\u003Ctr class=\"lexical-table-row\">\n        \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>Page catalog\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>2 pages (white + black)\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>N variants, all approvable\u003C/p>\n      \u003C/td>\n    \n      \u003C/tr>\u003Ctr class=\"lexical-table-row\">\n        \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>Variant compliance bar\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>Asymmetric (white passes, black doesn&#39;t)\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>Uniform (all pass)\u003C/p>\n      \u003C/td>\n    \n      \u003C/tr>\u003Ctr class=\"lexical-table-row\">\n        \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>Failure mode\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>Bot detection misfires -&gt; reviewer sees black page -&gt; ban\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>Wrong variant served -&gt; lower conversion, no policy hit\u003C/p>\n      \u003C/td>\n    \n      \u003C/tr>\u003Ctr class=\"lexical-table-row\">\n        \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>Defensibility under review\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>None — system is the violation\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>Full — every variant can be shown to a reviewer\u003C/p>\n      \u003C/td>\n    \n      \u003C/tr>\u003C/tbody>\n        \u003C/table>\n      \u003C/div>\u003Cp>The last row is the punchline. A cloaking system \u003Cstrong>cannot\u003C/strong> defend itself in an ad-platform appeal — revealing how it works is admitting the violation. A smart landing page system can be fully disclosed to a reviewer; the disclosure is the defense.\u003C/p>\u003Ch2>Dimension 2: Data flow\u003C/h2>\u003Cp>Architecture diagrams are static. The real difference shows up at request time, in what data crosses which boundary.\u003C/p>\u003Ch3>Cloaking data flow\u003C/h3>\u003Col class=\"list-number\">\u003Cli\n          class=\"\"\n          style=\"\"\n          value=\"1\"\n        >\u003Cp>Request arrives at the edge.\u003C/p>\u003C/li>\u003Cli\n          class=\"\"\n          style=\"\"\n          value=\"2\"\n        >\u003Cp>Edge worker pulls IP, ASN, UA, headers, TLS fingerprint, cookies, referrer.\u003C/p>\u003C/li>\u003Cli\n          class=\"\"\n          style=\"\"\n          value=\"3\"\n        >\u003Cp>Fingerprint is \u003Cstrong>matched against a reviewer blocklist\u003C/strong> (often a third-party feed).\u003C/p>\u003C/li>\u003Cli\n          class=\"\"\n          style=\"\"\n          value=\"4\"\n        >\u003Cp>If matched: serve white page, log minimally.\u003C/p>\u003C/li>\u003Cli\n          class=\"\"\n          style=\"\"\n          value=\"5\"\n        >\u003Cp>If not matched: serve black page, log conversions to the operator&#39;s analytics.\u003C/p>\u003C/li>\u003C/ol>\u003Cp>The critical telemetry — the fingerprint match — is the thing the operator most wants to \u003Cstrong>not\u003C/strong> be logged where the platform can subpoena. Cloaking systems log defensively: short retention, no PII, often offshore storage.\u003C/p>\u003Ch3>Smart landing page data flow\u003C/h3>\u003Col class=\"list-number\">\u003Cli\n          class=\"\"\n          style=\"\"\n          value=\"1\"\n        >\u003Cp>Request arrives at the edge.\u003C/p>\u003C/li>\u003Cli\n          class=\"\"\n          style=\"\"\n          value=\"2\"\n        >\u003Cp>Edge worker extracts visitor context: device class, geo, language, traffic-source attribution, returning-visitor cookie, campaign UTM.\u003C/p>\u003C/li>\u003Cli\n          class=\"\"\n          style=\"\"\n          value=\"3\"\n        >\u003Cp>Decision engine queries the variant catalog with that context.\u003C/p>\u003C/li>\u003Cli\n          class=\"\"\n          style=\"\"\n          value=\"4\"\n        >\u003Cp>A variant is selected; the selection rule (e.g., &quot;device=mobile AND locale=pt-BR -&gt; variant_b&quot;) is \u003Cstrong>emitted to a decision log\u003C/strong>.\u003C/p>\u003C/li>\u003Cli\n          class=\"\"\n          style=\"\"\n          value=\"5\"\n        >\u003Cp>The variant renders; analytics tracks the full funnel keyed by variant_id.\u003C/p>\u003C/li>\u003C/ol>\u003Cp>Notice the inversion: cloaking wants to \u003Cstrong>forget\u003C/strong> how it routed each request; smart landing pages want to \u003Cstrong>remember\u003C/strong> how they routed each request. The decision log is a first-class artifact, used downstream for A/B analysis, optimization, and — critically — for ad-platform audit response.\u003C/p>\u003Ch3>Data-flow comparison table\u003C/h3>\u003Cdiv class=\"lexical-table-container\">\n        \u003Ctable class=\"lexical-table\" style=\"border-collapse: collapse;\">\n          \u003Ctbody>\u003Ctr class=\"lexical-table-row\">\n        \u003Cth\n        class=\"lexical-table-cell lexical-table-cell-header-1\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>Signal\u003C/p>\n      \u003C/th>\n    \u003Cth\n        class=\"lexical-table-cell lexical-table-cell-header-1\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>Cloaking uses it to...\u003C/p>\n      \u003C/th>\n    \u003Cth\n        class=\"lexical-table-cell lexical-table-cell-header-1\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>Smart landing pages use it to...\u003C/p>\n      \u003C/th>\n    \n      \u003C/tr>\u003Ctr class=\"lexical-table-row\">\n        \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>IP / ASN\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>Detect reviewer infrastructure\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>Route by geo, fraud-screen\u003C/p>\n      \u003C/td>\n    \n      \u003C/tr>\u003Ctr class=\"lexical-table-row\">\n        \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>User-Agent\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>Detect bots / reviewer tools\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>Device-class targeting\u003C/p>\n      \u003C/td>\n    \n      \u003C/tr>\u003Ctr class=\"lexical-table-row\">\n        \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>TLS fingerprint\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>Anti-detection arms race\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>Largely unused\u003C/p>\n      \u003C/td>\n    \n      \u003C/tr>\u003Ctr class=\"lexical-table-row\">\n        \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>Referrer\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>Detect platform crawlers\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>Attribute traffic source\u003C/p>\n      \u003C/td>\n    \n      \u003C/tr>\u003Ctr class=\"lexical-table-row\">\n        \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>Behavior signals\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>Distinguish humans from bots\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>Personalize messaging\u003C/p>\n      \u003C/td>\n    \n      \u003C/tr>\u003Ctr class=\"lexical-table-row\">\n        \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>Decision output\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>Discarded or short-retained\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>Persisted to decision log\u003C/p>\n      \u003C/td>\n    \n      \u003C/tr>\u003C/tbody>\n        \u003C/table>\n      \u003C/div>\u003Ch2>Dimension 3: Decision logging\u003C/h2>\u003Cp>This is where the boundary becomes legible to a reviewer, an auditor, or a regulator.\u003C/p>\u003Cp>A smart landing page system that does personalization correctly emits, for every request, a structured record roughly like:\u003C/p>\u003Cp>```json\u003C/p>\u003Cp>{\u003C/p>\u003Cp>&quot;request_id&quot;: &quot;req_2026_06_09_abc123&quot;,\u003C/p>\u003Cp>&quot;timestamp&quot;: &quot;2026-06-09T14:22:11Z&quot;,\u003C/p>\u003Cp>&quot;ad_id&quot;: &quot;fb_camp_4471_ad_22&quot;,\u003C/p>\u003Cp>&quot;context&quot;: {\u003C/p>\u003Cp>&quot;device_class&quot;: &quot;mobile&quot;,\u003C/p>\u003Cp>&quot;locale&quot;: &quot;es-MX&quot;,\u003C/p>\u003Cp>&quot;traffic_source&quot;: &quot;facebook_paid&quot;,\u003C/p>\u003Cp>&quot;returning_visitor&quot;: false\u003C/p>\u003Cp>},\u003C/p>\u003Cp>&quot;decision&quot;: {\u003C/p>\u003Cp>&quot;variant_id&quot;: &quot;lp_v3_es_mobile&quot;,\u003C/p>\u003Cp>&quot;rule_fired&quot;: &quot;device=mobile AND locale=es-* -&gt; v3_es_mobile&quot;,\u003C/p>\u003Cp>&quot;compliance_tag&quot;: &quot;approved_2026_05_18&quot;\u003C/p>\u003Cp>},\u003C/p>\u003Cp>&quot;rendered_url&quot;: &quot;/lp/checkout-es-mobile&quot;\u003C/p>\u003Cp>}\u003C/p>\u003Cp>```\u003C/p>\u003Cp>Three properties make this record audit-grade:\u003C/p>\u003Col class=\"list-number\">\u003Cli\n          class=\"\"\n          style=\"\"\n          value=\"1\"\n        >\u003Cp>\u003Cstrong>The variant_id maps to an approved artifact.\u003C/strong> The compliance team can pull \u003Ccode>lp_v3_es_mobile\u003C/code> out of a versioned catalog and show it to a reviewer.\u003C/p>\u003C/li>\u003Cli\n          class=\"\"\n          style=\"\"\n          value=\"2\"\n        >\u003Cp>\u003Cstrong>The rule_fired is human-readable.\u003C/strong> A reviewer doesn&#39;t have to reverse-engineer behavior; the routing rule is right there.\u003C/p>\u003C/li>\u003Cli\n          class=\"\"\n          style=\"\"\n          value=\"3\"\n        >\u003Cp>\u003Cstrong>The record is per-request, not aggregated.\u003C/strong> If a specific user complains about a specific page, the team can reconstruct what they saw.\u003C/p>\u003C/li>\u003C/ol>\u003Cp>A cloaking system has every reason not to emit this. Logging &quot;rule_fired: ua_contains_googlebot -&gt; white_page&quot; is documenting the offense in machine-readable form.\u003C/p>\u003Ch2>Dimension 4: Audit traceability\u003C/h2>\u003Cp>Audit traceability is the question: if your ad account got flagged tomorrow, could you produce — within 24 hours — a complete record of every page every user saw, mapped to the ad they clicked?\u003C/p>\u003Cp>For smart landing pages, this is a solved engineering problem:\u003C/p>\u003Cul class=\"list-bullet\">\u003Cli\n          class=\"\"\n          style=\"\"\n          value=\"1\"\n        >\u003Cp>Variant catalog is versioned (Git or a CMS with versioning).\u003C/p>\u003C/li>\u003Cli\n          class=\"\"\n          style=\"\"\n          value=\"2\"\n        >\u003Cp>Each variant has an approval record (who approved, when, against which platform policy).\u003C/p>\u003C/li>\u003Cli\n          class=\"\"\n          style=\"\"\n          value=\"3\"\n        >\u003Cp>The decision log indexes by request_id, ad_id, and variant_id.\u003C/p>\u003C/li>\u003Cli\n          class=\"\"\n          style=\"\"\n          value=\"4\"\n        >\u003Cp>Cross-joining the three gives you: &quot;ad X served variants A, B, C in proportions 40/35/25; here are the live URLs of each.&quot;\u003C/p>\u003C/li>\u003C/ul>\u003Cp>For cloaking, the audit is structurally impossible. The black page may not have a persistent URL — many cloaking systems template the offer page at request time precisely so nothing can be shown to a reviewer. The feature that makes cloaking &quot;work&quot; is the same feature that makes it unauditable.\u003C/p>\u003Cdiv class=\"lexical-table-container\">\n        \u003Ctable class=\"lexical-table\" style=\"border-collapse: collapse;\">\n          \u003Ctbody>\u003Ctr class=\"lexical-table-row\">\n        \u003Cth\n        class=\"lexical-table-cell lexical-table-cell-header-1\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>Audit question\u003C/p>\n      \u003C/th>\n    \u003Cth\n        class=\"lexical-table-cell lexical-table-cell-header-1\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>Cloaking answer\u003C/p>\n      \u003C/th>\n    \u003Cth\n        class=\"lexical-table-cell lexical-table-cell-header-1\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>Smart landing pages answer\u003C/p>\n      \u003C/th>\n    \n      \u003C/tr>\u003Ctr class=\"lexical-table-row\">\n        \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>&quot;Show me every variant for this ad.&quot;\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>Can&#39;t, or won&#39;t\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>Pull from versioned catalog\u003C/p>\n      \u003C/td>\n    \n      \u003C/tr>\u003Ctr class=\"lexical-table-row\">\n        \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>&quot;Who approved this variant?&quot;\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>Not tracked\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>Approval record in catalog\u003C/p>\n      \u003C/td>\n    \n      \u003C/tr>\u003Ctr class=\"lexical-table-row\">\n        \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>&quot;What did user X see?&quot;\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>No per-request log\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>Reconstruct from decision log\u003C/p>\n      \u003C/td>\n    \n      \u003C/tr>\u003Ctr class=\"lexical-table-row\">\n        \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>&quot;Why did the system route this way?&quot;\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>Detection logic is sensitive\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>rule_fired is explicit\u003C/p>\n      \u003C/td>\n    \n      \u003C/tr>\u003Ctr class=\"lexical-table-row\">\n        \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>&quot;Prove no variant violates policy.&quot;\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>Definitionally fails\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>Compliance tag per variant\u003C/p>\n      \u003C/td>\n    \n      \u003C/tr>\u003C/tbody>\n        \u003C/table>\n      \u003C/div>\u003Ch2>The four components every compliant-personalization system needs\u003C/h2>\u003Cp>Whether you build in-house or buy a SaaS, a credible smart-landing-page stack has four components. Teams that skip any of these end up — usually by accident — drifting toward the cloaking pattern.\u003C/p>\u003Ch3>1. Context parser\u003C/h3>\u003Cp>A request-time extractor that produces a structured context object: device, locale, attribution, fraud signals, returning-visitor state, and any consented first-party signals. Critically, \u003Cstrong>the parser should not consume bot-detection signals as a routing input\u003C/strong>. Bot filtering belongs upstream, as a separate concern.\u003C/p>\u003Ch3>2. Variant catalog\u003C/h3>\u003Cp>A versioned store of approved variants, each carrying an explicit compliance tag tied to the platforms it has been approved for. The catalog must support variant CRUD, version history, approval workflow, and a queryable index by context predicate (e.g., &quot;all variants approved for Meta + Brazil + checkout funnel&quot;).\u003C/p>\u003Ch3>3. Decision engine\u003C/h3>\u003Cp>A deterministic rules layer that, given a context object, returns a variant_id. Determinism matters: the same context must always return the same variant under a given rule set, so audits and A/B analyses are reproducible. Probabilistic routing is fine, but the random seed should be part of the context, not opaque.\u003C/p>\u003Ch3>4. Audit log + replay\u003C/h3>\u003Cp>Per-request emission of context + decision + variant_id, with retention that survives platform review cycles (typically 90+ days). The system should also support \u003Cstrong>decision replay\u003C/strong>: feed a historical context back through the current ruleset and verify the same decision. Without replay, you cannot defend against &quot;you served me variant X&quot; claims.\u003C/p>\u003Cp>These four components are not optional. They are the difference between a system you can disclose to a Meta or TikTok reviewer with confidence and one you cannot. \u003Ca href=\"/products/smart-landing-pages\">DeepClick smart landing pages\u003C/a> ships these four components as a SaaS, but the architectural pattern is the same whether you adopt the platform or build it yourself.\u003C/p>\u003Ch2>When the line gets blurry (and how to stay on the right side of it)\u003C/h2>\u003Cp>Three scenarios trip up well-meaning teams.\u003C/p>\u003Cp>\u003Cstrong>Geo-gating a checkout page.\u003C/strong> A team shows a &quot;we don&#39;t ship to your country&quot; page to ineligible geos and the real checkout to eligible ones. Cloaking or smart landing? Smart landing — as long as the &quot;we don&#39;t ship&quot; page is itself something you would happily show a reviewer, and as long as the eligible-geo page is the page the ad was approved against. The test is uniform compliance of every served variant.\u003C/p>\u003Cp>\u003Cstrong>Logged-in vs. anonymous users.\u003C/strong> A team shows a richer experience to logged-in users. Cloaking or smart landing? Smart landing — provided the anonymous experience is itself a complete, compliant offer page, not a &quot;decoy.&quot;\u003C/p>\u003Cp>\u003Cstrong>Reviewer-detected page suppression.\u003C/strong> A team suppresses a price-comparison module when the visitor looks like an ad reviewer, because that module sometimes triggers false-positive policy hits. Cloaking — full stop. The moment a code path activates based on &quot;looks like a reviewer,&quot; you are cloaking, even if both page versions would individually pass review. Defensibility breaks.\u003C/p>\u003Cp>For when personalization or routing tips into the cloaking bucket regardless of intent, the \u003Ca href=\"/resources/blog/when-not-to-use-cloaking\">when not to use cloaking\u003C/a> breakdown is the companion read.\u003C/p>\u003Ch2>FAQ\u003C/h2>\u003Cp>\u003Cstrong>Q: Is A/B testing a form of cloaking?\u003C/strong>\u003C/p>\u003Cp>No. A/B testing routes between compliant variants and is the textbook smart-landing-pages pattern. The only way an A/B test becomes cloaking is if one of the variants is a non-compliant page — at which point the framing as a &quot;test&quot; is irrelevant.\u003C/p>\u003Cp>\u003Cstrong>Q: Can I geo-target without it being cloaking?\u003C/strong>\u003C/p>\u003Cp>Yes, if every geo-specific variant would pass platform review on its own. The platforms expect geo personalization (currency, language, shipping copy). They sanction geo-based reviewer evasion.\u003C/p>\u003Cp>\u003Cstrong>Q: Does serving different pages to bots and humans always count as cloaking?\u003C/strong>\u003C/p>\u003Cp>Effectively yes for ad-platform policy purposes. Even bot-filtering for fraud reasons should be done as a security layer (block, rate-limit, challenge) rather than as content substitution. If your system serves a &quot;different&quot; page to bots, that page should be an error or block page, not an alternative experience.\u003C/p>\u003Cp>\u003Cstrong>Q: Server-side vs client-side rendering — is one inherently cloaking?\u003C/strong>\u003C/p>\u003Cp>No. Rendering location is orthogonal to cloaking. A server-side smart landing page system is fine; a client-side cloaking script is still cloaking. The distinction lives at the policy layer. The \u003Ca href=\"/resources/blog/server-side-vs-client-side-cloaking\">server-side vs client-side cloaking\u003C/a> breakdown covers this in depth.\u003C/p>\u003Cp>\u003Cstrong>Q: We use a CDN edge worker that picks pages by header. Are we cloaking?\u003C/strong>\u003C/p>\u003Cp>You&#39;re cloaking only if one of the picked pages would not pass review on its own. The edge worker is just the routing mechanism. Run each rendered page through the platform&#39;s review checklist independently — if all pass, you have a smart landing page system; if any fail, you have cloaking.\u003C/p>\u003Cp>\u003Cstrong>Q: My ad platform flags personalized pages as cloaking even though every variant is compliant. What do I do?\u003C/strong>\u003C/p>\u003Cp>This is where decision logs and the variant catalog earn their keep. File an appeal with: (a) the full variant list the ad routes to, (b) the rule set, (c) decision-log samples showing routing was context-based, not reviewer-based. A documented system wins these appeals more often than people assume.\u003C/p>\u003Ch2>The takeaway\u003C/h2>\u003Cp>The mechanical similarity between cloaking and smart landing pages misleads almost every team that thinks about them for the first time. The architectural similarity is real; the policy difference is total. Cloaking exists to hide one page from reviewers. Smart landing pages exist to match the right compliant page to the right real visitor.\u003C/p>\u003Cp>If the four components above — context parser, variant catalog, decision engine, audit log — are in place and every variant can be defended on its own merits, the team is doing personalization. If any component is missing, or any variant can&#39;t be defended, the team is doing cloaking, regardless of internal naming. The platforms care about the rendered pages and the decision rationale, not the marketing copy on the vendor&#39;s homepage.\u003C/p>\u003C/div>","https://deepclick.com/resources/blog/cloaking-vs-smart-landing-pages",{"en":1072},1781059724899]