Lynkist
Back to blog
templatesbest-practiceswhatsapp

WhatsApp template design that gets approved on the first submission

A practical guide to writing WhatsApp Business templates that pass Meta review first time, drawing on patterns from hundreds of approved templates.

Lynkist Team8 min read

Template rejection is the most frustrating bottleneck in WhatsApp Business adoption. You write a perfectly reasonable message, submit it, wait six hours, and get a one-line "Does not comply with policy" rejection with no specifics. This post breaks down what actually gets approved versus what gets rejected, based on patterns from approved templates across many categories.

The mental model that helps

Meta's reviewers (and increasingly their automated systems) are not asking "Is this message acceptable?" They're asking "Could this message be misused by someone trying to spam or deceive?"

That shift in perspective changes a lot. A template that you would write for your honest business might still get rejected because the same template pattern is used by scammers. Meta isn't judging you — it's judging the template structure.

Three patterns that get approved every time

1. The "stable context, dynamic detail" pattern

Hi {{1}},

Your order {{2}} has been confirmed and will be shipped within 24 hours.
Track here: {{3}}

Reply STOP to opt out.

Why this works:

  • The static text gives clear context (what the message is about)
  • Variables only fill in personal details (name, order number, link)
  • The opt-out is explicit
  • The structure is unambiguous — it cannot be repurposed for spam

2. The "two-button decision" pattern

Hi {{1}}, your delivery slot for tomorrow is {{2}}.

Does this time work for you?

[Yes, confirm] [Reschedule]

Why this works:

  • Action-oriented body
  • Quick-reply buttons reduce typing friction
  • The use case is unambiguous (logistics confirmation)
  • Buttons route inbound replies neatly

3. The "OTP minimal" pattern

{{1}} is your verification code. It expires in 10 minutes.

Do not share this code with anyone.

Why this works:

  • Authentication category templates have permissive rules
  • The "do not share" line satisfies Meta's anti-phishing checks
  • Code at the start makes it easy to copy
  • No CTA buttons (auth templates don't need them)

Five patterns that get rejected

1. Marketing copy in a utility template

❌ Hi {{1}}, exciting news! Your order {{2}} just shipped and we have a
   special offer just for you — 20% off your next order with code SAVE20!

The "special offer" line tips it from utility into marketing. Meta will either reject or auto-recategorise — either way, your campaign breaks.

Fix: send two messages. One utility (order update), one marketing (offer).

2. Variable at the start with no static context

❌ {{1}}, click here {{2}} to claim now.

Reads like a spam template. Meta has seen ten thousand variants of this from bad actors.

Fix: front-load with static framing — Hi {{1}}, your reward is ready to claim: works.

3. Excessive variables

❌ {{1}}, your {{2}} on {{3}} is {{4}} and your {{5}} expires {{6}}.

When the static text is less than 50% of the message, reviewers can't tell what the template is for.

Fix: split into multiple templates if you have many dynamic fields. Each template should serve one specific intent.

4. URL in body without a CTA button

❌ Hi {{1}}, view your invoice at https://billing.example.com/{{2}}

Meta prefers links in CTA buttons because buttons render with clear visual affordance.

Fix: put the body without a URL, add a "View invoice" URL button.

5. Vague or misleading sender context

❌ Hi {{1}}, this is regarding your account. Please respond.

Could be sent by anyone, about anything. Meta rejects on principle.

Fix: name the actual context — Hi {{1}}, this is about your subscription renewal due on {{2}}.

The 30-minute audit

If you have a stash of templates with mixed approval rates, run this audit:

  1. Group by category. Are any marketing-shaped templates submitted as utility?
  2. Check the static:variable ratio. Anything below 3:1 is at risk.
  3. Check for unframed variables. No template should start with {{1}} unless it's an OTP template.
  4. Check for promotional language in non-marketing templates. Words like "exciting", "special", "deal", "limited time", "free" — these belong in marketing-category templates only.
  5. Check URL placement. Bare URLs in the body should be moved to CTA buttons.

You'll usually find 2–3 templates that are a quick fix and 1 or 2 that need to be split or re-categorised.

Why this matters

A campaign waiting on a rejected template is a campaign that doesn't ship. Worse, repeated rejections damage your template quality rating, which Meta uses to throttle your messaging limits and increase scrutiny on future submissions.

Investing 30 minutes in better template design pays off for the lifetime of every campaign you run.

For the full reference on template structure, category rules, and submission flow, see our Templates guide.

WhatsApp template design that gets approved on the first submission — Lynkist Blog | Lynkist