Someone mentioned to me that you can add labels to posts in Bluesky and I have to admit that I had not idea what they were referring to. Looking at them I can understand why I’d not come across them – I’d not had any need for them but what are labels?
Bluesky Labels
A Bluesky label is a tag you can add to your own post to warn others (and moderation tools) that your content may include things like nudity, violence, sexual content, or graphic imagery. They:
- Enable users to filter or blur posts based on content type.
- Help moderation services enforce content guidelines.
- Give creators a way to self-declare content warnings.
At the time of writing labels that users can add to their posts are as follows:
Label Value | UI Label | Explanation |
---|---|---|
porn | Adult | Explicit/erotic sexual content |
sexual | Suggestive | Mild or suggestive sexual themes |
nudity | Nudity | Non‑erotic or artistic nudity |
graphic-media | Graphic Media | Violent or graphic content |
!no-unauthenticated | n/a | makes the content inaccessible to logged-out users in applications which respect the label. |
How Labels look
Here are some examples of what posts look like with those labels applied.
Nudity
Given that this is “supposed” to cover “artistic nudity” this does not hide the content, which I found a bit surprising. Instead you get a content warning label above the post content:

Graphic Content
Any post labeled “porn”, “sexual” or “graphic-media” will have it’s contents initially hidden from view. You can easily display the hidden content by clicking the grey bar:

Hidden Content
“!no-unauthenticated” is an interesting label as it’s only job is to prevent a post being seen by those not logged in to Bluesky. This looks as follows:

Viewing Labels
Clicking on the “x labels have been placed on this content” message opens up a new panel showing which labels have been attached to the post:

Adding Labels via php2Bluesky
In order to send labels with your post, and they apply at post level, not media, you need to either send a single item from the table above as a string or multiple items as an array. A new optional parameter has been added to php2Bluesky, $labels, which allows you to pass any necessary labels, for example:
$response = $php2Bluesky->post_to_bluesky($connection,
$text = "this is the text of your post",
$media = "https://www.spokenlikeageek.com/wp-content/uploads/2025/06/SCR-20250628-jzfa.png",
$link = '',
$alt = "Image of labels applied to a Bluesky post",
$labels = "!no-unauthenticated");
Alternatively, you might do the following for multiple labels:
$response = $php2Bluesky->post_to_bluesky($connection,
$text = "this is the text of your post",
$media = "https://www.spokenlikeageek.com/wp-content/uploads/2025/06/SCR-20250628-jzfa.png",
$link = '',
$alt = "Image of labels applied to a Bluesky post",
$labels = ["!no-unauthenticated", "porn", "sexual"]);
And that’s it – your’re all set. Download the latest version, with label support, from Github or update via composer if you are using it.