PerfLocale for Publishers

Run a news site, magazine, or blog in multiple languages — with plugin overhead kept to, and without confusing Google about which version to rank.

The tradeoffs publishers usually get stuck with

Content-heavy sites suffer most from multilingual plugin overhead: thousands of posts, high traffic, tight caching requirements. Many plugins add database queries on every archive load, break pagination in unexpected ways, or fight with your CDN. Editorial teams end up avoiding features just to keep the site fast.

PerfLocale is built to stay out of the way. Features below come from actual publisher pain points.

What you get

Fast archives and category pages

Listing 20 posts per page on a category archive should be one database query, not twenty. PerfLocale batch-loads translations so the number of queries stays constant whether you display 5 posts or 50. Your main news feed feels just as snappy in French as in English.

Search engines understand your language structure

Every page gets the right hreflang tags, sitemap alternates, and canonical URLs. Google shows French readers your French version in search results, not the English one auto-translated by the browser. Works with Yoast, Rank Math, AIOSEO, SEOPress, and others - your existing SEO setup keeps its say.

Stories flow naturally from draft to published in each language

Each language version has its own publish date, author, and editorial state. Write the English story today, publish the French version tomorrow after the desk reviews it - without confusing the archive, the RSS feed, or the sitemap.

Plays well with CDNs and page caches

Cache-Tag headers let Cloudflare, Bunny, Fastly, and KeyCDN purge exactly the pages that changed when you translate or re-edit a story - not the whole site. If one language's homepage needs invalidating, the other stays hot in cache.

The furniture around the story is translated once

News desks repeat the same short phrases everywhere: "File photo", "Story developing", the newsletter box, the paywall notice. Most of those live in your theme or a plugin rather than in the post body, so the string scanner collects them into one catalogue you translate once and reuse across the whole archive — served from compiled .l10n.php files or the database, whichever you prefer (PO files are supported for import/export).

Serve the right language based on visitor location

An optional redirect puts first-time visitors on the version most likely to match them — from their browser language out of the box, or from their country if you wire up a lookup. PerfLocale bundles no GeoIP service and contacts none: country detection stays dark until you return a code from perflocale/geo/lookup_country (a CDN header, a local MaxMind database, whatever you already run). Either way the visitor’s own choice is remembered in a cookie afterwards, so they aren’t bounced around on every reload. Opt-in and GDPR-respectful.

Numbers that matter

PerfLocale’s own code stays a small fraction of total page time —, next to theme and hosting — with 3-layer caching so most operations never touch your database on a warm cache. Sites over roughly 2,000 translation links should run a persistent object cache to stay in that range.

For a publisher running half a million monthly pageviews, this is the difference between "we need to upgrade the server to add Spanish" and "we added Spanish last Thursday and nobody noticed".