Mastodon Hashtag Cross-Posting to Bluesky: Tag Behavior Differences
🔍 WiseChecker

Mastodon Hashtag Cross-Posting to Bluesky: Tag Behavior Differences

When you cross-post from Mastodon to Bluesky, hashtags do not work the same way on both platforms. Mastodon treats hashtags as clickable topic markers that federate across instances. Bluesky uses a different protocol where tags are not natively supported in the same fashion. This mismatch causes tags to break, become invisible, or appear as plain text when your Mastodon post arrives on Bluesky. This article explains the exact differences in tag behavior, shows how to set up cross-posting correctly, and lists the common pitfalls to avoid.

Key Takeaways: Mastodon to Bluesky Hashtag Cross-Posting

  • Mastodon hashtags use # prefix with federation: Tags appear in the local timeline and federate to other Mastodon instances automatically.
  • Bluesky does not support native hashtags: The AT Protocol treats # prefixed words as plain text, not clickable tags.
  • Cross-posting tools like Moa or SkyBridge: These services convert Mastodon hashtags to Bluesky-compatible format or strip them entirely.

ADVERTISEMENT

Why Mastodon Hashtags Break on Bluesky

Mastodon is built on the ActivityPub protocol. Hashtags are a core feature: when you write #example, the instance indexes it, makes it clickable, and includes it in the federated timeline. The hashtag is a first-class object in the ActivityPub message.

Bluesky uses the AT Protocol, which has no native concept of hashtags. The AT Protocol supports facets — rich text annotations that can mark a range of text as a URL, a mention, or a tag. However, most cross-posting bridges do not generate facets for hashtags. The bridge simply copies the text including the # symbol, but Bluesky does not render it as a link. The result is plain, unclickable text.

Federation vs. Non-Federation

Mastodon instances federate hashtags across servers. When you post #tech on your Mastodon instance, other instances that follow your account or search for #tech see the post. On Bluesky, there is no equivalent global tag search. The platform relies on feeds and algorithms rather than user-driven hashtag indexing. Even if a bridge creates a facet, the tag is not discoverable outside the post itself.

Character Count and Formatting Differences

Mastodon counts the # symbol as part of the character limit — 500 characters. Bluesky has a 300-character limit. When cross-posting, a long Mastodon post with multiple hashtags may exceed Bluesky’s limit. The bridge then truncates the post, often removing the hashtags at the end. Additionally, Mastodon allows uppercase letters in hashtags, but Bluesky’s facet system treats them case-sensitively. The same tag written as #Tech and #tech may behave differently on Bluesky.

Steps to Set Up Cross-Posting Between Mastodon and Bluesky

You need a bridge service to relay posts from Mastodon to Bluesky. Two common options are Moa (moa.party) and SkyBridge (skybridge.fly.dev). Both allow you to connect your Mastodon account and automatically cross-post to Bluesky. Below are the steps using Moa as the example.

  1. Sign in to Moa with your Mastodon account
    Go to moa.party and click the Mastodon login button. Authorize the app to read and write your posts. Moa will ask for permission to see your account information and post on your behalf.
  2. Connect your Bluesky account
    After authorizing Mastodon, click the Bluesky login button. Enter your Bluesky handle and app password. Do not use your main Bluesky password. Create an app password in Bluesky Settings > App Passwords.
  3. Configure cross-posting direction
    In the Moa dashboard, select Mastodon to Bluesky as the direction. You can also choose to cross-post from Bluesky to Mastodon or both ways. For this article, select the one-way Mastodon to Bluesky option.
  4. Set hashtag handling preferences
    Moa offers a setting called “Convert hashtags to Bluesky format.” Enable this option. When active, Moa converts Mastodon hashtags to Bluesky-compatible facets. If you leave it disabled, hashtags appear as plain text.
  5. Test the connection with a sample post
    Post a short message on Mastodon that includes one hashtag, for example: “Testing cross-post #MastodonToBluesky.” Wait a few minutes and check your Bluesky timeline. The post should appear with the hashtag rendered as a clickable link if the conversion setting is on.
  6. Adjust post length to fit Bluesky’s limit
    Mastodon allows 500 characters. Bluesky allows 300. If your Mastodon post is longer than 300 characters, Moa truncates it. To avoid losing hashtags, keep your Mastodon posts under 280 characters when cross-posting. This ensures the full text including tags fits within Bluesky’s limit.

Manual Alternative: Use a Mastodon Bot

If you prefer not to use a third-party bridge, you can run a Mastodon bot that forwards posts to Bluesky via the AT Protocol API. This requires coding knowledge. The bot reads your Mastodon feed via the Mastodon API, extracts hashtags, creates facets, and posts to Bluesky. Most users find Moa or SkyBridge simpler.

ADVERTISEMENT

Common Pitfalls When Cross-Posting Hashtags

Hashtags Appear as Plain Text on Bluesky

This is the most frequent complaint. The bridge did not convert the tag to a facet. Check your bridge settings. In Moa, ensure “Convert hashtags to Bluesky format” is enabled. In SkyBridge, look for a similar option labeled “Hashtag conversion.” If the setting is on and tags still appear as plain text, the bridge may have a bug. Try disconnecting and reconnecting your accounts.

Post Truncated and Hashtags Missing

Your Mastodon post exceeded 300 characters. The bridge truncates the post to fit Bluesky’s limit. Hashtags at the end of the post are the first to be removed. To fix this, keep your Mastodon posts under 280 characters. Move important hashtags to the beginning of the post body instead of the end.

Hashtag Case Sensitivity Causes Mismatch

Bluesky facets are case-sensitive. If you write #Tech on Mastodon, the facet on Bluesky points to the exact string “Tech.” A user searching for “tech” on Bluesky will not find the post. To avoid this, use lowercase for all hashtags when cross-posting. For example, write #tech instead of #Tech or #TECH.

Duplicate Posts on Bluesky

If you use more than one bridge service, you may get duplicate posts. For example, using both Moa and SkyBridge simultaneously. Disable one of them. If you also manually cross-post, the bridge and manual post create duplicates. Decide on one method and stick with it.

Mastodon Hashtag vs. Bluesky Facet: Feature Comparison

Item Mastodon Hashtag Bluesky Facet
Protocol ActivityPub native tag AT Protocol rich text annotation
Clickable Yes, links to tag timeline Yes, if facet is created
Discoverability Federated across instances Only within the post, no global search
Case sensitivity Case-insensitive Case-sensitive
Character limit impact Counts toward 500-character limit Counts toward 300-character limit
Cross-post support Automatic via bridge Requires facet generation

The table shows that the core difference is discoverability. Mastodon hashtags federate and are searchable globally. Bluesky facets only exist within the post and rely on feeds for discovery. Even with perfect conversion, a Mastodon hashtag cross-posted to Bluesky will not have the same reach.

To maximize visibility on both platforms, use hashtags on Mastodon and rely on Bluesky’s feed system for discovery. Do not expect cross-posted hashtags to perform identically. Consider adding a note in your Mastodon post that directs followers to your Bluesky profile for continued conversation.

You can now set up cross-posting between Mastodon and Bluesky with correct hashtag handling. Use Moa or SkyBridge with the hashtag conversion setting enabled. Keep your posts under 280 characters to avoid truncation. For best results, use lowercase hashtags and test with a sample post before relying on the bridge for regular use.

ADVERTISEMENT