Availability: Taking on new projects

2 min read

Your translated pages are serving yesterday’s prices

A translation proxy caches your page before it translates it. Anything that changes between visits is frozen in the translated copy, and the usual fixes do nothing.

Proxy-based translation services work by fetching your page, translating it, and serving their copy. The step everybody forgets is the fetching: they keep that copy, and they will keep serving from it long after your original changed.

How it shows up

The English site is correct. The translated site shows a price from last week, a stock status that is no longer true, or a countdown that finished days ago. Clearing your own cache changes nothing, because the stale copy is not on your infrastructure.

Why the obvious fix fails

The usual advice is to wrap the dynamic value in markup that tells the translator to leave it alone. That controls whether the text gets translated. It does nothing about whether the surrounding page was cached, because the value was already frozen at the moment the copy was taken. You are protecting the wrong thing.

What actually works

Tell the translation layer not to keep the page. Send cache-control headers marking the response as uncacheable, and do it only on the page types where content genuinely changes between requests — cart, checkout, account, anything with live stock or a countdown. These services respect those headers and will fetch a fresh copy of the origin instead of reusing one.

Two things will undo this. A rule at your CDN that caches everything regardless of origin headers will override it, so those page types need an explicit bypass there too. And applying it site-wide instead of per page type throws away the caching that makes the translated site fast in the first place, which is a bad trade for a problem that affects a handful of templates.

One more failure mode from the same layer

These services route through regional edge nodes, and your domain generally maps to one of them. If that node stops responding and the code fetching it has no connection timeout set, each request holds a worker process open indefinitely. A translation outage then presents as your whole site hanging, which sends everyone looking in the wrong place. Set explicit connect and total timeouts on any outbound request made during page rendering, without exception.

Describe the symptom. I will tell you what it usually means.

Every enquiry gets a reply within one working day.