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

  1. Why email HTML is different
  2. What to translate vs what to lock
  3. Protect merge tags
  4. Protect tracking and unsubscribe links
  5. Preheader, subject blocks, and ALT text
  6. Layout and text expansion
  7. Before / after fragment
  8. Client QA checklist
  9. Common mistakes
  10. When this workflow fits
  11. 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 alt text that describes content

Do not translate

  • Merge tags and ESP syntax
  • href / src values for tracking, CDN images, and unsubscribe endpoints
  • Conditional comments for Outlook (<!--[if mso]>…)
  • class / id used 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 {{, *|, %recipient and confirm counts match the source.

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
  • alt on 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 alt when 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

  1. Translating {{first_name}} into a localized word
  2. “Fixing” encoded tracking URLs
  3. Translating class names used by the inliner
  4. Ignoring preheader text
  5. Approving from the code editor only — never open the client preview
  6. 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.

Translate a file →