- The page is served from the plain URL’s cached copy.
- The page gets a cached copy of its own, one per distinct value.
- The page is rendered fresh for every request.
The three groups
Ignored
Fluid does not recognize the parameter. It is removed, and the visitor gets
the plain URL’s cached page.
Cached separately
The parameter changes the page in a known, limited way, so it earns a cached
copy of its own.
Not cached
The parameter can change the page in ways that cannot be cached safely. Every
request renders fresh.
Ignored parameters
Any parameter Fluid does not recognize is ignored. Marketing tags are the common case:/home/shop.
Visitor tracking is unaffected. Attribution is reported from the browser with the
URL the visitor actually has, so campaign tags still reach your analytics.
Check a parameter your theme reads
If your Liquid reads a parameter — throughrequest.query_parameters or
params — check whether it reaches your template. Request the URL and read one
header:
If you land in the third row and your template needs the value, move the logic
to your front-end code, which still sees the parameter in the browser URL.
Parameters cached separately
Each distinct value gets its own cached copy of the page.filterrific[sorted_by] is cached for title, sku, cv, price,
wholesale_price, commission, commission_amount, created_at, views, id,
priority, and archived_last, each also with an _asc or _desc suffix, and
for popular and rating. A sort value your theme offers outside this list still
works; the page just renders fresh.
A filtered grid is cached per combination, so the first visitor to a facet waits
for a render and everyone after them does not:
The shop filter parameters are cached only on
/shop, and filterrific[sorted_by]
only on /shop and /join. On any other page they do not change the product
grid, so Fluid does not cache them there — those requests render fresh instead.count, page, and per_page are cached everywhere, because a paginated
section can appear on any template.Parameters that are not cached
These reach the origin on every request, and nothing is written to the cache.share_token is the exception on MySite pages (/my/...). Those pages are already cached per rep, so it is ignored there.
Any filterrific filter not in the cached table is also uncached.
One of these parameters is enough: a URL that carries it renders fresh even when
its other parameters are cacheable.
Signed-in members
A visitor signed in as a member always gets a fresh render, whatever the query string. Fluid doesn’t read the cache for them and doesn’t write their page to it, so one member’s page never reaches another visitor. Anonymous visitors are unaffected. When you test caching, use a private window. If you’re signed in to the storefront as a member, every request answersSKIP, or MISS-PERSONALIZED
when the page was rendered for you.
A template that prints {{ external_id }} or {{ sharing_id }} on a shared
page gets the same treatment: those values name the visiting rep, so the page
answers MISS-PERSONALIZED and is never cached. Hydrate rep details in the
browser instead. See Affiliate hydration.
Check what a URL does
Every storefront response carries a header naming the outcome:MISS and then HIT. A URL
that answers SKIP both times is never cached.
Writing links that stay cached
- Prefer a path over a parameter.
/home/categories/serumsis cached; a filter parameter that reproduces it is cached separately. - Keep marketing tags. They cost nothing — they are ignored and the visitor gets the cached page.
- Put your own state in a parameter only when your front-end code reads it. Liquid will not see it.
- Keep language and country out of storefront links.