Ad copy — headlines, primary text, CTA

Last updated: May 19, 2026

Ad copy — headlines, primary text, CTA

Ad copy is the text that accompanies your creative. Per-platform character limits: Meta primary text 125 / headline 40 / description 30; Google Search RSA up to 15 headlines × 30 char + 4 descriptions × 90 char; TikTok 100. CTA from a platform-specific dropdown. Test 3-5 variations per ad set.

Who is this for

Mediabuyers + copywriters preparing ad text. Anyone whose ad got rejected for "too much text" or "wrong CTA".

The 4 text fields per ad

Field

Purpose

Used by

Primary text

Main message above/below visual

Meta, TikTok, Snapchat

Headline

Bold short statement

Meta, Google Search, LinkedIn

Description

Supporting line under headline

Meta (optional), Google Search

CTA (button)

Action prompt

All platforms

Plus the destination URL (where the click goes — see cc-117 UTM Builder).

Per-platform character limits

Meta (Facebook + Instagram)

Field

Max chars

Mobile truncation

Primary text

125

~80 on small screens

Headline

40

~25

Description (link)

30

full

Link URL display

30

shortened to domain

Google Search (Responsive Search Ads)

Field

Count

Max chars each

Headlines

up to 15

30 each

Descriptions

up to 4

90 each

Path 1 / Path 2 (URL display)

1 each

15 each

Google auto-combines headlines/descriptions per query — provide many variations for max performance.

TikTok

Field

Max chars

Ad text

100

CTA

dropdown choice

Taboola

Field

Max chars

Headline

60

Description

200

Snapchat

Field

Max chars

Headline

34

Brand name

25

Description

150

CTA options

Verified apps/backend/src/types/campaigns/canonical.enums.ts CallToAction enum covers the standard set:

CTA

Best for

LEARN_MORE

Awareness, top-funnel content

SHOP_NOW

E-commerce direct conversion

SIGN_UP

Account creation, newsletter

DOWNLOAD

App install, content download

BOOK_NOW

Reservations, appointments

GET_OFFER

Promo / discount campaign

SUBSCRIBE

Subscription product

CONTACT_US

B2B inquiry, service-based

APPLY_NOW

Loans, job applications

WATCH_VIDEO

Video content drive

...

(full enum per canonical.enums.ts)

CTA must match objective (Sales objective → SHOP_NOW more sensible than LEARN_MORE).

How copy renders per placement

Meta Feed

[Profile pic] [Brand name]
[Primary text — main message — wraps after ~80 chars]

[Visual: image or video]

[Headline]              [CTA button]
[Description (optional)]
[domain.com display]

Meta Stories / Reels

[Visual: full-screen vertical]
[Small overlay: brand + CTA]
[Swipe-up area at bottom]

Headline + description not visible in Stories — focus on visual + burned-in text + CTA.

Google Search

Ad · [Headline 1] | [Headline 2] | [Headline 3]
domain.com/path1/path2
[Description 1]. [Description 2].
[Optional sitelinks below]

Google picks 3 headlines + 2 descriptions per query from your set of 15 + 4.

TikTok In-Feed

[Full-screen vertical video]
[Bottom overlay]:
  @brand
  [Ad text — 100 chars truncated on small screens]
  [CTA button]

Copy strategy

Test 3-5 variations per ad set

Same audience + same creative + different copy = clean A/B test. Common variations:

  • Hook angle: pain point vs aspiration vs curiosity vs authority

  • Length: short (40-60 chars) vs long (100-125 chars)

  • Question vs statement: "Tired of slow shipping?" vs "We ship in 24h"

  • Emoji vs no-emoji: Meta allows but doesn't heavily penalize/reward

  • CTA variation: Learn More vs Shop Now vs Get Offer

After 100+ clicks per variation, scale winners.

Avoid common rejection triggers

  • Excessive emojis (Meta sometimes flags)

  • ALL CAPS ("SUMMER SALE!!!" → rejected)

  • Excessive punctuation ("BUY NOW!!!!!!!" → flagged)

  • Misleading claims ("Lose 20 lbs in 1 week" → policy violation)

  • Comparative health claims without medical evidence

  • Personal attributes ("You look tired in those clothes" → policy violation, makes user uncomfortable)

  • Price claims without proof ("Now 90% off" — if regular price not legitimately 10x lower)

  • Trademarks misused (your competitor's brand name in your ad copy)

Match copy to funnel stage

Stage

Copy approach

Awareness

Storytelling, brand voice, education

Consideration

Value prop, benefits, social proof

Conversion

Direct offer, urgency, clear CTA

Retargeting

Personalized recap, "Still interested?", discount

Mobile-first writing

Most ad views are on mobile. Front-load value in the first 80 characters (after that, text often truncated).

Multi-language copy

For multi-country campaigns:

  • Pre-translate professionally (machine translation often inadequate for marketing copy)

  • Use per-country variants in Bulk Launch (one row per country, localized copy)

  • Or use Meta's Advantage+ multi-language (auto-translates within Meta)

In Wevion's launchers

Express creative step

  • Primary text field (with char counter)

  • Headline field (with char counter)

  • Description field (with char counter, optional)

  • CTA dropdown (filtered by platform)

  • Destination URL field

  • Inline preview on right (shows how copy renders per placement)

Pro mode

  • Per-ad copy with all fields

  • Multi-line text editor for primary text

  • Multi-headline / multi-description for Google RSA (add up to 15 headlines per ad)

  • Live preview per placement

Bulk Launch

  • Copy columns per row

  • For RSA: array fields (headlines: ["headline 1", "headline 2", ...])

In the data model

Verified CanonicalAd (apps/backend/src/types/campaigns/canonical.types.ts):

ad.copy.primaryText
ad.copy.headline
ad.copy.description
ad.cta            // CallToAction enum
ad.destinationUrl

Common issues

  • Truncated on mobile: primary text too long. Move key message to first 80 chars OR shorten.

  • CTA not matching objective: validation warning. Use a CTA aligned with the campaign goal.

  • Headline rejected for trademark: avoid competitor brand names.

  • Copy rejected for policy: review Meta/Google's ad policies; rewrite without prohibited claims.

  • Special characters not rendering: some platforms strip emoji or special unicode. Test in preview.

  • RSA performance poor (Google): provide more headline variations (10+); Google needs variation to optimize.

Best practices for testing

Match creative + copy variations

Don't test creative changes AND copy changes simultaneously — can't tell what drove the result. Test one variable at a time.

Use Wavo for ideation

Ask Wavo: "Suggest 5 headline variations for this offer" or "What CTA should I use for this campaign?". Wavo references the campaign context.

Save winning copy as template

After identifying winning copy in a test: save as Campaign Template (cc-118) for reuse.

Related