Scaling Multilingual Sites for 20+ Clients with SiteLocaleAI
TL;DR – Use SiteLocaleAI’s drop‑in JavaScript library, self‑hosted LLM keys, and volume‑licensing to manage dozens of client sites from a single repository. Leverage the CLI for SEO pre‑rendering and the WordPress plugin for non‑Node environments.
1. Why a Volume‑Licensing Model?
Agencies often juggle many domains, each with its own branding, language set, and pricing strategy. A per‑site license quickly becomes expensive and administratively heavy. SiteLocaleAI’s volume licensing lets you purchase a bulk seat package (e.g., 50‑seat Indie or 200‑seat Starter) and allocate those seats across any number of client projects. The key benefits are:
- Predictable cost – One invoice for all sites.
- Centralized key management – Store LLM API keys in a vault and reference them per client.
- Unified updates – Upgrade the library once and all sites benefit.
2. Repository Structure for Multiple Clients
A monorepo works best. Below is a sample folder layout:
/agency-root
├─ /clients
│ ├─ /client-a
│ │ ├─ index.html
│ │ └─ locale.config.js
│ ├─ /client-b
│ │ ├─ index.html
│ │ └─ locale.config.js
│ └─ …
├─ /shared
│ └─ siteLocale.js # Drop‑in JS library (npm install sitelocaleai)
├─ .env # Central LLM keys & licensing token
└─ package.json
Each locale.config.js contains client‑specific settings (languages, currency, LLM model). The shared siteLocale.js is imported by every site.
3. Setting Up the Environment
Create a .env file at the repo root:
# SiteLocaleAI licensing token – obtain from the dashboard
SITELOCALEAI_LICENSE=YOUR_VOLUME_LICENSE_TOKEN
# LLM API keys (you can rotate per client if needed)
OPENAI_API_KEY=sk-…
ANTHROPIC_API_KEY=sk-…
Load these variables in your build scripts using dotenv:
// shared/siteLocale.js
import { config } from 'dotenv';
config();
export const LLM_KEYS = {
openai: process.env.OPENAI_API_KEY,
anthropic: process.env.ANTHROPIC_API_KEY,
};
export const LICENSE_TOKEN = process.env.SITELOCALEAI_LICENSE;
4. Drop‑In JavaScript for Each Client
In each client’s index.html add the library script and initialise it with the client’s config:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Client A – Home</title>
<script src="/shared/siteLocale.js"></script>
<script type="module" src="/clients/client-a/locale.config.js"></script>
</head>
<body>
<h1 data-sloc="title">Welcome</h1>
<p data-sloc="description">Explore our products.</p>
<span data-sloc-price="price">$49.99</span>
</body>
</html>
locale.config.js tells SiteLocaleAI which languages to generate and how to round prices:
// clients/client-a/locale.config.js
import { initSiteLocale } from '../../shared/siteLocale.js';
initSiteLocale({
licenseToken: LICENSE_TOKEN,
llm: {
provider: 'openai',
model: 'gpt-4o-mini',
apiKey: LLM_KEYS.openai,
},
languages: ['en', 'es', 'de', 'fr'],
currency: {
code: 'EUR',
rounding: 'psychological', // e.g., €9.99 → €9.95
},
});
The library automatically replaces any element with data-sloc or data-sloc-price attributes.
5. SEO Pre‑Rendering with the CLI
Search engines need fully rendered HTML. SiteLocaleAI’s CLI can pre‑render every language version and write static files for the crawler.
# Install the CLI globally (once per agency)
npm i -g @sitelocaleai/cli
# Run pre‑rendering for all clients
sitelocaleai prerender \
--src ./clients \
--out ./dist \
--license $SITELOCALEAI_LICENSE \
--openai-key $OPENAI_API_KEY
The CLI reads each locale.config.js, calls the LLM API, and writes index.es.html, index.de.html, etc., into dist/client-a/. Deploy the dist folder to your static host (Vercel, Netlify, S3, etc.).
Tip: Add a post‑commit hook to run the pre‑render automatically, ensuring new content is always indexed.
6. WordPress Clients Without Node.js
Some agencies manage WordPress sites where Node isn’t available. SiteLocaleAI offers a WordPress plugin that bundles the JS library and provides a settings page for the license token and LLM keys.
- Install the plugin via the WordPress admin.
- In Settings → SiteLocaleAI, paste your license token and API keys.
- Use the shortcode
[sitelocale lang="es"]to wrap translatable content. - For price rounding, add the attribute
data-sloc-priceto any element.
The plugin also includes a WP‑CLI command wp sitelocale prerender that works similarly to the Node CLI, generating static HTML for Googlebot.
7. Managing Seats Across Clients
SiteLocaleAI’s dashboard shows a real‑time seat counter. To allocate seats:
- Create a “client group” in the dashboard (e.g., Client A). Assign the number of seats you want to reserve.
- In each
locale.config.js, addseatGroup: 'client-a'. - The library validates the group against the license token at runtime, preventing over‑usage.
initSiteLocale({
licenseToken: LICENSE_TOKEN,
seatGroup: 'client-a',
// …other options
});
If a client exceeds its allocation, the library falls back to a graceful degradation mode: it serves the original source language and logs a warning.
8. Monitoring & Analytics
SiteLocaleAI ships a lightweight analytics endpoint that records:
- Translation latency per language.
- Price rounding accuracy.
- SEO crawl errors.
Integrate it with your existing monitoring stack:
import { enableAnalytics } from '../../shared/siteLocale.js';
enableAnalytics({
endpoint: 'https://analytics.sitelocaleai.com/collect',
clientId: 'agency-123',
});
Review the data in the dashboard to optimise model selection (e.g., switch from gpt-4o-mini to claude-3.5-sonnet for higher quality).
9. Quick Checklist for Agency Rollout
| ✅ | Item |
|---|---|
| 1 | Purchase a volume‑license that covers the total seat count. |
| 2 | Store the license token and LLM keys in a secure .env. |
| 3 | Set up a monorepo with a shared siteLocale.js and per‑client configs. |
| 4 | Add data-sloc attributes to all translatable UI strings. |
| 5 | Run the CLI pre‑render for SEO before each deployment. |
| 6 | For WordPress sites, install the plugin and use shortcodes. |
| 7 | Assign seat groups in the dashboard and reference them in config. |
| 8 | Enable analytics and monitor translation health. |
10. Ready to Scale?
With SiteLocaleAI you can turn a sprawling portfolio of 20+ multilingual websites into a single, maintainable codebase—while keeping costs predictable and SEO performance strong. Try SiteLocaleAI today and see how quickly you can launch localized experiences for every client.