Option 1: Reverse Proxy DNS
How does this solution work?
By using a reverse proxy, you force the traffic from your tracking server to pass through the DNS of your browsing website. The IPs of your browsing website server (example.com) and your tracking server (tagging.example.com) will no longer appear when cookies are set on the user’s browser = only the IP of your reverse proxy will be visible. Thus, when the browser checks the IP of your browsing server and the IP of your tracking server, these IPs will be exactly the same. The cookies set by your tracking server will therefore be considered first-party cookies, and their lifespan will be 13 months.

Below we are listing different providers. Reach out to your team internally to see if you are already one, that will help you select the best option to continue maintaining your cookies in the new version of Safari.
Provider Choice
Cloudflare
Reverse Proxy via Path (Recommended)
Once your reverse proxy setup is live, your tracking can lapse for a short moment until all changes are propagated, make sure to start things outside of business critical times.
Detailed setup
- Reserve a unique measurement path on your website domain for each domain on Addingwell you wish to apply a reverse proxy to. For website www.example.com, reserve for example: www.example.com/w3ke4d
Paths must not already be in use on your domain, not be the root path ”/”, and not exceed 100 characters. To avoid future ad blocks, avoid transparent paths like /metrics, /ads, etc… If you are setting up a reverse proxy on several domains, use the same path on each of them (a server-side GTM constraint).
-
Contact us at [email protected] mentioning the name of your container, the domain you are setting the reverse proxy on, the path chosen, and add the Object “Cloudflare Reverse Proxy Setup”.
We will return a value under the format example.adding-sst.com, keep it. It will be set up on our side and used as the destination endpoint for the reverse proxy configuration.
Use the exact host your visitors see in the address bar. If your site is served at https://www.example.com, keep the www.; if it is served at https://example.com, remove it. The measurement path has to be on the same origin as your pages, otherwise the browser treats the tracking requests as cross-origin and blocks them (CORS).
Pre-flight checks
- In the Cloudflare dashboard, select your domain and confirm that:
- The domain is proxied through Cloudflare (orange cloud on the DNS record for www.example.com)
- SSL/TLS → Overview is set to Full or Full (strict)
- Rules → Settings → URL normalization does not strip or sort query parameters (we require query parameters to be preserved unchanged)
Set up the reverse proxy with a Cloudflare Worker:
Create the Worker
The Worker intercepts requests matching your measurement path, strips the path prefix, sets the required headers, and forwards the request to the Addingwell destination.
- In the Cloudflare dashboard, go to Workers & Pages → Create → Create Worker. Give it a name such as
addingwell-reverse-proxyand click Deploy to create an empty Worker.
Workers may incur additional Cloudflare usage costs above the Free plan’s allowance. Check Cloudflare’s pricing page for current rates if your traffic exceeds the included quota.
- On the deployed Worker’s page, click Edit code and replace the file contents with:
export default {
async fetch(request) {
const url = new URL(request.url);
const originalHost = url.hostname;
// Strip the /w3ke4d prefix; the trailing /? makes /w3ke4d,
// /w3ke4d/ and /w3ke4d/anything all resolve correctly.
url.pathname = url.pathname.replace(/^\/w3ke4d\/?/, "/");
// Route the request to the Addingwell destination
const destination = "example.adding-sst.com";
url.hostname = destination;
// Forward the original host so Addingwell knows the first-party domain,
// and the real client IP so Addingwell can geolocate the end user
// (Cloudflare would otherwise hide it behind the edge IP).
const newRequest = new Request(url, request);
newRequest.headers.set("Host", destination);
newRequest.headers.set("x-forwarded-host", originalHost);
newRequest.headers.set("true-client-ip", request.headers.get("CF-Connecting-IP"));
return fetch(newRequest);
},
};- Click Deploy to publish the Worker.
Bind the Worker to your domain and path
-
Still on the Worker’s page, open Settings → Domains & Routes → Add → Route.
-
Set:
- Zone: the domain on which the reverse proxy will run, e.g. www.example.com
- Route: www.example.com/w3ke4d/* (replace with your website domain and the path you chose at Step 1)
-
Save. The Worker now intercepts every request matching that route.
Bypass caching for the measurement path
Tracking endpoints must not be cached.
-
Go to Caching → Cache Rules and click Create rule.
-
Set the rule Name to
Addingwell bypass cache. -
Under “If incoming requests match…”, select Custom filter expression and build:
- Field:
URI Path - Operator:
starts with - Value: /w3ke4d (replace with your chosen path)
- Field:
-
Under “Then…”, set Cache eligibility to
Bypass cache. -
Save and Deploy.
Are you using our ad-blocker bypass? You can add caching for its assets, see (Optional) Ad-blocker bypass below.
Verify the setup
Now that the initial setup is done, let’s test that everything is correct before sending it live.
-
Go to */your-path/healthy, the page should read: ok
https://www.example.com/w3ke4d/healthy
-
Go to */your-path/transformer/reverse-proxy, as
https://www.example.com/w3ke4d/transformer/reverse-proxy, the page must:- Display your IP in “currentIp”
- Display the current host in “host”
- If cookies are being passed they should not be changed
See for example this request:
curl --location 'https://www.example.com/w3ke4d/transformer/reverse-proxy' \ --header 'Cookie: gtm_preview=test123' \ --header 'Origin: https://www.example.com'Response should look like:
{ "currentIp": "X.X.X.X", "origin": "www.example.com", "host": "www.example.com", "cookieGtmPreview": "test123" }In host, the domain looking like example.adding-sst.com should not be displayed.

-
Go to the collect path below, to try and send “real” data, you should have a 200 response at minimum (depending on your configuration, some more elements might appear, like google ads remarketing).
https://www.example.com/w3ke4d/g/collect?tid=G-XXXXXXXX&v=2&en=page_view&richsstsse
Apply these changes and send your data via this path
Last but not least, now that the reverse proxy is configured, what is left to do is propagate these changes so data is sent through this newly created path.
Google Configuration Tag
To do so we will have to add or modify the server url in your GTM web container, to indicate the new destination for your data transporter tags.
Select your Google Configuration Tag, and edit the configuration settings, either adding or changing the server_container_url parameter to reflect the destination with your domain/your path, e.g. www.example.com/w3ke4d

Server Side Preview
In your GTM server container, should you need to do some tests before pushing changes, you will need to also edit the server url.
In Admin (top left), select Container Settings on the right and add a the URL to the server, under the format https://www.example.com/w3ke4d


(Optional) Ad-blocker bypass
If you are using or want to use our CDN to bypass ad-blockers, there is a snippet you can use to load all the components you need for tracking using URLs that are not detectable. See our related documentation for more information.
If you followed this guide for implementing a reverse proxy, the snippet must be edited to reflect the changes.
Normally in this CDN tab you can find a snippet that has a line looking like https://subdomain.example.com/a1b2c3d4e5f6g7h8.js... or https://subdomain.adding-sst.com/a1b2c3d4e5f6g7h8.js...

Replace the “subdomain.example.com” (or “subdomain.adding-sst.com”) by your domain and chosen path, like www.example.com/w3ke4d
This will ensure you load the gtm via the reverse proxy we just set up and bypass all the ad-blockers on the market.
Note on caching: if you use our ad-blocker bypass feature and want to reduce the associated CDN requests, consider adding a rule so static *.js assets are served from your provider’s cache. Careful: any caching must respect Addingwell’s cache-control headers and use a cache key that includes all query parameters, unmodified, so tracking queries are not affected. We recommend the cache duration to be somewhat short (10min - one hour), as affected assets include your web GTM container, an overly long cache will delay your web GTM changes going live.
For any questions, reach out to [email protected] we’re happy to assist!





