Hashtag checker for Threads, X, Bluesky, Mastodon and LinkedIn
Paste a post and see which #words turn into tag links on each network, which stay plain text, and why. Each network's reading comes from its own code or docs, so you can fix a tag before it goes out.
Runs in your browser. Your text and images never leave it.
Updated
Checked for each network as you type. Nothing you type leaves your browser.
Tags on each network
Nothing to check yet
Type a post with a #tag, or try the example, and each network's reading shows up here.
Which #words become links on each network
A # in front of a word doesn't make a tag everywhere. Each network has its own idea of where a tag starts and ends.
| Network | A tag starts | It takes | Left as text | Read from |
|---|---|---|---|---|
| Threads | After a space, a bracket or a quote. Meta doesn't say, so that's our reading. | Everything up to a space or one of . & @ ! ? , ; : | Every tag after the first, and whole numbers like #1. A topic runs up to 50 characters. | Meta's Threads API docs |
| X | After anything but a letter, a digit or & | Letters, digits, _ and a few marks some scripts use inside words, with at least one letter | A tag inside a link, and a tag that runs straight into another # or :// | twitter-text, X's open-source text library |
| Bluesky | At the start of a line, or after a space | Everything up to a space, with at least one character that isn't a digit or punctuation. Punctuation at the end comes off. | Tags over 64 characters | The Bluesky app's code (@atproto/api) |
| Mastodon | At the start of a line, or after a space, on 4.6 and newer. Servers on 4.5 or older also take one after punctuation. | Letters, digits and _, with at least one letter. A middle dot (·, ・) can join words inside a tag. | Numbers alone, and a middle dot at either end | Mastodon's source code |
| After a space, as we read it | One word of letters and digits, as we read it | LinkedIn doesn't say | LinkedIn's API docs, which leave “single word” undefined |
X, Bluesky and Mastodon publish the code that finds tags, so the checker runs the same patterns. Threads describes its rule in its API docs. LinkedIn's docs say a tag is a # and a “single word” without defining one, so that row is our reading and the checker says so.
Threads uses one tag, and makes it the topic
If your Threads hashtags aren't working, this is usually why.
Meta's docs allow one topic tag per post, and the first valid tag in the text is the one used. Every #word after it stays plain text. A tag ends just before a space or any of . & @ ! ? , ; :, so #remote.work makes the topic “remote”. A # followed by a whole number, like #1, isn't a tag at all.
Topic tags run up to 50characters. A closing bracket isn't on Meta's list of characters that end a tag, so leave a space between a tag and a bracket after it. Apps that post through the API can also send the topic on its own, and Meta calls the tag in the text the older way, kept so existing posts still work.
Why a tag works on one network and not another
Most tags link everywhere. These are the ones that don't, and the fix for each.
- Apostrophes, hyphens and dots. X, Mastodon and LinkedIn end a tag at any of them, so
#don'tlinks as#donand#self-hostedas#self. Bluesky keeps going to the next space, and Threads stops only at a dot. Write#SelfHostedinstead. - Brackets and punctuation before the #. X links
(#tag). Bluesky, LinkedIn and Mastodon 4.6 and newer need a space or a line break before the #, so there it stays plain text. Servers still on Mastodon 4.5 or older link it too, so on Mastodon it depends on the server. - Numbers alone.
#2026isn't a tag on X, Bluesky, Mastodon or Threads. Add a word:#100DaysOfCodelinks everywhere. - Two tags with no space between.
#launch#dayis one tag on Bluesky and Threads, links as#launchon Mastodon and isn't a tag on X at all. Put a space between them. - A # inside a link. The part after # in
example.com/#notesbelongs to the link, so it isn't a tag anywhere.
Write tags people and screen readers can read
A tag that links is only half of it. It also has to make sense when someone reads it or hears it.
- Use camel case. Capitalise the first letter of each word, as in
#SocialMediaTips. Accessibility guides advise it so a screen reader says each word instead of running them together. It doesn't split the tag: Mastodon files#SocialMediaTipsand#socialmediatipsunder the same tag, because it lowercases tag names. - Put a space before every tag. Bluesky, Mastodon and LinkedIn need one, and every network takes a tag that has one.
- On Threads, lead with the tag you want as the topic. Only the first valid tag counts, so put it first.
- Keep tags out of alt text.They don't link there, and a screen reader reads them out as part of the description. The alt text counter flags them.
Does Shaflex set the Threads topic for me?
Yes. In Shaflex the first #tag in your draft becomes the Threads topic, marked Auto, and you can pick a different topic before the post goes out. The same draft goes to Threads, X, Bluesky, Mastodon and LinkedIn, each copy fitted to its limit.
See how Shaflex schedules for Threads, X, Bluesky, Mastodon and LinkedIn, how one draft goes to every network, and what the free plan includes.
Where these rules come from
Each one is from the network's own documentation, help pages or source code. We last checked them on .
- Threads API docs: Posts, topic tags (one per post, the first valid tag, where a tag ends)
- twitter-text: validHashtag, the hashtag pattern
- twitter-text: hashtagSpecialChars, the marks a tag may contain
- twitter-text: extractHashtagsWithIndices, tags inside links dropped
- twitter-text: conformance tests for hashtags
- @atproto/api: TAG_REGEX and TRAILING_PUNCTUATION_REGEX
- @atproto/api: detectFacets, how the app links tags
- AT Protocol lexicon app.bsky.richtext.facet: a tag is at most 64 graphemes
- Mastodon source: Tag::HASHTAG_RE
- Mastodon source: Extractor, how a post's tags are found
- Mastodon 4.5 source: HASHTAG_RE before 4.6 changed where a tag starts
- LinkedIn API docs: little text format, HashtagElement and the hashtag template
- State of Iowa Digital Experience: Accessibility tips for social media (camel case hashtags)
- Mastodon source: HashtagNormalizer, how tag names are folded together
- LinkedIn API docs: Posts API, mentions and hashtags in commentary
More free tools
Each one runs in your browser too.
- Text tool
Character counter
Count one draft for Threads, X, Bluesky, Mastodon and LinkedIn at once, and cut it to fit.
Open it - Text tool
Thread maker
Turn long text into a thread for X, Threads, Bluesky or Mastodon, split where paragraphs and sentences end, with links kept whole.
Open it - Text tool
Character limits, every network
Every limit for the five networks: what counts as a character, what a link costs, the source and the day we checked.
Open it
Questions
Why aren't my hashtags working on Threads?
Threads uses one tag per post, the first valid one, and makes it the post's topic. The other #words stay plain text. A tag ends before a space or any of . & @ ! ? , ; : and runs up to 50 characters, and a whole number like #1 isn't a tag.
Why isn't my hashtag working on Bluesky?
Bluesky only starts a tag at the start of a line or after a space, so (#tag) or word#tag stays text. The tag needs at least one character that isn't a digit or punctuation, punctuation at its end is dropped, and tags over 64 characters aren't linked.
Can I use more than one hashtag on Mastodon?
Yes, as many as you like, and each one links. Since Mastodon 4.6 a tag needs a space or a line break before the #. Mastodon lowercases tag names, so #BuildInPublic and #buildinpublic are the same tag and camel case costs you nothing.
How many hashtags can I use on X?
X's own text library links every valid tag, with no cap on how many. Each one counts toward the 280 characters like the rest of the post.
Should I write hashtags in camel case?
Yes, for tags of more than one word. #SocialMediaTips lets a screen reader say each word, where #socialmediatips runs them together. Mastodon files both under the same tag, so you lose nothing there.
Do hashtags work on LinkedIn?
Yes. Type # and a word, and LinkedIn makes it a hashtag. LinkedIn doesn't publish exactly where a tag ends: its docs call it a single word, so this checker reads it as letters and digits after a space, and says so.
Is my text saved or sent anywhere?
No. It's checked in your browser, and your post isn't stored or sent.
Write the post once. Post it everywhere.
In Shaflex your first #tag becomes the Threads topic, and one draft goes out to every network you've connected, on the schedule you set.
Free plan, no card needed.


