Title: Proxylang: AI Translation &amp; Multilingual SEO
Author: proxylang
Published: <strong>June 8, 2026</strong>
Last modified: June 8, 2026

---

Search plugins

![](https://ps.w.org/proxylang/assets/banner-772x250.png?rev=3564119)

![](https://ps.w.org/proxylang/assets/icon-256x256.png?rev=3564119)

# Proxylang: AI Translation & Multilingual SEO

 By [proxylang](https://profiles.wordpress.org/proxylang/)

[Download](https://downloads.wordpress.org/plugin/proxylang.1.4.4.zip)

 * [Details](https://wordpress.org/plugins/proxylang/#description)
 * [Reviews](https://wordpress.org/plugins/proxylang/#reviews)
 *  [Installation](https://wordpress.org/plugins/proxylang/#installation)
 * [Development](https://wordpress.org/plugins/proxylang/#developers)

 [Support](https://wordpress.org/support/plugin/proxylang/)

## Description

**Instant website translation and SEO to grow your global traffic. Get lang prefixes,
hreflang tags, and automated sitemaps for Google. No complex DNS setup needed. Launch
your multilingual store or site in 60 seconds.**

#### Why Proxylang

WordPress translation generally takes one of three approaches:

 * **Database plugins**: store duplicated translated content in your database and
   often involve manual translation work.
 * **DNS proxies**: require CNAME or nameserver changes that some managed hosts 
   don’t allow.
 * **Browser translate widgets**: translate in the visitor’s browser but aren’t 
   indexed by search engines.

Proxylang gives you real indexed per-language URLs, server-rendered SEO for search
crawlers, and instant in-browser translation for visitors — with no DNS changes:

 * Real per-language URLs (`yoursite.com/es-MX/about`) indexed by Google
 * AI translation in 68 languages with context-aware quality
 * Server-rendered translated HTML for search-engine bots (Googlebot, Bingbot, ChatGPT,
   Claude, Perplexity)
 * Instant client-side translation for human visitors. No page re-render
 * Auto-generated hreflang tags, per-language XML sitemaps, robots.txt
 * WooCommerce Product JSON-LD localized for Google Shopping rich results
 * Translation glossary so brand terms always render the way you want
 * Full analytics dashboard with anonymous visitor tracking, languages, countries,
   top pages
 * Zero DNS setup. Install plugin, paste keys, you’re live

#### Account required

This plugin connects WordPress to the Proxylang translation network. **You’ll need
a free Proxylang account at [proxylang.dev](https://proxylang.dev) to use the plugin.**
Sign-up takes 30 seconds. The free tier translates 2,000 words/month at no cost.
Enough for most small business sites. Higher tiers scale with traffic. See [proxylang.dev/pricing](https://proxylang.dev/pricing).

#### Who is this for?

 * **WordPress sites going international**: blogs, agencies, SaaS marketing sites,
   portfolios.
 * **WooCommerce stores selling cross-border**: products, variations, cart, checkout,
   and Product schema all translate automatically.
 * **Sites on managed hosts** that don’t allow DNS changes: Kinsta, WP Engine, WordPress.
   com Business+, Pressable, and similar.
 * **Agencies managing multilingual clients**: install once, manage translations
   from one dashboard.

#### How it works under the hood

When a visitor lands on `/es-MX/about`, the plugin inspects the request:

 * **Search-engine bot** (Googlebot, ChatGPT, Claude, etc.): plugin fetches a fully
   translated HTML page from Proxylang’s edge network and serves it directly. Indexable,
   hreflang-annotated, no JavaScript required.
 * **Human visitor**: plugin redirects to your source URL (`/about`) and sets a 
   language cookie. Your page then loads with a tiny script that translates visible
   content client-side. No full re-render, no flicker, and your address bar stays
   clean.

Translations are cached at 300+ edge locations and inside your WordPress install,
so repeat visitors see instant translated pages.

### Features

 * AI translation in 68 languages with brand-context awareness
 * Translates both search engines and visitors. Bots see pre-rendered translated
   HTML, real visitors see live in-browser translation
 * Per-language `sitemap.xml`, `robots.txt`, hreflang, og:locale, content-language
   headers
 * **Translation glossary**: override AI translations for brand terms or any specific
   phrase
 * **Full analytics dashboard**: visitors, languages, countries, top pages, growth
   over time. All anonymous and aggregated
 * WooCommerce Product JSON-LD localization for Google Shopping
 * Compatible with W3 Total Cache, WP Super Cache, LiteSpeed Cache, and other page
   caches
 * Translation cache invalidation via signed HMAC webhooks. No manual purge
 * GDPR-friendly. No visitor PII, cookies, or form submissions sent to Proxylang
 * Works with any theme, page builder, or block editor (Elementor, Divi, Gutenberg,
   Bricks, etc.)
 * WordPress 6.5+ and PHP 7.4+ supported

### External services

This plugin connects to the Proxylang translation service. **The plugin will not
function without contacting these services.** Translation cannot happen entirely
on your server. Proxylang runs the AI translation pipeline, edge cache, and dashboard.

What data is sent and when:

 1. **proxylang.dev**: configuration, plugin registration, daily heartbeat.
 2.  * `POST https://proxylang.dev/api/proxylang/plugin/register`: sent on plugin activation.
       Transmits: your public key (Authorization header), plugin version, your site’s
       home URL, REST webhook URL, requested mode.
     * `POST https://proxylang.dev/api/proxylang/plugin/heartbeat`: sent once per day.
       Transmits: your public key, plugin version, mode, home URL.
     * `POST https://proxylang.dev/api/proxylang/plugin/config`: sent on settings save
       and twice daily. Transmits: your public key. Returns: enabled languages, source
       language, registered domain.
 3. **proxy.proxylang.dev** (server-to-server, from your WordPress server): translated
    HTML and sitemap delivery.
 4.  * `GET https://proxy.proxylang.dev/v1/render?domain=…&path=…&lang=…`: sent when
       a search-engine bot requests a `/{lang}/*` URL. Transmits: your public key (
       X-Proxylang-Key header), the requesting visitor’s User-Agent (X-Proxylang-Visitor-
       UA header), requested path, language.
     * `GET https://proxy.proxylang.dev/v1/sitemap?domain=…&lang=…`: sent when WordPress
       requests a per-language sitemap. Transmits: your public key, language code.
 5. **proxy.proxylang.dev** (loaded in each site visitor’s browser): live in-page translation
    for human visitors. The plugin adds the following to your front-end pages when 
    enabled:
 6.  * `<script src="https://proxy.proxylang.dev/script.js">`: enqueued into every 
       enabled front-end page. The visitor’s browser downloads and runs this script
       to translate the page client-side. Your public key is passed to it via a `data-
       key` attribute.
     * `GET https://proxy.proxylang.dev/v1/script-bundle?key=…&lang=…&path=…`: fetched(
       and `<link rel="preload">`-hinted) by that script to retrieve cached translations
       for the current page and language. Transmits: your public key, target language,
       page path. No visitor personal data is sent.

Proxylang’s privacy policy: https://proxylang.dev/privacy
 Proxylang’s terms of 
service: https://proxylang.dev/terms

### Privacy

This plugin does NOT send visitor personal data, cookies, form submissions, IP addresses,
or session content to Proxylang. Only the request URL path and the visitor’s User-
Agent string are transmitted (the User-Agent is required so that bot translations
can be metered per crawler). Logged-in administrator previews skip Proxylang entirely
and serve the origin page directly.

Translation caches live entirely on your WordPress install (in object cache or transients)
and on Proxylang’s edge network. No per-visitor records are stored. Analytics are
collected anonymously and aggregated (country, language, page path) for the dashboard.

For European customers: Proxylang is GDPR-compliant. See the privacy policy linked
above for the full data-processing agreement.

## Screenshots

[⌊Fully customizable language switcher widget. Configure position, size, theme, 
animation, mobile mode, loading spinner, and language display from the Proxylang
dashboard. No code changes.⌉⌊Fully customizable language switcher widget. Configure
position, size, theme, animation, mobile mode, loading spinner, and language display
from the Proxylang dashboard. No code changes.⌉[

Fully customizable language switcher widget. Configure position, size, theme, animation,
mobile mode, loading spinner, and language display from the Proxylang dashboard.
No code changes.

[⌊Built-in global SEO. Translated pages are pre-rendered as full HTML and indexed
by Google, Bing, Yandex, Naver, and more. Correct hreflang tags, localized meta 
tags, structured data, and right-to-left support are handled automatically on every
page.⌉⌊Built-in global SEO. Translated pages are pre-rendered as full HTML and indexed
by Google, Bing, Yandex, Naver, and more. Correct hreflang tags, localized meta 
tags, structured data, and right-to-left support are handled automatically on every
page.⌉[

Built-in global SEO. Translated pages are pre-rendered as full HTML and indexed 
by Google, Bing, Yandex, Naver, and more. Correct hreflang tags, localized meta 
tags, structured data, and right-to-left support are handled automatically on every
page.

[⌊More than just translation. Translation glossary, full anonymous visitor analytics
dashboard, widget customization, and brand-safe AI keep your brand names consistent
across every language.⌉⌊More than just translation. Translation glossary, full anonymous
visitor analytics dashboard, widget customization, and brand-safe AI keep your brand
names consistent across every language.⌉[

More than just translation. Translation glossary, full anonymous visitor analytics
dashboard, widget customization, and brand-safe AI keep your brand names consistent
across every language.

[⌊WordPress plugin settings page in wp-admin. Two-key setup (Production + Local 
Development), enable toggle, mode selector, and a live status panel showing source
language, target languages, last heartbeat, and the last cache-invalidation webhook
received from Proxylang.⌉⌊WordPress plugin settings page in wp-admin. Two-key setup(
Production + Local Development), enable toggle, mode selector, and a live status
panel showing source language, target languages, last heartbeat, and the last cache-
invalidation webhook received from Proxylang.⌉[

WordPress plugin settings page in wp-admin. Two-key setup (Production + Local Development),
enable toggle, mode selector, and a live status panel showing source language, target
languages, last heartbeat, and the last cache-invalidation webhook received from
Proxylang.

## Installation

 1. **Create a free Proxylang account** at [proxylang.dev](https://proxylang.dev) and
    add your domain. Setup wizard takes about 60 seconds and gives you two keys: production
    and local-development.
 2. **Install the plugin** from WordPress.org (or upload the `.zip` from your Proxylang
    dashboard).
 3. **Activate** through the Plugins screen.
 4. Go to **Settings  Proxylang** and paste your two keys:
 5.  * `pk_xxxxxxxxxxxxxxxxxxxx` into the **Production Key** field
     * `pk_local_xxxxxxxxxxxxxxxxxxxx` into the **Local / Development Key** field _(
       optional but recommended)_
 6. Check **Enabled** and click **Save Changes**.
 7. Visit your site at `yoursite.com/{language}/` (e.g. `/es-MX/`, `/ja-jp/`) to confirm
    translations are live.
 8. Go to [proxylang.dev/customize](https://proxylang.dev/customize) to design your
    language switcher.

That’s it. No code paste, no DNS, no theme edits, no `.htaccess` changes.

## FAQ

### Do I need a Proxylang account?

Yes. The plugin connects WordPress to the Proxylang AI translation service. Sign
up at [proxylang.dev](https://proxylang.dev). The free tier covers 2,000 translated
words per month. Enough for small business sites. Paid tiers scale by translated
word volume, not by site count or page count.

### Does this require DNS changes?

No. Traditional DNS-based translation proxies require you to point a CNAME or change
your nameservers. Proxylang avoids that entirely — everything runs through WordPress
itself.

### Why two keys (production + local)?

The plugin auto-selects between your production key (`pk_xxx`) and your local-dev
key (`pk_local_xxx`) based on the current site hostname. This lets you copy the 
same WordPress install from production to a local staging environment without swapping
keys.

### How does this differ from database-stored translation plugins?

Some translation plugins store duplicated translated content in your WordPress database,
with translation done manually per post / product or via a managed service. Proxylang
translates with AI on demand and caches at the edge, so translated content isn’t
duplicated in your database and updates propagate from a single dashboard.

### Can I override AI translations for brand terms or specific phrases?

Yes. Proxylang ships a translation glossary in your dashboard where you define exact
translations per language for any term or phrase. Glossary entries are applied site-
wide and propagate to your live site within seconds. (A full visual live editor 
for arbitrary inline content is on the roadmap.)

### Do you provide analytics?

Yes. Every account includes a full analytics dashboard with visitor counts, language
and country breakdowns, top pages, and growth over time. All data is anonymous and
aggregated. No personally identifiable information is collected from your visitors.

### Will Google actually index my translated pages?

Yes. Search engine bots receive fully server-rendered HTML with hreflang tags pointing
to all language versions. The plugin generates per-language sitemaps and pings IndexNow/
Bing on translation changes. Real per-language URLs are indexable like any other
page.

### How much does bot translation cost compared to visitor translation?

Bot translations cost about **1/4 the word usage** of human (visitor) translations.
Search engines see fully pre-rendered translated pages for SEO, your visitors get
instant in-browser translation, and the bot side uses a fraction of your word quota.

### Does it work with WooCommerce?

Yes, fully. Product titles, descriptions, variations, attribute swatches, cart, 
checkout field labels, and shipping/payment method names all translate automatically.
Product JSON-LD is localized so translated pages appear correctly in Google Shopping
and rich results. Cart and checkout pages are explicitly excluded from caching to
preserve session state.

### Is the plugin compatible with caching plugins?

Yes. Built-in shims for W3 Total Cache, WP Super Cache, and LiteSpeed Cache automatically
vary cached entries by language and visitor type, so bots and humans don’t share
cache entries.

### What happens to my content if I deactivate the plugin?

Translations stop, the `/{language}/` URLs stop responding, and your site reverts
to its source language. **Your original content is untouched.** We never modify 
your posts, products, or theme files. Translations live in the Proxylang dashboard
and can be re-enabled anytime.

### Does it work on WordPress.com?

Yes, on Business and Commerce plans (which allow plugin uploads). WordPress.com 
Personal / Premium don’t allow third-party plugins.

### Is there a free tier?

Yes. 2,000 translated words per month, no credit card required. See [proxylang.dev/pricing](https://proxylang.dev/pricing)
for the full breakdown.

### Is my visitors’ data sent to any AI provider?

No. The plugin does NOT send visitor cookies, form submissions, session data, or
IP addresses to Proxylang or any translation provider. Only the source text being
translated is transmitted, and only on cache misses. Subsequent visitors are served
from cached translations. Visitor analytics are collected anonymously and aggregated.
No PII.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“Proxylang: AI Translation & Multilingual SEO” is open source software. The following
people have contributed to this plugin.

Contributors

 *   [ proxylang ](https://profiles.wordpress.org/proxylang/)

[Translate “Proxylang: AI Translation & Multilingual SEO” into your language.](https://translate.wordpress.org/projects/wp-plugins/proxylang)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/proxylang/), check 
out the [SVN repository](https://plugins.svn.wordpress.org/proxylang/), or subscribe
to the [development log](https://plugins.trac.wordpress.org/log/proxylang/) by [RSS](https://plugins.trac.wordpress.org/log/proxylang/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 1.4.4

 * Admin-notice dismiss scripts are now enqueued (`wp_enqueue_script` + `wp_localize_script`)
   instead of printed inline. Readme wording clarified to remove comparative/superlative
   phrasing per WordPress.org plugin guidelines. No functional changes for existing
   sites.

#### 1.4.3

 * WordPress.org directory release. Bundled the full GNU GPLv2 license text, documented
   every external service call (including the browser-loaded translation script 
   and translation-bundle fetch) in the readme, and gated debug logging behind `
   WP_DEBUG`. No functional changes for existing sites.

#### 1.4.2

 * Fix: Widget script is now excluded from page-optimizer interference. The Proxylang`
   <script>` is flagged so optimization plugins never combine, minify, self-host(
   which can serve a stale copy), or delay-until-interaction it. Covers Cloudflare
   Rocket Loader (`data-cfasync`), Autoptimize (`data-noptimize`), LiteSpeed / SiteGround/
   Perfmatters (`data-no-optimize`), JS-minify skips (`data-no-minify`), and WP 
   Rocket / Perfmatters external-JS + delay-JS filter exclusions. Prevents broken
   or stale widget loads on optimizer-heavy sites.

#### 1.4.1

 * Fix: PHP-FPM pool exhaustion guards on sitemap build. Global concurrent-build
   budget (default 3, filterable via `proxylang_sitemap_build_budget`) with atomic
   per-slot SETNX, exponential backoff polling (100/200/400ms), and `register_shutdown_function`
   crash-safety for lock + budget release.
 * Fix: Lock TTL raised 60s  90s to cover cold-start fetch+parse on shared hosts.
 * Fix: Cache-flush fence prevents stale pre-flush content from landing in cache
   after publish.
 * Fix: Loopback fetch now validates response Content-Type, body shape, byte length(
   rejects > 20 MiB), and uses `limit_response_size` at the transport layer so a
   hostile/misconfigured origin cannot OOM the PHP process before our size guard
   runs.
 * Fix: Loopback fetch no longer follows redirects (`redirection => 0`) — closes
   attack vector via origin redirect to internal endpoints.
 * Fix: Origin XML transient cache (5 min TTL, ≤ 5 MB) deduplicates loopback fetches
   across language mirrors — halves PHP-FPM slot usage on multi-lang installs.
 * Fix: Per-request flush dedup eliminates 800+ DB writes during 100-product WooCommerce
   bulk imports.
 * Add: `rest_after_insert_{cpt}` hooks registered for every public post type so
   REST PATCH writes always invalidate sitemap cache.
 * Add: WooCommerce update/new/delete/trash + Polylang `pll_save_post` + WPML `wpml_translation_update`/`
   icl_make_duplicate` hooks invalidate sitemap cache.
 * Add: Memory peak telemetry — logs warning when chunk build exceeds 80% of PHP`
   memory_limit`.
 * Add: Dismissible admin notice when host SEO plugin index exceeds 200-child cap(
   degrades to legacy single-XML mode with no hreflang).
 * Refactor: Shared `SitemapFlushHooks` class consolidates content-change hooks 
   for ENHANCE + REPLACE strategies (~150 lines deduplicated).

#### 1.4.0

 * Add: Multilingual-aware sitemap compatibility mode. Detects host SEO plugin (
   Yoast, RankMath, AIOSEO, SEOPress, Slim SEO, WP-core) and dispatches to one of
   three strategies:
    - ENHANCE (Yoast/RankMath/AIOSEO) — keeps host plugin’s chunked sitemap structure,
      injects `<xhtml:link rel="alternate" hreflang>` annotations per URL via the
      host’s filter hooks, mirrors topology at `/{lang}/{cpt}-sitemap.xml` mirror
      endpoints. Legacy `/sitemap.xml` 301-redirects to the host’s index.
    - REPLACE (SEOPress/Slim SEO/WP-core) — disables competing native sitemap, emits
      monolithic Proxylang sitemap (same shape as v1.0.x).
    - LEGACY — v1.0.x monolithic behavior, kept as kill-switch fallback (Settings“
      Multilingual-aware sitemap compatibility mode”).
 * Add: `<meta name="proxylang-seo">` sentinel emitted on every translated page 
   so the Proxylang worker skips duplicate hreflang/canonical/og:locale injection
   when proxying.
 * Add: Single source of truth for translated URL construction (`Plugin::build_translated_url`)
   used by sitemap `<loc>`, `<head>` hreflang, canonical, and HTTP `Link:` header—
   guarantees Google’s bidirectional return-tag contract.
 * Add: SEO host detection cache with auto-invalidation on plugin activate/deactivate.
   Strategy switches automatically when Yoast/RankMath/AIOSEO is installed or removed.
 * Add: Cache-stampede protection on big sites — single-builder lock prevents PHP-
   FPM pool exhaustion during cold-cache rebuilds.
 * Add: SEO-host-aware `<head>` injection — skips canonical and `og:locale` on Yoast/
   RankMath/AIOSEO so the host plugin’s own tags are not duplicated.
 * Add: Dev-tunnel host detection — `pk_local_*` keys auto-select on `*.ngrok-free.
   app`, `*.loca.lt`, `*.serveo.net`, `*.trycloudflare.com` for easier staging testing.
 * Add: Settings UI toggle, one-time admin notice on upgrade, and runtime version-
   stamp migration that flushes rewrite rules on SFTP/git deploys (not just WP-updater
   upgrades).
 * Add: `XXE` defense (`LIBXML_NONET`) on origin sitemap parsing; UTF-8 BOM stripping;
   output-buffer cleanup before XML stream.
 * Fix: Query-var hijack — `?proxylang_sitemap=1` on any URL now requires the path
   to end in `.xml` before triggering serve.
 * Fix: `save_post` hook now gates on publish-status + skips revisions/autosaves
   so Gutenberg’s per-10s autosave doesn’t wipe the sitemap cache.
 * Fix: `flush_sitemap_namespace` now targets a dedicated cache group instead of
   wiping the entire `proxylang` object cache (no more accidental render/config/
   widget cache invalidation).
 * Fix: Plugin-disabled state no longer registers strategy filter hooks (was silently
   disabling competing SEO plugins’ sitemaps even when key was missing).
 * Fix: `uninstall.php` cleans v1.4 options + sitemap build-lock options.

#### 1.0.1

 * Fix: `/{lang}/sitemap.xml` returned the blog page instead of XML on most sites—
   sitemap rewrite regex required lowercase region subtag but BCP-47 codes (`fr-
   FR`, `es-MX`, etc.) use uppercase. Now accepts both `/es/` and `/es-MX/` shapes,
   matching the content router.
 * Fix: Per-language URLs were emitted in mixed case (`/fr-FR/about`) but worker
   emits lowercase (`/fr-fr/about`). Mismatch fragmented Google’s indexing signals
   across two URL variants for the same locale. All URL paths now use lowercase 
   BCP-47 tags; the `hreflang` attribute itself keeps standard case (e.g. `hreflang
   ="fr-FR"`).
 * Fix: Plugin did not re-flush WordPress rewrite rules when `plugin_mode` changed(
   e.g. from `none` to `hybrid`). Routes for `/{lang}/*` and `/{lang}/sitemap.xml`
   stayed stale until language config changed independently. Now flush triggers 
   on any rewrite-relevant config change.
 * Fix: Sitemap cache key did not include `plugin_mode`, so a `hybrid`  `widget_only``
   hybrid` flip could serve a stale sitemap built for the previous URL pattern.
 * Fix: `robots.txt` sitemap entries and the `<link rel="sitemap">` head tag now
   emit lowercase BCP-47 paths to match the canonical URL form.

#### 1.0.0

 * Initial release.
 * Translates both search engines (server-rendered) and visitors (client-side widget).
   Bot translations cost about 1/4 the word usage of human translations, so a fully
   multilingual site uses a fraction of your word quota.
 * Two-key support: auto-selects between production and local-development keys based
   on site hostname.
 * Per-language URL routing accepts variant prefixes (`/es-mx/`, `/es-MX/`, `/es/`,`/
   mx/`) and resolves to canonical BCP47.
 * Per-language sitemaps, hreflang, robots.txt, og:locale, content-language headers.
 * WooCommerce Product JSON-LD localization.
 * Page-cache compatibility shims (W3 Total Cache, WP Super Cache, LiteSpeed Cache).
 * HMAC-signed translation cache invalidation webhooks with 5-minute replay protection.
 * Translation glossary support: dashboard-defined per-language overrides propagate
   live.
 * Full analytics dashboard: anonymous visitor counts, languages, countries, top
   pages.
 * Privacy admin notice on first activation.

## Meta

 *  Version **1.4.4**
 *  Last updated **8 hours ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.5 or higher **
 *  Tested up to **7.0**
 *  PHP version ** 7.4 or higher **
 * Tags
 * [AI](https://wordpress.org/plugins/tags/ai/)[multilingual](https://wordpress.org/plugins/tags/multilingual/)
   [seo](https://wordpress.org/plugins/tags/seo/)[translation](https://wordpress.org/plugins/tags/translation/)
   [woocommerce](https://wordpress.org/plugins/tags/woocommerce/)
 *  [Advanced View](https://wordpress.org/plugins/proxylang/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/proxylang/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/proxylang/reviews/)

## Contributors

 *   [ proxylang ](https://profiles.wordpress.org/proxylang/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/proxylang/)