Short answer: on bsky.app, open the post's three-dot menu, choose Embed post, copy the snippet and paste it into your page's HTML. Or paste the post link into embed.bsky.app. In WordPress, pasting the post link is usually enough.
Below: the steps, what the code actually does, the oEmbed endpoint for developers, and how to fix an embed that only shows plain text.
On this page:
- The direct answer
- How to get the embed code
- What the embed code looks like
- Embedding in WordPress
- The oEmbed endpoint for developers
- Why an embed shows only text
- What embeds will not show
- Embedding a profile or feed
- Frequently asked questions
The Direct Answer
| Question | Answer |
|---|---|
| Where is the embed code? | Post menu → Embed post on bsky.app |
| Is there a web tool? | Yes – paste a link at embed.bsky.app |
| Works in WordPress? | Yes – paste the post URL or use a Custom HTML block |
| Is there an oEmbed API? | Yes – https://embed.bsky.app/oembed |
| Do I need a Bluesky account to view it? | No – visitors see it logged out |
| Can I embed a whole profile? | Not officially – single posts only |
How Do You Get the Embed Code for a Bluesky Post?
- Open the post on bsky.app. Find the post you want to embed in the web app at bsky.app.
- Choose Embed post. Open the post's three-dot menu and choose Embed post.
- Copy the code. Copy the HTML snippet. It is a blockquote containing the post text, plus one script tag.
- Paste it into your page. Paste the snippet into your page's HTML where you want the post to appear, or into a Custom HTML block in your site builder.
- Publish and check. Publish the page and confirm the plain-text quote turns into the full post card.
If you are on your phone or only have the link, go to embed.bsky.app in a browser and paste the post URL. It produces the identical snippet.
What Does the Bluesky Embed Code Look Like?
Here is the real embed code for Bluesky's June 2026 announcement post, lightly wrapped for reading:
<blockquote class="bluesky-embed"
data-bluesky-uri="at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3mnslrkd6ok2g"
data-bluesky-cid="bafyreigh4yjzzjiwjrlm4xe5yiu456ncqc6tfnf5ctup2sii7knhdineru">
<p lang="en">v1.123 is live! You can now attach up to 10 photos in posts. ...</p>
— <a href="https://bsky.app/profile/did:plc:z72i7hdynmk6r22z27h6tvur?ref_src=embed">Bluesky (@bsky.app)</a>
<a href="https://bsky.app/profile/did:plc:z72i7hdynmk6r22z27h6tvur/post/3mnslrkd6ok2g?ref_src=embed">2026-06-08T21:10:01.530Z</a>
</blockquote>
<script async src="https://embed.bsky.app/static/embed.js" charset="utf-8"></script>
Two parts:
- The blockquote is a plain-text fallback: the post text, the author, and a link. It is readable by search engines and by visitors with JavaScript off.
- The script finds every
bluesky-embedblockquote on the page and swaps it for an iframe that loads the post live, with images, video, link cards and quote posts.
Notice the post is identified by its AT-URI, which uses the author's DID rather than their handle. That means the embed keeps working if the author changes their handle – for example to a custom domain. If you embed several posts on one page, you only need the script tag once.
How Do You Embed a Bluesky Post in WordPress?
Recent versions of WordPress recognize Bluesky links, so in the block editor:
- Paste the link. Paste the
https://bsky.app/profile/.../post/...URL on its own line. WordPress fetches the embed automatically. - Or use a Custom HTML block and paste the full snippet. Use this if your site runs an older WordPress, or if the link stays a plain link.
Other site builders work the same way as the Custom HTML option: Squarespace's Code block, Ghost's HTML card, Webflow's Embed element. Some editors strip <script> tags from rich-text fields; use the dedicated HTML or code block instead.
How Does the Bluesky oEmbed Endpoint Work?
If you build a CMS, a forum or a static site generator, you can fetch embed HTML yourself:
GET https://embed.bsky.app/oembed?url=https://bsky.app/profile/bsky.app/post/3mnslrkd6ok2g
The response is JSON:
{
"type": "rich",
"version": "1.0",
"author_name": "Bluesky (@bsky.app)",
"author_url": "https://bsky.app/profile/bsky.app",
"provider_name": "Bluesky Social",
"provider_url": "https://bsky.app",
"cache_age": 86400,
"width": 600,
"height": null,
"html": "<blockquote class=\"bluesky-embed\" ...>...</blockquote><script async src=\"https://embed.bsky.app/static/embed.js\" ...></script>"
}
urlis required and can be a bsky.app post link or an AT-URI.maxwidthmust be between 220 and 600; it defaults to 600.heightis alwaysnull, because the post's height is not known until it renders. Leave room for it to grow.- JSON is the only format.
cache_ageis 86,400 seconds, so caching the HTML for a day is fine.
In a static site build, call the endpoint once per post at build time and store the html. Space out bulk requests; like the rest of the Bluesky stack it is not a place to fire thousands of calls at once (see Bluesky rate limits). The AT-URI format is explained in getting started with ATProtocol.
Why Does My Embedded Bluesky Post Only Show Text?
If you see the post text with a dash and the author's name but no card, the script did not run. In order of likelihood:
- The editor stripped the script tag. Re-paste into an HTML block and check the page source for
embed.bsky.app/static/embed.js. - A content security policy blocks it. Allow
https://embed.bsky.appinscript-srcandframe-src. - A privacy or ad blocker on your own browser blocks third-party embeds. Test in a private window.
- The page adds the blockquote after load, as in a single-page app. The script may not see blockquotes inserted after it ran; load it again after adding new embeds.
Which Bluesky Posts Can't Be Embedded?
Embeds show what a logged-out visitor to bsky.app would see. So:
- Accounts that hide from logged-out users – Bluesky's setting to discourage apps from showing your account to logged-out users is honored. More on that in can you make a Bluesky account private?
- Deleted posts and accounts – an embed of a deleted post stops showing it, even on pages that embedded it long ago.
- Adult content – posts labeled adult-only are redacted.
That last point cuts both ways: an embed is not a permanent copy. If you are quoting a post as evidence or for an archive, take a screenshot (with alt text) or a backup of the account as well.
Also remember that loading the embed means your visitors' browsers contact embed.bsky.app, like any third-party embed. If your privacy policy lists embedded content providers, add Bluesky.
Can You Embed a Bluesky Profile or Feed?
Not with the official tool, which only does single posts. Options:
- RSS. Every profile has a feed at
https://bsky.app/profile/HANDLE/rss; many site builders have an RSS widget. See Bluesky RSS feeds. - Third-party widgets that call the public API to show a timeline. Check what they load and whether they ask you to log in – a profile widget never needs your password.
- Build your own with
app.bsky.feed.getAuthorFeed, which works without authentication for public accounts.
Frequently Asked Questions
How do you embed a Bluesky post?
On bsky.app, open the post's three-dot menu and choose Embed post, then copy the HTML snippet into your page. You can also paste any post link into embed.bsky.app to get the same code.
Can you embed a Bluesky post in WordPress?
Yes. In the block editor, paste the bsky.app post link on its own line or into an Embed block and WordPress turns it into an embedded post. You can also paste the HTML snippet into a Custom HTML block.
Does Bluesky have an oEmbed endpoint?
Yes. The endpoint is https://embed.bsky.app/oembed and takes the post URL as the url parameter. It returns JSON only, and maxwidth must be between 220 and 600 pixels.
Why is my embedded Bluesky post only showing plain text?
The embed script has not run. The snippet is a blockquote plus a script from embed.bsky.app that replaces it with the full post. Check that the script tag was not stripped by your editor and is not blocked by a content security policy.
Can you embed a post from an account that hides from logged-out users?
No. Embeds follow the same rules as the logged-out web, so posts from accounts that hide from logged-out visitors, deleted posts and adult content are not shown in full.
Can you embed a whole Bluesky profile or feed?
Bluesky's official embed covers single posts only. To show a profile's recent posts, use a third-party widget or the profile's RSS feed.
Sharing Posts From Skyscraper
Embeds are for web pages. When you want to share a post somewhere else, Skyscraper can:
- Share any post as an image – for slides, newsletters or apps that do not render embeds
- Send a post straight into a DM or group chat
- Open bsky.app links in Skyscraper with the Safari extension