How to Translate an HTML Email Template Without Breaking Merge Tags
HTML email templates are among the most fragile files you can translate. Unlike modern web pages, campaign HTML still leans on tables, inline CSS, merge tags, and tracking URLs. One wrong change and the send still “works” — but names disappear, buttons misalign, or attribution breaks.
This guide is a practical workflow for translating an HTML email template while keeping the structure that email clients expect. Use it whether you localize a newsletter, a promo, or a transactional shell.
Tool shortcut: if your template is a single static .html file, upload it to HTML Translate, download the draft, then run the email-specific checks below. Machine output is a draft — always preview in real clients before sending.
Table of contents
- Why email HTML is different
- What to translate vs what to lock
- Protect merge tags
- Protect tracking and unsubscribe links
- Preheader, subject blocks, and ALT text
- Layout and text expansion
- Before / after fragment
- Client QA checklist
- Common mistakes
- When this workflow fits
- FAQ
Why email HTML is different
Typical marketing email HTML includes:
- Table-based layout for Outlook and older clients
- Inline styles on almost every cell and paragraph
- Merge tags such as
{{first_name}},*|FNAME|*, or%recipient.name% - Click-tracking wrappers around real destination URLs
- Tracking pixels (
<img width="1" height="1" …>) - Legal footer copy and an unsubscribe link (CAN-SPAM / GDPR)
Web page translators that casually rewrite attributes will hurt email faster than they hurt a landing page. Your job is to change only the words a human reads.
For the general HTML rules (tags, classes, attributes), start with Translate HTML without breaking layout. The rest of this article is email-specific.
What to translate vs what to lock
Translate
- Headline and body copy
- CTA button labels
- Footer “you received this because…” text
- Visible unsubscribe label (not the URL)
- Hard-coded preview / preheader text in the HTML
- Image
alttext that describes content
Do not translate
- Merge tags and ESP syntax
href/srcvalues for tracking, CDN images, and unsubscribe endpoints- Conditional comments for Outlook (
<!--[if mso]>…) class/idused by your ESP or inliner- UTM parameters and encoded click-tracking hosts
When in doubt: if changing a string would break personalization, analytics, or compliance, leave it alone. See also Which HTML attributes should be translated?.
Protect merge tags
Merge tags are placeholders your ESP replaces at send time. If they get “translated” or spaced differently, subscribers see raw {{first_name}} or the tag fails silently.
Source
<p style="margin:0;">Hello {{first_name}},</p>
Safe target (French)
<p style="margin:0;">Bonjour {{first_name}},</p>
Only the greeting changed. The tag is byte-identical.
Tips:
- Prefer wrapping sensitive tokens with
translate="no"when your tool respects it. - Watch tags that look like words (
NAME,CITY) — they are easy for MT to “improve.” - After translation, search the file for
{{,*|,%recipientand confirm counts match the source.
Protect tracking and unsubscribe links
Tracking links are often rewritten hosts with long query strings. Translating or “cleaning” them destroys campaign reporting.
Unsubscribe text can (and often should) be localized; the destination must stay exact:
<a href="https://example.com/unsubscribe?token=abc123">Unsubscribe</a>
Safe French label:
<a href="https://example.com/unsubscribe?token=abc123">Se désabonner</a>
Same rule for “Update preferences,” “View in browser,” and mirror links.
Preheader, subject blocks, and ALT text
Many templates hide a preheader in the first cells:
<div style="display:none;max-height:0;overflow:hidden;">
Your weekly product tips — open for three quick wins.
</div>
Translate that string. Leaving it in English while the body is localized looks unfinished in the inbox list.
Also check:
- Any HTML block that duplicates the subject line
alton hero images (shown when images are blocked — common in Outlook)- Button text inside
<a>styled as buttons (not only<button>, which many ESPs avoid)
Layout and text expansion
German, Finnish, and French CTAs often grow 15–40%. In table layouts that means:
- Buttons wrap onto two lines
- Single-line nav cells overflow
- “Perfect” desktop preview breaks on mobile Gmail
Mitigations before send:
- Prefer slightly shorter CTA wording in the target language
- Allow multi-line buttons in the design
- Re-check fluid / hybrid templates at ~320px width
- Do not stretch images to “fix” longer text — that breaks retina assets
Before / after fragment
Before
<table role="presentation" width="100%">
<tr>
<td align="center">
<a class="btn" href="https://track.example/c/abc">Claim your offer</a>
</td>
</tr>
<tr>
<td>
Hi {{first_name}} — thanks for being a customer.
</td>
</tr>
</table>
After (Spanish, structure preserved)
<table role="presentation" width="100%">
<tr>
<td align="center">
<a class="btn" href="https://track.example/c/abc">Aprovecha tu oferta</a>
</td>
</tr>
<tr>
<td>
Hola {{first_name}} — gracias por ser cliente.
</td>
</tr>
</table>
What stayed identical: table roles, classes, tracking href, merge tag. What changed: visible copy only.
Client QA checklist
Run this on every language before a real send:
- Merge tag count matches the source file
- Unsubscribe URL unchanged; label localized
- Tracking / UTM hosts unchanged
- Preheader localized
- CTA readable at mobile width
- Images show sensible
altwhen blocked - Outlook (Windows) desktop preview — tables not collapsed oddly
- Gmail (web + app) — no huge gaps from leftover spacers
- Litmus / Email on Acid / ESP preview if you have it
- Send yourself a test with real personalization data
Common mistakes
- Translating
{{first_name}}into a localized word - “Fixing” encoded tracking URLs
- Translating
classnames used by the inliner - Ignoring preheader text
- Approving from the code editor only — never open the client preview
- Using PDF-exported or screenshot HTML as the source
When this workflow fits
Use this approach for:
- Multilingual marketing campaigns
- Transactional shells with mostly static HTML
- Newsletter templates for EU / global lists
- Onboarding sequences that ship as HTML files from an ESP export
It is a poor fit when the “email” is built only inside a drag-and-drop editor with no export, or when most strings live in a separate translation memory. In those cases, translate inside the ESP or TMS instead of round-tripping a fragile export.
FAQ
Can I translate HTML email in Google Translate?
You can paste snippets for meaning checks, but pasting a full template often damages merge tags and attributes. Prefer an HTML-aware file workflow, then QA in clients.
Should unsubscribe text be translated?
Yes — the visible label should match the email language. The href must stay exactly as your ESP generated it.
What about AMP for Email?
Treat AMP sections like code: translate visible text nodes carefully and do not alter AMP-specific attributes or component names unless you know the format.
How many languages at once?
With HTML Translate you can request up to five target languages per upload and get a ZIP. Still QA each language separately — expansion differs by locale.
Next step: export your template as .html, run it through HTML Translate, then use the checklist above before the first real send. For page-style HTML (not email), use the general layout-safe workflow.