How to Embed a Photo Album on a Website
Last updated: October 26, 2026
To embed a photo album on a website, use a service that gives you an embed code: of the four services compared here, only Viallo and Flickr offer one. Viallo's share panel hands you a linked preview card and an iframe that draws the album as a grid of thumbnails.

Two Snippets, and Which One You Actually Want
Open an album, press Share, and under the link itself there is an Embed button on a computer, or an Embed on your website row on a phone, with two options. The first is an image, and it is the one to reach for unless you have a specific reason not to:
<a href="https://www.viallo.app/share/YOUR_LINK_ID" target="_blank" rel="noopener">
<img src="https://www.viallo.app/api/preview/YOUR_LINK_ID" alt="Summer in Croatia" width="600">
</a>That is a picture wrapped in a link, so it needs an editor that accepts an image and a link and nothing else. The image it points at is the same 1200x630 card a chat app draws when you paste the link into a thread, built out of the album's own cover photo, and it updates by itself when you change the cover.

The second option is the frame:
<iframe src="https://www.viallo.app/embed/YOUR_LINK_ID" width="100%" height="480"
style="border:0" loading="lazy" title="Summer in Croatia"></iframe>Use this one where you control the page and you want the album to look like part of it - your own site, a Ghost or WordPress install, a Notion page. It is a real grid rather than a single flat image, so a reader sees several photographs at once instead of one.
What Ends Up Inside the Frame
The embed is a deliberately narrow view of the album, and the narrowness is the interesting part. It renders three things: the album title, a grid of thumbnails, and a button reading Open the album with the album's photo count beside it when there are more photos than the grid is showing. The grid is two columns on a phone and three from about 360 pixels of width upward, and it stops at 24 thumbnails however large the album is.

Everything else stays behind. The data the embed page is allowed to read is cut down to two fields per photo, an identifier and a thumbnail address, which is why the markup on your page cannot contain a full-resolution original even by accident. There is no download button, no upload affordance, no map, no owner name and no email address. If a visitor wants any of that they follow the button, which opens the album itself in a new tab - and the full-resolution originals live there, on a page whose behavior you already understand.
Viallo is a private photo sharing platform, and two of its defaults matter for this. Viewers never make an account, so a reader who clicks through from your page lands on photographs rather than a signup wall. And the stored file is the file you uploaded, so a visitor who downloads from the album gets your original rather than a smaller copy.
One limitation worth knowing before you plan around it: a profile link, the single link that spans every album you own, cannot be embedded. There is no one album for the frame to draw, so it shows an unavailable state instead. Embed a per-album link.
Which Photo Services Hand You an Embed Code
Photo services differ in whether they hand you code at all. Each of the four rows below was read on 26 October 2026: the three services from their own help pages, linked in the service name, and Viallo from the source of its embed route. The sentence behind every cell is in the dataset beside this post.
| Service | Embed code? | Album must be public? | What the page gets |
|---|---|---|---|
| Viallo | Yes: linked image or iframe | No: the album's share link is enough | A linked card or a thumbnail grid |
| Flickr | Yes: Share, then Embed | Yes: all album content must be Public | An embedded album or a single photo |
| Google Photos | No | n/a | A link anyone with it can view |
| iCloud Shared Albums | No | n/a | A link set to Anyone with the Link |
The Flickr row is the one worth dwelling on, because it shows the trade that comes with an embed. Flickr's help says that when you embed an album, all content in the album must be set to Public. Viallo's embed runs off an ordinary share link instead, and the embed page itself is marked as not to be indexed, so a search engine crawling your site cannot pull the album into its index through the frame.
Google Photos is the common disappointment. Its help explains how to create a link that anyone with it can view, and lists no embed option at all. The link opens the album in Google Photos; it does not put the photographs on your page.

The Frame Carries No Analytics and No Cookie Banner
An embed is an unusual thing to ship, because the code runs on a page that belongs to somebody else and is read by people who never chose to load Viallo at all. So nothing analytical runs inside it. Google Analytics, the Meta pixel, the product analytics, the page-view tracking and the advertising click-id capture each check whether they are inside the embed route and stop there. No consent chrome renders either - a cookie banner appearing inside a frame on your page would be your compliance problem, created by a picture you pasted in.
The framing rule is the other half of it. Every route on the site refuses to be framed at all; the embed route is the single exception, and it is the only one that omits the framing directives. That is a narrow hole on purpose, so that a share page or an album page cannot be dropped into a frame somewhere and dressed up as part of another site.
Why the oEmbed Answer Is a Photo
Some editors do not want a snippet at all. Paste a bare URL into one that supports oEmbed and it asks the originating site what to do with it, over the small protocol of that name. Viallo answers that question at /api/oembed, and the answer it gives is type: photo.
That is a considered choice rather than a limitation. The protocol also has a rich type, which carries arbitrary markup that the receiving editor has to rebuild, and editors differ in what they rebuild. A photo response is a URL and a size, so pasting the link gets you the linked card instead of an interactive block whose behavior depends on the editor. If you want the live grid in WordPress, paste the iframe snippet into a custom HTML block.
A few details that save a debugging session:
- The endpoint answers JSON only. Ask it for XML and it says so with a 501 rather than pretending.
- It advertises a fixed 600x315 thumbnail, and honors
maxwidthandmaxheightby scaling the photo's 1200x630 size down to fit. - It suggests a one-hour cache, so a consumer can keep the card for an hour instead of fetching it again on every page view.
- The page sizes itself from a 240-pixel floor and grows with its content rather than reading the viewport, so a short album does not leave a tall empty frame.
The preview image itself is a progressive JPEG at quality 82 rather than a PNG. That follows Meta's WhatsApp documentation, which asks for the preview image to be under 600 KB.
What Your Page Shows After the Link Stops Working
An embed outlives the decision to embed it. You paste a frame into a post in September, and in March you revoke its link or delete the album. The post is still live, and the frame in it now points at nothing. The embed carries the album's View only or Add photos link, and revoking that link from its row in the Share sheet takes the frame down without touching the album. The View only and Add photos links carry no expiry date in the Share sheet, so the frame keeps showing the album until you revoke the link or delete the album.
What the reader sees at that point is a short notice inside the frame, This album is no longer shared, and nothing about the album: not the title, not a thumbnail. The image snippet can lag, because the card behind it is cached and can keep showing the cover for up to about an hour. A consumer asking the oEmbed endpoint about the same link gets a refusal rather than a stale card.
There is one distinction the frame is careful about, and it is the kind of thing that only shows up in production. If Viallo's own backend fails to answer - an outage, a timeout - the frame does not claim the album was revoked. Saying "this album is no longer shared" on somebody else's website is a statement about the owner's intentions, and publishing that because of a five-second network fault would be a lie that stays up for as long as the fault does. A transport failure reads as a transport failure: the frame says This album could not be loaded right now.
Putting One On a Page
- Open the album and press Share. On a phone, Share is in the album's ⋮ menu.
- Leave the pill next to Anyone with the link on View only. The embed code always carries the link that pill shows, so with Add photos selected, anyone who follows it from your page can upload.
- Press Embed under the link, or on a phone tap Embed on your website, and choose Image or Iframe. Copy the code.
- Paste it into your page. In WordPress that is a Custom HTML block; in Ghost an HTML card; in Notion an Embed block.
- Load the published page in a private window. You are checking that you see what a stranger sees, which is the whole point of the exercise.

If you are a photographer putting client work on a portfolio page, the thing to read next is private photo sharing for photographers, because the interesting question there is not the embed but which link you embed and what it is allowed to do.
How was this checked?
The four rows in the embed table were checked on 26 October 2026. Each of the three services was read from its own help page, fetched with curl, and the Viallo row and the frame's limits come from the product's source. Every value and the sentence that supports it is in dataset.csv, and check.py re-fetches each page and fails if a sentence it relies on is gone.
Frequently Asked Questions
What is the best way to put a photo album on a website?
Use a service that gives you an embed code, and prefer a linked preview image over an iframe unless you control the page. Viallo offers both from the share panel, and the image version is a plain link around an image, so it needs no iframe support. Flickr's help also documents an album embed, and says all content in the album must be set to Public.
How do I embed a photo album in WordPress?
Paste the iframe snippet into a Custom HTML block. If you would rather not touch HTML, paste the bare share URL on its own line and see whether a card appears; where the editor sends an oEmbed request, Viallo answers with a linked card.
Is it private to embed an album on a public page?
Less private than not embedding it, and that is the honest answer - anyone who can read the page can reach the album. What the embed does control is how much goes with it: the frame carries thumbnails and a title, the embed page is marked not to be indexed, and the full-resolution originals are not in the markup. Put a link you are willing to lose control of in a public post, and keep the private album on a private link.
What is the difference between an embedded album and a link preview?
A link preview is one image that a chat app or a social platform draws for you when you paste a URL; an embedded album is a live grid you place yourself. Viallo builds both out of the same album, and the image snippet is really the preview card with a link wrapped around it. The preview is what you get automatically, the embed is what you choose.
Can I just paste the link and let the site work it out?
Viallo answers an oEmbed request with a linked card, so where an editor sends one, the bare URL is enough. Try it first; if nothing appears, use one of the two snippets.