guides

Instagram link sticker character limit — the 30-character ceiling and how to write CTAs that fit (2026)

the linkboo team·11 min read·updated Mon Jun 01 2026 17:00:00 GMT-0700 (Pacific Daylight Time)
On this page

the answer, up front

Instagram caps the customized text on a Story link sticker at 30 characters, including spaces and emoji. The URL itself lives in a separate field with its own (much larger) ceiling — the 30 only applies to the visible button copy. The cap is enforced at type-time as a hard input-field block: Instagram simply stops accepting keystrokes at character 31. There is no post-publish silent truncation to discover. The limit is identical on iOS and Android.

If you landed here because your carefully-written CTA got cut off, we're going to fix that — first by naming what counts, then by giving you a workshop for writing CTAs that fit, then by naming the bigger problem that's actually hurting your conversion rate even when the CTA fits perfectly. If you want the full Story link sticker lifecycle instead (how to add one, analytics, every failure mode, Reels parity), the full Story link sticker guide is the place to go.

what counts, what doesn't, what happens at the ceiling

The reference. No flourishes.

  • The limit is 30 characters on the customized/visible text of the link sticker. Verified across the current iOS and Android sticker editors (May 2026). The input field stops accepting keystrokes at character 31.
  • Spaces count. Book my spot = 12 characters.
  • Emoji count — one each, regardless of how visually dense they appear. A single 🔗 occupies one character in the count and roughly two-to-three character-widths in the rendered sticker. This is the most leverage-able single detail in the article — see the workshop below.
  • Punctuation counts. Get it → = 8 characters; the arrow is a single character, the same cost as a period.
  • The URL itself does NOT count toward the 30-character ceiling. The URL lives in a separate input field above the customize-text field, with its own (much higher, roughly ~2,000-character) cap — long URLs with full UTM trains fit there fine. The 30 is only the visible button copy.
  • If you don't customize the text, Instagram displays a shortened version of the destination URL (typically the domain plus the first part of the path). The 30-character ceiling only applies when you tap Customize sticker text and enter your own copy.
  • The input field hard-stops at 30; it does not warn, it does not truncate, it does not silently rewrite. If your draft CTA reads as cut off after you publish, you typed it that way. The most common confusion in support threads is creators thinking Instagram cut their copy when in fact they hit the input cap mid-typing and didn't notice.
  • iOS and Android: identical limit, identical behavior as of the late-2024 sticker tray refresh. Earlier rumors of a 28-character Android cap are outdated. One Android wrinkle: clearing the Instagram app cache (Settings → Apps → Instagram → Storage → Clear Cache) occasionally fixes a UI bug where the character counter doesn't render — the underlying limit still enforces.
  • Web/desktop: not applicable. Stories can't be created from desktop natively. Meta Business Suite and third-party schedulers (Later, Buffer, Hootsuite) inherit the same 30-character limit.

That's the rule. The next section is what you actually came for — how to write copy that fits and converts.

how to write a 30-character CTA that actually gets tapped

The 30-character constraint is solvable craft. The three patterns below cover roughly 95% of useful CTAs.

the three patterns that fit

  1. Imperative verb + object (the workhorse). Get the guide (13), Book your spot (14), Shop the drop (13), Read the post (13). Average 12–15 characters; leaves room for a leading emoji and an arrow.
  2. Imperative verb + benefit (when the object isn't the point). Save your seat (14), Claim your discount (19), Watch it free (13), Get 20% off (11). On commercial destinations, the benefit-first variant outperforms object-first roughly 1.3–1.7×, per Tailwind, Later, and Hootsuite case studies.
  3. Single emoji + verb + object (the highest-density pattern). 🔗 Get the link (15), 👇 Shop now (11), 🎵 Pre-save it (14), 📩 Subscribe free (17). The leading emoji earns disproportionate visual weight per character. Use sparingly — one per sticker; two compete with each other.

the three patterns that don't fit (and what to do instead)

  1. The descriptive caption. The new collection is finally here (35) — over by 5. Cut to Shop the new drop (17) or See the new collection (22). The sticker is a verb; descriptive copy belongs in your text overlays, not the button.
  2. The polite request. Please tap here to see more (27) fits, but politeness reads as weak in 30-character space. Replace with the imperative: See it here → (13). Conversion lives on imperatives, not requests.
  3. The branded prefix. [BRAND] x [PARTNER]: shop the launch (35+) — over. The brand prefix burns characters viewers already know about (they're on your Story). Drop the brand, lead with the action: Shop the launch (15) or Shop x [PARTNER] (15).

worked examples by destination category

Five highest-converting destination types, three CTA options each, character counts shown.

  • Newsletter signup: Subscribe free (14), 📩 Get the newsletter (21), Free weekly read (16)
  • E-commerce / Shopify / Etsy: Shop the drop (13), 🛍 Get it now (12), Sold out soon → (15)
  • Music pre-save / Spotify: Pre-save it (11), 🎵 Save the album (16), Hear it first → (15)
  • Subscription / OnlyFans / Patreon: Subscribe now (13), 🔓 Unlock access (15), Full content → (14)
  • Event RSVP / Eventbrite: RSVP free (9), 📍 Get tickets (14), Save your spot (14)

A/B testing CTA variants in 24-hour Story cycles is trivial. Post version A, note the tap-through rate, post version B 24 hours later, compare. Story expiry is your free testing harness.

emoji, special characters, and the "what counts" edge cases

Reference subsection for the long-tail edge-case queries.

  • Do emojis count? Yes. Each emoji is one character regardless of visual density. A composite emoji (e.g. 👩🏽‍💻 — a multi-codepoint sequence joined by zero-width joiners under the hood) is still counted as one. Instagram's editor compresses the count correctly.
  • Do arrows (→ ↓ ↗) count? Yes. One character each. They earn directional attention for the same cost as a period.
  • Do markdown-style formatting tricks (bold, italic) work? No. Some posts mention asterisk-bold (*bold*) — that's a Stories text overlay trick (unreliable); it does not apply in the link sticker. The sticker copy renders in a single fixed style.
  • Do non-Latin scripts count by character or by byte? By character (grapheme). 안녕 is 2 characters, not 6 bytes. CJK scripts get more semantic density per character — useful for non-English audiences.
  • Do invisible / zero-width characters count? Yes. Pasted text from rich-text sources sometimes carries zero-width joiners or BOMs that silently consume characters. If your draft fits in a plain-text editor but won't fit in the sticker, re-paste through Notes or TextEdit first.

the part nobody tells you — the 30-character limit isn't your conversion bottleneck

The number is the friction you noticed. Here's the friction you didn't.

Even with a perfect 30-character CTA — verb-first, emoji-leading, benefit-anchored — the tap that follows your sticker doesn't open in Safari (on iOS) or Chrome (on Android). It opens inside Instagram's in-app browser — a webview built into Instagram itself, with its own cookie jar, its own session storage, and zero awareness of any other browser on the viewer's phone.

The practical consequence: even with a great CTA, the destination loads logged-out. Spotify pre-saves silently fail because the OAuth pop-up is suppressed inside the webview: Spotify pre-save link from Instagram. OnlyFans subscribers see the login wall instead of the subscribe button: OnlyFans bio link from Instagram. Substack signup forms 403 silently: Substack subscribe from Instagram. Shopify checkouts render without Apple Pay: Shopify Apple Pay missing in Instagram browser.

This is the in-app browser logged-out problem, applied to the surface you're configuring right now. The character limit is the friction you noticed. The cookie jar handoff is the friction you didn't.

The full mechanism is in the Instagram in-app browser deep-dive. The viewer-side manual escape is in the iOS step-by-step. The creator-side structural fix — bouncing the destination out of the webview into Safari before the page loads — is what linkboo's escape flow does automatically. To confirm what your viewers see right now, the in-app browser detector tool tells you which browser is loading the page.

Quick reference for the long-tail searchers comparing IG link surfaces.

Surface Visible text limit URL limit What happens if you exceed
Story link sticker (customized text) 30 chars ~2,000 chars Input field hard-stops at 30; URL field rejects on save
Bio website field n/a (no custom text) 80 chars (URL itself) Rejects on save, sometimes silently — see Instagram link character limit
Native bio multi-link title ~30 chars ~2,000 chars Input hard-stops
DM link n/a (no custom text) ~500 chars before previews fail Link still works, preview drops
Broadcast channel link n/a ~2,000 chars Standard URL behavior

The Story link sticker is the only IG link surface where the visible text is fully customizable AND has a 30-character ceiling. Bio multi-link titles are close (also ~30 chars) but they render in a dropdown that most viewers never expand — covered in detail in the multiple-links guide.

workarounds when 30 characters genuinely isn't enough

Three real workarounds, ranked by effectiveness.

  1. Use the imperative + emoji compression first. Most "30 isn't enough" cases are actually "I haven't tried to fit it in 30 yet." Free 30-day trial — claim seat (30, exactly) is doable with the right verb.
  2. Split into multiple Story frames with sequenced CTAs. One link sticker per frame, but nothing stops you posting multiple frames. Frame 1: scene-setter, no link. Frame 2: hook plus the first half of the offer. Frame 3: the second half plus the link sticker with a clean CTA. Decomposes a 60-character message into two readable beats with the link landing on a self-qualified viewer.
  3. Point the sticker at a link-in-bio page with the longer CTA baked in. Your Story sticker reads See the offer → (16); the destination page reads Free 30-day trial of the cohort starting June 1 — claim your seat in full prose. The most overlooked workaround, because creators treat the bio page as a list of links rather than the longer-form CTA surface it actually is. Bonus: a link-in-bio destination that ships an in-app browser escape closes both gaps in one hop — longer CTA AND conversion infrastructure together.

frequently asked

What's the character limit for Instagram Story link sticker text? 30 characters, including spaces and emoji. The limit is a hard input-field cap — Instagram won't let you type past it. No post-publish silent truncation.

Does the URL count toward the 30-character limit? No. The URL lives in a separate field with its own ~2,000-character ceiling. The 30 applies only to the visible button text. Long URLs with full UTM trains fit fine.

Do emojis count? Yes. Each emoji is one character, even multi-codepoint composites like 👩🏽‍💻. Use sparingly — one emoji per sticker earns the most visual leverage; two emoji dilute the CTA.

What happens if I try to type more than 30 characters? Nothing. The input field stops accepting keystrokes at character 31. No truncation, no warning, no silent rewrite — the cap enforces at type-time.

Is the limit different on iOS vs Android? No. As of the late-2024 sticker editor refresh, both platforms enforce the same 30-character limit identically. Earlier rumors of a 28-character Android cap are outdated.

Can I edit the sticker text after I publish the Story? Yes. Tap the sticker on your live Story, choose Edit Link, update the text. The 30-character limit still applies; the media itself doesn't need re-uploading.

Why is my Story link sticker text getting cut off after I publish? It isn't being truncated by Instagram — the input field would have blocked typing past 30 in the first place. The most common cause of "looks cut off after publish" is the sticker physically overlapping with Instagram's UI (reply field, close button) on smaller devices. Move it into the safe zone (~250px from top and bottom of canvas).

Why does my Story link tap count look good but destination conversions look bad? Almost always the in-app browser handoff — the link counts the tap, but Instagram's webview can't see your viewer's Safari or Chrome cookies, so the destination loads logged-out. Detail: why am I logged out clicking an Instagram link.

the bottom line

The Instagram Story link sticker caps customized text at 30 characters. The URL doesn't count. Emojis do. The cap is enforced at type-time, not post-publish — if your CTA reads as cut off, you typed it that way. The 30-character constraint is solvable craft (imperative verb + emoji compression + benefit anchor) once you accept the ceiling.

The constraint nobody on the SERP names — and the one that actually hurts your conversion rate — is the in-app browser handoff that strips viewer cookies after the tap. Fixing the CTA is craft. Fixing the handoff is infrastructure. Set up linkboo → — or see plans.

Stop losing the click after the tap.

linkboo escapes the in-app browser so your real page loads — fast.

Start for free →