Easy Multilingual SEO WordPress plugin

Documentation

Easy Multilingual SEO

Manual translations and multilingual SEO for small WordPress sites. No external translation APIs — you control every string, URL prefix, and meta field.

Overview

Easy Multilingual SEO helps you run a multilingual WordPress site without a heavy translation platform. You define a default (source) language, enable additional languages, register source text, and provide translations manually.

On the front end, visitors browse prefixed URLs such as /cs/about/ or /en/blog/. Matching registered phrases in page content, menus, titles, and widgets are replaced automatically for the active language.

What this plugin is
A lightweight, WordPress-native tool for small sites that want full control over translations and SEO metadata per language.

What this plugin is not
It does not call Google Translate, DeepL, or other APIs. It does not duplicate posts per language. Content replacement depends on exact registered source strings.

Key features

  • Configure any number of languages (BCP 47 codes, names, flags, URL slugs)
  • Manual translations with page scanning and CSV import/export
  • Per-language SEO fields for posts, pages, categories, and tags
  • Language-prefixed URLs for pages, posts, homepage, and posts page
  • Optional translated category/tag URL slugs
  • Language selector shortcode and Gutenberg block
  • Built-in SEO check (translation coverage & readiness audit)
  • Per-attachment translated alt text
  • Localized URLs in wp-sitemap.xml
  • Optional /llms.txt for AI crawlers
  • Compatibility with Yoast SEO, Rank Math, and The SEO Framework

Requirements

RequirementDetails
WordPress6.1 or newer (tested up to 7.0)
PHP7.4 or newer
Pretty permalinksRequired for language URL prefixes, localized sitemap, llms.txt, and translated term slugs.
SEO pluginOptional. Yoast SEO, Rank Math, or The SEO Framework can take over head output in Auto mode.

Quick start

  1. Install and activate the plugin.
  2. Open Easy Multilingual SEO from the WordPress admin menu.
  3. On Settings, add languages, set a default, and add URL slugs.
  4. Save, then visit Settings → Permalinks and click Save Changes.
  5. On Translations, scan pages or add strings manually.
  6. On Metadata, set per-language SEO fields.
  7. Add [emls_language_selector] or the Language Selector block.
  8. Run SEO check and fix reported issues.

How it works

URL model

One WordPress post or page exists per piece of content. Languages use URL prefixes, not duplicate posts.

  • Default language — e.g. https://example.com/about/
  • Other languages — e.g. https://example.com/cs/about/

Translation replacement rules

  • Only registered source strings are replaced — exact match required.
  • Replacement runs in HTML text only; script and style tags are skipped.
  • Multi-word phrases match as full phrases; single words match whole words only.

Language detection

  1. URL prefix
  2. Visitor preference cookie
  3. Optional browser Accept-Language redirect on first visit
  4. Default language fallback

Admin interface

TabPurpose
TranslationsSource strings, translations, scan, CSV
MetadataPer-language SEO fields
SEO checkReadiness audit
SettingsLanguages, selector, SEO output, sitemap, and more

Settings tab

Configure languages, selector appearance, SEO metadata output (Auto / Always / Never), low-translation noindex, llms.txt, browser language detection, XML sitemap, and translated term slugs.

Translations tab

Create translations manually, scan pages/posts/template parts, import/export CSV (UTF-8, max 2,000 rows per export), search and filter the registry, edit or delete entries.

Metadata tab

Per-language SEO title, meta description, viewport, and Open Graph fields for posts and pages. Term archives have fields on category/tag edit screens.

SEO check tab

On-demand audit of setup, translations, coverage, metadata, media alt, technical SEO, and term slugs. Cached ~30 minutes; click Re-run check after fixes.

Languages & URL slugs

https://example.com/ → default language
https://example.com/cs/ → Czech homepage
https://example.com/cs/uvod/ → Czech page

After changing slugs
Save Settings, then visit Settings → Permalinks and click Save Changes.

Managing translations

Use page scan to discover strings from rendered HTML, or add them manually. Each entry maps one source string to translations per language.

<?php echo esc_html( emls_translate( 'Contact us', 'cs-CZ' ) ); ?>

SEO metadata

Fill SEO title and meta description for each important URL in each language. OG image recommended size: 1200×630 px.

Front-end behavior

  • <html lang="..."> reflects the active language.
  • Internal links stay in the current language on prefixed URLs.
  • wp-admin and the block editor keep unprefixed URLs.

Language selector

[emls_language_selector]

Or use the Language Selector block. Choosing a language sets a preference cookie.

SEO output

When enabled: document title, meta description, viewport, canonical, Open Graph, Twitter cards, JSON-LD, hreflang alternates (with x-default) on supported views.

XML sitemap

https://example.com/wp-sitemap-emls-localized-urls-1.xml

Includes localized URLs with hreflang xhtml:link entries when enabled in Settings.

Categories & tags

Translated slugs and term SEO metadata on category/tag edit screens. Optional translated URL slugs per language.

Image alt text

Default and per-language alt text in Media Library; output on front end for images and Image blocks.

llms.txt

Optional /llms.txt with site summary and key URLs for AI crawlers. Enable in Settings.

Browser language detection

First-visit redirect from Accept-Language; preference stored in emls_lang_pref cookie.

SEO plugin compatibility

Auto defers to Yoast, Rank Math, or TSF when detected. Always forces this plugin’s output. Never disables plugin SEO output entirely.

Developer reference

Filters: emls_should_output_metadata, emls_should_output_hreflang, emls_language_metadata, emls_document_title

Troubleshooting

  • 404 on language URLs — Enable permalinks; save Settings + Permalinks; check slugs.
  • Missing translations — Exact source match; scan the page; use prefixed URL.
  • Duplicate SEO tags — Set metadata output to Auto if another SEO plugin is active.
  • Stale SEO check — Click Re-run check.

Uninstall

Deactivating stops routing and SEO output but keeps data. Uninstalling removes plugin options, translations, metadata, and related data. Back up first if needed.

Easy Multilingual SEO · Documentation