[{"data":1,"prerenderedAt":833},["ShallowReactive",2],{"navigation_docs":3,"-connectors-content-change-webhooks":168,"-connectors-content-change-webhooks-surround":828},[4,23,45,94,112,130,148],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":22},"Getting started","i-lucide-rocket","/getting-started","1.getting-started",[10,14,18],{"title":11,"path":12,"stem":13},"Introduction","/getting-started/introduction","1.getting-started/1.introduction",{"title":15,"path":16,"stem":17},"Quickstart","/getting-started/quickstart","1.getting-started/2.quickstart",{"title":19,"path":20,"stem":21},"Core concepts","/getting-started/concepts","1.getting-started/3.concepts",false,{"title":24,"icon":25,"path":26,"stem":27,"children":28,"page":22},"Tracking SDK","i-lucide-chart-line","/tracking-sdk","2.tracking-sdk",[29,33,37,41],{"title":30,"path":31,"stem":32},"Overview","/tracking-sdk/overview","2.tracking-sdk/1.overview",{"title":34,"path":35,"stem":36},"JavaScript SDK","/tracking-sdk/javascript","2.tracking-sdk/2.javascript",{"title":38,"path":39,"stem":40},"Events reference","/tracking-sdk/events","2.tracking-sdk/3.events",{"title":42,"path":43,"stem":44},"Event schema","/tracking-sdk/event-schema","2.tracking-sdk/4.event-schema",{"title":46,"icon":47,"path":48,"stem":49,"children":50,"page":22},"Connectors","i-lucide-plug","/connectors","3.connectors",[51,54,58,62,66,70,74,78,82,86,90],{"title":30,"path":52,"stem":53},"/connectors/overview","3.connectors/1.overview",{"title":55,"path":56,"stem":57},"Cloudflare AI crawlers","/connectors/cloudflare-ai-crawlers","3.connectors/10.cloudflare-ai-crawlers",{"title":59,"path":60,"stem":61},"Content change webhooks","/connectors/content-change-webhooks","3.connectors/11.content-change-webhooks",{"title":63,"path":64,"stem":65},"Google Ads","/connectors/google-ads","3.connectors/2.google-ads",{"title":67,"path":68,"stem":69},"Meta Ads","/connectors/meta-ads","3.connectors/3.meta-ads",{"title":71,"path":72,"stem":73},"TikTok Ads","/connectors/tiktok-ads","3.connectors/4.tiktok-ads",{"title":75,"path":76,"stem":77},"LinkedIn Ads","/connectors/linkedin-ads","3.connectors/5.linkedin-ads",{"title":79,"path":80,"stem":81},"Pinterest Ads","/connectors/pinterest-ads","3.connectors/6.pinterest-ads",{"title":83,"path":84,"stem":85},"Custom webhooks","/connectors/webhooks","3.connectors/7.webhooks",{"title":87,"path":88,"stem":89},"PrestaShop","/connectors/prestashop","3.connectors/8.prestashop",{"title":91,"path":92,"stem":93},"WooCommerce","/connectors/woocommerce","3.connectors/9.woocommerce",{"title":95,"icon":96,"path":97,"stem":98,"children":99,"page":22},"Attribution","i-lucide-git-fork","/attribution","4.attribution",[100,104,108],{"title":101,"path":102,"stem":103},"How attribution works","/attribution/overview","4.attribution/1.overview",{"title":105,"path":106,"stem":107},"Data-driven model","/attribution/data-driven","4.attribution/2.data-driven",{"title":109,"path":110,"stem":111},"Attribution windows","/attribution/windows","4.attribution/3.windows",{"title":113,"icon":114,"path":115,"stem":116,"children":117,"page":22},"Dashboard","i-lucide-layout-dashboard","/dashboard","5.dashboard",[118,122,126],{"title":119,"path":120,"stem":121},"Dashboard overview","/dashboard/overview","5.dashboard/1.overview",{"title":123,"path":124,"stem":125},"Metrics reference","/dashboard/metrics","5.dashboard/2.metrics",{"title":127,"path":128,"stem":129},"Alerts","/dashboard/alerts","5.dashboard/3.alerts",{"title":131,"icon":132,"path":133,"stem":134,"children":135,"page":22},"Lumen","i-lucide-shield-check","/lumen","6.lumen",[136,140,144],{"title":137,"path":138,"stem":139},"Lumen overview","/lumen/overview","6.lumen/1.overview",{"title":141,"path":142,"stem":143},"Setup","/lumen/setup","6.lumen/2.setup",{"title":145,"path":146,"stem":147},"Investigations","/lumen/investigations","6.lumen/3.investigations",{"title":149,"icon":150,"path":151,"stem":152,"children":153,"page":22},"MCP agent","i-lucide-bot","/mcp-agent","7.mcp-agent",[154,157,160,164],{"title":30,"path":155,"stem":156},"/mcp-agent/overview","7.mcp-agent/1.overview",{"title":15,"path":158,"stem":159},"/mcp-agent/quickstart","7.mcp-agent/2.quickstart",{"title":161,"path":162,"stem":163},"Tools reference","/mcp-agent/tools-reference","7.mcp-agent/3.tools-reference",{"title":165,"path":166,"stem":167},"SEO × GEO playbook","/mcp-agent/playbook-seo-geo","7.mcp-agent/4.playbook-seo-geo",{"id":169,"title":59,"body":170,"description":821,"extension":822,"links":823,"meta":824,"navigation":825,"path":60,"seo":826,"stem":61,"__hash__":827},"docs/3.connectors/11.content-change-webhooks.md",{"type":171,"value":172,"toc":807},"minimark",[173,177,180,185,209,212,215,220,256,259,267,286,294,297,300,303,314,335,341,448,454,465,468,496,499,502,526,537,539,543,546,598,614,617,620,624,627,631,684,687,691,772,776,803],[174,175,176],"p",{},"TrustData crawls your top pages and notices when they change. A webhook does better: it tells us the moment you publish, names the exact page, and dates the change precisely. That date is what the before/after comparison splits on, so a precise one is the difference between a verdict and a shrug.",[174,178,179],{},"Point your CMS at one URL and every publish becomes a measured change.",[181,182,184],"h2",{"id":183},"how-it-works","How it works",[186,187,192],"pre",{"className":188,"code":189,"language":190,"meta":191,"style":191},"language-mermaid shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","flowchart TD\n  A[\"You publish a page\"] --> B[\"CMS posts to TrustData\"] --> C[\"Change lands on the timeline\"] --> D[\"TrustData crawls the page and diffs it\"] --> E[\"21 days later: did clicks to that page move?\"]\n","mermaid","",[193,194,195,203],"code",{"__ignoreMap":191},[196,197,200],"span",{"class":198,"line":199},"line",1,[196,201,202],{},"flowchart TD\n",[196,204,206],{"class":198,"line":205},2,[196,207,208],{},"  A[\"You publish a page\"] --> B[\"CMS posts to TrustData\"] --> C[\"Change lands on the timeline\"] --> D[\"TrustData crawls the page and diffs it\"] --> E[\"21 days later: did clicks to that page move?\"]\n",[174,210,211],{},"TrustData compares the pages you changed against a matched group of your other pages over the same period. If organic clicks to your site rose everywhere, that is not a win for your rewrite, and the comparison says so.",[181,213,141],{"id":214},"setup",[216,217,219],"h3",{"id":218},"generate-a-content-webhook-key","Generate a content webhook key",[221,222,223,236,243,253],"ol",{},[224,225,226,227,231,232,235],"li",{},"Go to ",[228,229,230],"strong",{},"Settings"," → ",[228,233,234],{},"Attribution IDs"," → select your ID",[224,237,238,239,242],{},"Open the ",[228,240,241],{},"Webhooks"," tab",[224,244,245,246,249,250],{},"Under ",[228,247,248],{},"Content changes",", click ",[228,251,252],{},"Generate key",[224,254,255],{},"Copy the key immediately. TrustData shows it only once",[174,257,258],{},"Your webhook URL is:",[186,260,265],{"className":261,"code":263,"language":264},[262],"language-text","https://app.trustdata.tech/webhooks/content/{provider}/{key}/\n","text",[193,266,263],{"__ignoreMap":191},[174,268,269,270,273,274,277,278,281,282,285],{},"Where ",[193,271,272],{},"{provider}"," is ",[193,275,276],{},"wordpress",", ",[193,279,280],{},"webflow",", or ",[193,283,284],{},"contentful",".",[287,288,290,293],"alert",{"type":289},"warning",[228,291,292],{},"Treat the URL as a password."," Webflow and most CMS webhook senders cannot attach authentication headers, so the key travels in the URL itself. Anyone holding that URL can write changes to your timeline. Store it the way you store an API key, and rotate it if it leaks.",[174,295,296],{},"A content key can only report content changes on one website. It cannot read your data or send conversions, and a conversion key cannot report content changes. Revoking a key stops it immediately.",[298,299],"hr",{},[181,301,302],{"id":276},"WordPress",[174,304,305,306,313],{},"Any plugin that posts JSON on publish works. With ",[307,308,312],"a",{"href":309,"rel":310},"https://wordpress.org/plugins/wp-webhooks/",[311],"nofollow","WP Webhooks",":",[221,315,316,326,332],{},[224,317,318,231,320,231,323],{},[228,319,312],{},[228,321,322],{},"Send Data",[228,324,325],{},"Post updated",[224,327,328,329,331],{},"Add a webhook URL, paste your TrustData URL with ",[193,330,276],{}," as the provider",[224,333,334],{},"Save",[174,336,337,338,313],{},"Or add this to your theme's ",[193,339,340],{},"functions.php",[186,342,346],{"className":343,"code":344,"language":345,"meta":191,"style":191},"language-php shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","add_action('transition_post_status', function ($new, $old, $post) {\n    if ($new !== 'publish' || $post->post_type !== 'post') {\n        return;\n    }\n    wp_remote_post('https://app.trustdata.tech/webhooks/content/wordpress/YOUR_KEY/', [\n        'headers'  => ['Content-Type' => 'application/json'],\n        'blocking' => false,\n        'body'     => wp_json_encode([\n            'ID'                => $post->ID,\n            'post_title'        => $post->post_title,\n            'permalink'         => get_permalink($post),\n            'post_date'         => $post->post_date,\n            'post_modified'     => $post->post_modified,\n            'post_modified_gmt' => $post->post_modified_gmt,\n        ]),\n    ]);\n}, 10, 3);\n","php",[193,347,348,353,358,364,370,376,382,388,394,400,406,412,418,424,430,436,442],{"__ignoreMap":191},[196,349,350],{"class":198,"line":199},[196,351,352],{},"add_action('transition_post_status', function ($new, $old, $post) {\n",[196,354,355],{"class":198,"line":205},[196,356,357],{},"    if ($new !== 'publish' || $post->post_type !== 'post') {\n",[196,359,361],{"class":198,"line":360},3,[196,362,363],{},"        return;\n",[196,365,367],{"class":198,"line":366},4,[196,368,369],{},"    }\n",[196,371,373],{"class":198,"line":372},5,[196,374,375],{},"    wp_remote_post('https://app.trustdata.tech/webhooks/content/wordpress/YOUR_KEY/', [\n",[196,377,379],{"class":198,"line":378},6,[196,380,381],{},"        'headers'  => ['Content-Type' => 'application/json'],\n",[196,383,385],{"class":198,"line":384},7,[196,386,387],{},"        'blocking' => false,\n",[196,389,391],{"class":198,"line":390},8,[196,392,393],{},"        'body'     => wp_json_encode([\n",[196,395,397],{"class":198,"line":396},9,[196,398,399],{},"            'ID'                => $post->ID,\n",[196,401,403],{"class":198,"line":402},10,[196,404,405],{},"            'post_title'        => $post->post_title,\n",[196,407,409],{"class":198,"line":408},11,[196,410,411],{},"            'permalink'         => get_permalink($post),\n",[196,413,415],{"class":198,"line":414},12,[196,416,417],{},"            'post_date'         => $post->post_date,\n",[196,419,421],{"class":198,"line":420},13,[196,422,423],{},"            'post_modified'     => $post->post_modified,\n",[196,425,427],{"class":198,"line":426},14,[196,428,429],{},"            'post_modified_gmt' => $post->post_modified_gmt,\n",[196,431,433],{"class":198,"line":432},15,[196,434,435],{},"        ]),\n",[196,437,439],{"class":198,"line":438},16,[196,440,441],{},"    ]);\n",[196,443,445],{"class":198,"line":444},17,[196,446,447],{},"}, 10, 3);\n",[174,449,450,453],{},[193,451,452],{},"blocking => false"," matters: it stops the request from slowing down your editors' save.",[174,455,456,457,460,461,464],{},"TrustData reads a post whose ",[193,458,459],{},"post_date"," and ",[193,462,463],{},"post_modified"," match as a first publish, and anything later as a rewrite.",[181,466,467],{"id":280},"Webflow",[221,469,470,480,491],{},[224,471,472,231,475,231,478],{},[228,473,474],{},"Site settings",[228,476,477],{},"Integrations",[228,479,241],{},[224,481,482,483,486,487,490],{},"Add a webhook, trigger type ",[228,484,485],{},"Collection item changed"," (and ",[228,488,489],{},"Site publish"," if you edit static pages)",[224,492,493,494,331],{},"Paste your TrustData URL with ",[193,495,280],{},[174,497,498],{},"Webflow sends a slug rather than a full URL. TrustData resolves it against the website on your attribution ID, so make sure that field is filled in.",[181,500,501],{"id":284},"Contentful",[221,503,504,513,517],{},[224,505,506,231,508,231,510],{},[228,507,230],{},[228,509,241],{},[228,511,512],{},"Add webhook",[224,514,493,515,331],{},[193,516,284],{},[224,518,519,520,231,523],{},"Trigger on ",[228,521,522],{},"Entry",[228,524,525],{},"Publish",[174,527,528,529,532,533,536],{},"Contentful holds fields, not URLs — your site decides the path. If your content model has a ",[193,530,531],{},"url"," or ",[193,534,535],{},"slug"," field, TrustData uses it and can measure the change. Without one, the change still lands on your timeline as an annotation, which explains a traffic movement but carries no verdict.",[298,538],{},[181,540,542],{"id":541},"what-you-get-back","What you get back",[174,544,545],{},"Each webhook creates one change on your timeline:",[547,548,549,562],"table",{},[550,551,552],"thead",{},[553,554,555,559],"tr",{},[556,557,558],"th",{},"Field",[556,560,561],{},"Where it comes from",[563,564,565,574,582,590],"tbody",{},[553,566,567,571],{},[568,569,570],"td",{},"Date",[568,572,573],{},"The publish timestamp in the payload",[553,575,576,579],{},[568,577,578],{},"Page",[568,580,581],{},"The permalink, or the slug resolved against your site",[553,583,584,587],{},[568,585,586],{},"Type",[568,588,589],{},"First publish or rewrite",[553,591,592,595],{},[568,593,594],{},"What changed",[568,596,597],{},"TrustData crawls the page and diffs it against the last version",[174,599,600,601,277,604,277,607,281,610,613],{},"After 21 days TrustData publishes a verdict: ",[228,602,603],{},"winner",[228,605,606],{},"regressed",[228,608,609],{},"no effect",[228,611,612],{},"inconclusive",". Until then the change shows how many days of its window have passed.",[174,615,616],{},"A verdict compares the pages you changed against a matched group of pages you did not. One page on its own is one observation, however many days it runs, so a single-page change reports its measured movement without a verdict. Change several pages in a batch and the comparison has enough to conclude.",[174,618,619],{},"Nothing is published before Google has re-indexed and re-served the page. A page that drew no impressions after the change is reported as such rather than scored as a flat result.",[181,621,623],{"id":622},"redelivery","Redelivery",[174,625,626],{},"Webhook senders retry. TrustData keys each change on an id from your CMS — the post revision, the Webflow publish time, the Contentful revision number — so a retry returns the change that already exists instead of creating a second one. Two changes on one edit would split it across two measurements and both would come back inconclusive.",[181,628,630],{"id":629},"limits","Limits",[547,632,633,646],{},[550,634,635],{},[553,636,637,640,643],{},[556,638,639],{},"Limit",[556,641,642],{},"Value",[556,644,645],{},"What happens past it",[563,647,648,662,673],{},[553,649,650,653,656],{},[568,651,652],{},"Requests per key",[568,654,655],{},"60/minute",[568,657,658,661],{},[193,659,660],{},"429",", retry after 60 seconds",[553,663,664,667,670],{},[568,665,666],{},"Crawls per organization",[568,668,669],{},"200/day",[568,671,672],{},"The change is still recorded. The page picks up its diff on the weekly crawl instead",[553,674,675,678,681],{},[568,676,677],{},"Repeat saves of one page",[568,679,680],{},"One crawl per 10 minutes",[568,682,683],{},"Every save is recorded; they share one crawl",[174,685,686],{},"Saving four times while you finish an edit is one edit. TrustData records each save and crawls once, so the diff you see is the finished page rather than three snapshots of unfinished work.",[181,688,690],{"id":689},"responses","Responses",[547,692,693,703],{},[550,694,695],{},[553,696,697,700],{},[556,698,699],{},"Status",[556,701,702],{},"Meaning",[563,704,705,719,731,743,753,763],{},[553,706,707,716],{},[568,708,709,712,713],{},[193,710,711],{},"200"," ",[193,714,715],{},"{\"created\": true}",[568,717,718],{},"Change recorded",[553,720,721,728],{},[568,722,723,712,725],{},[193,724,711],{},[193,726,727],{},"{\"created\": false}",[568,729,730],{},"A redelivery of a change already recorded",[553,732,733,740],{},[568,734,735,712,737],{},[193,736,711],{},[193,738,739],{},"{\"status\": \"ignored\"}",[568,741,742],{},"The payload could not be mapped to a page. Check the fields your CMS sends",[553,744,745,750],{},[568,746,747],{},[193,748,749],{},"400",[568,751,752],{},"The body was not valid JSON",[553,754,755,760],{},[568,756,757],{},[193,758,759],{},"404",[568,761,762],{},"Unknown, revoked, or expired key, or an unsupported provider",[553,764,765,769],{},[568,766,767],{},[193,768,660],{},[568,770,771],{},"Over the rate limit",[181,773,775],{"id":774},"other-cmss","Other CMSs",[174,777,778,779,784,785,277,788,277,791,794,795,798,799,802],{},"Anything that can POST on publish can report changes through the ",[307,780,783],{"href":781,"rel":782},"https://docs.trustdata.tech/",[311],"change events API"," directly. Send ",[193,786,787],{},"event_type",[193,789,790],{},"changed_at",[193,792,793],{},"title",", the page URL, and a stable ",[193,796,797],{},"external_id"," from your system. AI agents can report changes the same way through the ",[193,800,801],{},"create_change_event"," MCP tool.",[804,805,806],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":191,"searchDepth":205,"depth":205,"links":808},[809,810,813,814,815,816,817,818,819,820],{"id":183,"depth":205,"text":184},{"id":214,"depth":205,"text":141,"children":811},[812],{"id":218,"depth":360,"text":219},{"id":276,"depth":205,"text":302},{"id":280,"depth":205,"text":467},{"id":284,"depth":205,"text":501},{"id":541,"depth":205,"text":542},{"id":622,"depth":205,"text":623},{"id":629,"depth":205,"text":630},{"id":689,"depth":205,"text":690},{"id":774,"depth":205,"text":775},"Tell TrustData when you publish a page, so it can measure what the change did.","md",null,{},true,{"title":59,"description":821},"Hwyz8R7BzY85T8tvpdVzzYDrhDEKi1ldic3et_dfL-s",[829,831],{"title":55,"path":56,"stem":57,"description":830,"children":-1},"Capture AI-bot visits and AI-engine referrals at the Cloudflare edge, traffic the browser SDK can't see.",{"title":63,"path":64,"stem":65,"description":832,"children":-1},"Connect Google Ads and add tracking parameters.",1786631574647]