Quick answer: If an affiliate link opens correctly but reports zero clicks, test the full redirect path before blaming traffic quality. The most common technical cause is a cache or redirect rule serving a version of the URL without the tracking query string, so the visitor lands while the click ID never reaches the tracker.
You click the link and it works. The landing page loads, the offer looks live, and nothing appears broken from a visitor’s point of view. Then you open the reporting dashboard and the click count is still zero.
That mismatch is exactly what makes cached redirects hard to diagnose. The browser proves that the destination is reachable. It does not prove that the tracking parameter survived every cache layer, redirect rule, and plugin handoff between the first URL and the final offer page.
For WordPress publishers, the failure usually sits in one of four places: page cache, CDN cache, a redirect chain, or a plugin-level redirect cache. Work through them in order. Guessing from the final URL wastes time because the final URL may already be too late in the chain.
Start With The Symptom, Not The Tool
The symptom is simple: the affiliate URL loads for a human, but the tracking platform records no click. In a healthy redirect, the first request should include the tracking parameter, the intermediate redirects should preserve it, and the final tracking endpoint should receive the click ID or sub ID exactly as issued.
When the dashboard remains empty, do not start by clearing every cache on the site. First prove whether the query string is present at each step. Use a private window, disable extensions that rewrite URLs, and run a header check from the command line:
curl -I -L "https://example.com/go/offer/?click_id=test123&subid=cache-check"
Look at every Location header in the chain. If a redirect starts with ?click_id=test123 and the next hop does not, you have found the break. If the parameter survives all redirects but the tracker is still empty, move to the tracking-platform section below before editing your cache stack.
Diagnostic Ladder For Cached Redirect Problems
| Layer | What Breaks | How To Test | Fix |
|---|---|---|---|
| Page cache | A cached variant of the redirect page ignores or strips query strings. | Compare headers for the clean URL and the same URL with a fake click parameter. | Exclude redirect URLs from page cache, or cache only when the required parameter is part of the cache key. |
| Cloudflare | A cache rule treats different query values as the same object. | Check whether Cloudflare cache settings include, exclude, or ignore query strings. | Use a cache key that preserves required click parameters, or bypass cache for redirect endpoints. |
| 301 chain | One hop rebuilds the destination without appending the original query string. | Follow redirects with curl -I -L and inspect each Location. | Shorten the chain and update the rule so it forwards $args or the equivalent query component. |
| Redirect plugin | The plugin caches a resolved destination and reuses it across parameterized requests. | Test with plugin cache disabled or with a unique parameter value on each request. | Disable caching for tracking redirects, purge plugin cache, and use explicit parameter pass-through rules. |
1. Page Cache Serving A Query-String-Stripped Variant
Most WordPress cache plugins are built to serve the same HTML quickly to many visitors. That is good for articles and landing pages. It is dangerous for redirect endpoints when the query string contains the identity of the click.
WP Rocket’s documentation explains that pages with query strings are usually not cached by default, but it also lists exceptions and settings for dedicated query-string caching. It notes that certain parameters can be ignored and the standard cached file can be served instead from the clean URL. That is useful for common analytics parameters, but it is risky when the parameter is the click identifier.
Test by requesting the same redirect endpoint with two different fake values:
curl -I "https://example.com/go/product/?click_id=alpha"
curl -I "https://example.com/go/product/?click_id=bravo"
If both requests return the same cache status and the same redirect destination without the parameter, your cache layer is treating the click ID as disposable. The fix is not a broad purge. Add a precise exclusion for redirect paths such as /go/, /recommend/, or whatever slug pattern your affiliate redirects use.
If you intentionally cache redirects, the cache must vary by the tracking parameter. WP Rocket’s query-string caching documentation is the reference to check before deciding whether a parameter should be ignored, cached separately, or bypassed entirely.
2. Cloudflare Cache Rules Ignoring The Parameter
Cloudflare can cache based on a cache key. A default cache key includes the URL with its query string, but custom cache rules can change that behavior. Cloudflare’s cache key documentation describes how query-string settings can include, exclude, or ignore parameters.
The dangerous setting is not “Cloudflare is on.” The dangerous setting is a rule that makes /go/tool/?click_id=abc and /go/tool/?click_id=xyz equivalent for caching purposes. If the edge serves the first resolved response to later visitors, the tracker never sees each visitor’s unique click value.
Use Cloudflare Trace or response headers to determine which rule applies to the redirect URL. Then test a unique fake parameter from an uncached browser and from the command line. If Cloudflare is returning a cache hit for a URL that must be unique per visitor, bypass caching for that path.
A good rule of thumb: cache the article that contains the affiliate link, but do not cache the redirect endpoint that transforms a visitor-specific click into a tracking request.
3. A 301 Chain Dropping The Query String
Redirect chains are quiet click killers. One old slug redirects to a new slug, which redirects from HTTP to HTTPS, which redirects from non-www to www, which finally redirects to the affiliate destination. Every hop is a chance to lose ?click_id=, ?subid=, ?aff_sub=, or another required parameter.
Check the chain without relying on the browser address bar:
curl -s -D - -o /dev/null -L "https://example.com/old-go-url/?click_id=trace123"
Find the first Location header where trace123 disappears. That rule is the problem. In nginx, the difference between using only $uri and preserving $request_uri or $args can decide whether parameters survive. The nginx fastcgi_cache_key reference is also worth checking when FastCGI cache behavior depends on whether the key includes the full request URI or only the normalized path.
For WordPress-managed redirects, review the plugin rule itself. A destination typed as a fixed URL usually does not append the original query string unless the plugin has an explicit setting for query preservation. Do not assume a 301 carries everything forward.
4. Plugin-Level Redirect Caching
Affiliate-link plugins, link cloakers, SEO redirect managers, and performance plugins may all touch the same request. Some cache the resolved destination to save a database lookup. Others normalize URLs before matching. A few treat query strings as noise unless you configure pass-through behavior.
Temporarily test one redirect path with plugin-level caching disabled. If clicks start appearing with the same URL and same tracker, the platform was not the issue. Your WordPress layer was serving a cached decision instead of processing each request.
Keep the fix narrow. Exclude only the redirect path or the affected parameter. Do not disable your entire performance stack across the site unless the redirect system is tangled beyond repair. The goal is to protect visitor-specific tracking values while leaving normal page caching intact.
Ruling Out The Tracking Platform Side
Before you tear apart your cache config, rule out the obvious: the problem may not be on your server at all. Tracking vendors document this same symptom from their side of the redirect; Scaleo’s walkthrough of a dashboard showing zero clicks covers the platform-side causes, including a misconfigured postback, the wrong click ID parameter, or an offer that is not live. If none of those apply, the query string is being lost in transit, and everything below is your problem to fix.
This order matters because server-side fixes can mask a platform-side setup mistake. If the offer is paused, the click ID parameter name is wrong, or the postback is not mapped to the right offer, cache changes will not create valid reporting. They will only create more variables.
Use this three-part split:
- Tracker logs no click at all: the click request probably never reached the platform, or the wrong endpoint/parameter was used.
- Tracker logs a click but no conversion: inspect postback, pixel, advertiser-side conversion firing, and click ID mapping.
- Tracker logs test clicks but not production clicks: compare the live cached route, CDN rules, and redirect chain against the test route.
What A Clean Fix Looks Like
A clean fix preserves the query string from first click to tracking endpoint, removes unnecessary redirect hops, and keeps cache rules explicit. It does not depend on “purge everything” as a permanent operating procedure.
For WordPress sites, that usually means:
- Exclude affiliate redirect paths from page cache.
- Bypass Cloudflare cache for redirect endpoints, or include the required tracking parameter in the cache key where your plan and rule set support it.
- Replace multi-hop 301 chains with one direct rule.
- Confirm the redirect plugin preserves query strings.
- Retest with a unique fake click ID after each change.
Then verify in the tracking platform with a controlled click. Use one test click ID, one browser session, and one timestamp. If you make five cache changes and then fire ten clicks from three browsers, you will not know which layer actually fixed the problem.
Quick Testing Checklist
- Open the affiliate URL in a private window and confirm the landing page loads.
- Run
curl -I -Lwith a fake unique click parameter. - Check every
Locationheader for the same parameter value. - Compare cached and uncached responses for the same redirect path.
- Review Cloudflare cache key/query-string behavior for that path.
- Review WP Rocket or other page-cache settings for query-string handling.
- Disable redirect-plugin caching only for the affected path and retest.
- Check the tracking platform’s click, invalid click, and offer-status logs.
FAQs
Can an affiliate link work and still record zero clicks?
Yes. A browser can reach the final landing page even when the tracking parameter was stripped from the first or second redirect. The user sees a working page, but the tracker never receives the unique click value.
Should affiliate redirects be cached?
Usually no. The article page can be cached, but the redirect endpoint should process each visitor-specific request. If you cache it, make sure the required tracking parameters are part of the cache decision.
Does clearing cache fix zero-click reporting?
It can make a test click work temporarily, but it does not fix the rule that caused the parameter loss. A permanent fix changes the cache key, bypass rule, redirect rule, or plugin setting that dropped the query string.
What is the first technical test?
Run a header trace with a fake unique query parameter and inspect every redirect hop. The first hop where the parameter disappears is where you should focus.