ContentSling

Writing

The same caption does not fit every platform

Every platform counts your post differently, and three of them are not counting characters at all. Here are the real numbers, and a tool that reads your caption and tells you what is about to break.

You wrote the post once. That was the entire point.

Then Instagram looked fine. Bluesky cut it off mid-sentence. Threads quietly split it in two and nobody read the second half. YouTube just did not post it at all, with no error you could do anything with. It simply did not go.

So there you are at eleven at night with five tabs open, rewriting the same sentence five times, trying to remember which one hates links and which one eats your hashtags.

Here is what nobody tells you. Every platform measures your post differently, and three of them are not counting characters at all. The caption you sized so carefully in one place was already wrong in the other four before you hit post.

These numbers came out of a publishing pipeline rather than off someone else's blog, which is why a few of them disagree with the cheat sheet you have open in the other tab.

The table

Platform Text limit Counted as Images Links in the text
Bluesky 300 Grapheme clusters 4 Only with byte-offset facets
Threads 500 Graphemes 20 Auto-linked
Instagram 2,200 Graphemes 20 in a carousel Never clickable
Facebook 63,206 Graphemes Many Auto-linked, with a preview card
YouTube Title: 100, and required Graphemes Video only Clickable in the description
Pinterest Title 100, description 800 Graphemes 5 in a carousel A destination URL is required
TikTok Photo title 90, description 4,000. Video caption 2,200 UTF-16 runes 35 Not clickable

Alt text: Bluesky 2,000 per image, Pinterest 500. Every platform above accepts it and almost nobody writes it.

Or do not read the table. Paste your own caption into the checker and it will tell you which of these you are about to break, in your own words and your own numbers.

The three that will catch you out

Bluesky is not counting characters

Everyone says 300 characters. Bluesky counts graphemes, which is the thing you would call a letter. An emoji family is one. A flag is one. An accented letter is one. Your character counter says seven, then two, then two.

So it tells you 312 and you spend five minutes trimming a post Bluesky would have taken at 296. Or it tells you 298, Bluesky rejects it on publish, and you find out later. If you find out at all.

Your Bluesky link is probably dead, and it is eating your post

Bluesky does not read your text and go looking for URLs. A link only works if the post carries a separate note saying which bytes the link covers. Bytes, not letters. Put one emoji anywhere before the URL and that number changes.

Get it wrong and the link publishes as grey text nobody can tap. It looks completely normal in the preview. That is the first half of the problem.

The second half costs you room. On Bluesky the words you show and the place they go are two separate things, so a link does not have to sit in your text at full length. A 46 character URL can be eleven characters of text pointing somewhere long. If you paste the whole URL you just spent 35 of your 300 on something nobody reads.

Here is where it gets genuinely confusing, and where you will find contradictory advice. Some counters will tell you a URL costs 22 characters on Bluesky. That is not a rule. The post format allows 300 graphemes and the server counts exactly the text you send it, link and all. The 22 comes from the official app, which quietly rewrites your draft as you type: it swaps the URL in your text for a short version and keeps the real address off to the side.

So the app is not counting differently. It is storing different text. Which is why people hit the wall where a post the Bluesky app happily accepted gets thrown out by anything else with must not be longer than 300 graphemes. Nothing changed except which one of them shortened your link for you.

TikTok charges double for emoji

TikTok counts differently again, and every emoji costs two. A photo title capped at 90 that your editor swears is fine, with four emoji in it, is 94 to TikTok. So it gets cut. Not rejected, cut, which is worse, because nothing tells you it happened.

And Instagram moved the goalposts

Five hashtags. That is the limit now. Instagram brought it in on 18 December 2025 and rolled it out slowly, so plenty of people still have not noticed. It is a hard cap, not a suggestion. If you are still pasting in your old block of thirty, it is being cut, and the five that survive are not the five you would pick.

That one at least got announced. Plenty do not, which is why we keep a dated log of every rule change that affects what you are allowed to publish.

This is where your week goes

You already know that posts written for the platform beat the same thing pasted everywhere. It usually gets blamed on tone. Tone is part of it. Most of it is the list above.

The Bluesky post underperformed because it got cut and lost its point. The Instagram one underperformed because it ends on a link nobody can tap, so the call to action goes nowhere. The Threads one got split and half of it was never seen. None of that is writing. All of it is arithmetic, and all of it was fixable before you posted.

Worth knowing before you go looking for the damage: the numbers each platform shows you cannot be compared to each other as they stand, because every one of them reports a lifetime total.

Small business owners put six to seven hours a week into this, and 64% call it the most frustrating thing they do. Nobody has a spare hour to hand tune five versions of one post against seven different counting systems. So they paste the same thing everywhere and quietly lose on four of them.

Fixing this is the reason ContentSling exists, and there is a link at the bottom for that. First though, find out how bad yours actually is.

Free tool

Paste a caption. See what breaks.

Runs entirely in your browser. Nothing you type is sent anywhere, including to us.

Platforms to check

One free check. No email needed.

So do it properly, then

Fine. Here is what doing it properly actually looks like. Not once. Every time you post anything, forever.

  1. Write to Bluesky's 300 first. Not the Instagram version. Make the whole point land inside 300 so everything longer is an expansion of something that works, rather than a truncation of something that does not.
  2. Decide where the link goes, per platform. Instagram: not in the caption, so do not write a sentence that leans on it. Bluesky: in the text, with the byte offsets worked out. Pinterest: a required field. Facebook: it builds a preview card whether you want one or not.
  3. Write the titles separately. YouTube needs one, Pinterest needs one, both capped at 100. A title is not your first line, and treating it as one is why the YouTube post never went.
  4. Cut to five hashtags. And pick which five, rather than letting Instagram pick for you.
  5. Recount everything in the platform's own units. Graphemes here, runes there. Not your editor's character count, which is wrong on both.
  6. Look at all five renderings before they go. Not your draft. The five actual versions. Almost every bad post that ever went live was approved as a draft that looked nothing like what published.

Six steps. Five platforms. Every post. That is your Sunday.

Or do none of it

That list is exactly what ContentSling does for you. You write the thing once. It builds a version for each platform against that platform's own rules, graphemes on Bluesky and runes on TikTok included, works out the link offsets, writes the titles, cuts the tags to five, and then shows you all five versions exactly as they will appear and waits.

Nothing publishes until you say yes. You get your Sunday back and you stop finding out on Tuesday that the link was dead.

Start a free trial or see how it works

Seven days free. Cancel any time.

Questions people ask

What is the character limit on Bluesky?

300, counted in grapheme clusters rather than characters. Any counter measuring raw string length will disagree with Bluesky, and usually in the direction that gets your post rejected on publish.

Does a URL count as 22 characters on Bluesky?

Not as a rule. The post format allows 300 graphemes and the server counts the text you send, URL and all. The 22 comes from the official Bluesky app, which rewrites your draft as you type: it swaps the URL in your text for a short display version and keeps the real address in a separate field. That is why a post the app accepts can be rejected elsewhere for being over 300.

What is the character limit on Threads?

500. Threads refuses a longer post rather than truncating it, so anything over has to become a reply chain. Where you choose to split decides whether the second part is read at all, because most feeds only show the first.

How many hashtags can I use on Instagram now?

Five, per post and per reel. Instagram announced the cap on 18 December 2025 and rolled it out gradually across accounts, so plenty of people are still writing captions against the old limit of thirty.

Why is the link in my Instagram caption not clickable?

Because Instagram has never made feed caption links clickable. The URL renders as plain text. If your caption ends in a URL, that line is doing nothing, and if it says link in bio then the bio has to actually carry the link.

Does cross-posting the same caption really hurt?

Platform-native posts beat identical cross-posted ones by roughly twenty percent, and the mechanical failures on this page are a large part of why. A caption sized for Instagram is over the limit on Bluesky, over the limit on Threads, and missing the title that YouTube and Pinterest both require.

Checked against each platform's live behaviour, September 2026.