All articles
Ad Creation5 min read

Meta ad safe zones by placement

Why the pixel tables disagree, what the Stories and Reels interface covers, and the one check that beats memorising Meta ad safe zones.

The file was exported at 1080x1920. The hook line sat dead centre, the offer sat near the bottom, and in the editor it looked clean. Then the ad went live and I opened it on my own phone, in Reels, like a person would. The first words of the hook were behind the profile row. The offer was underneath the like, comment, share and audio stack, with the caption on top of it. Nothing had been cropped. Everything important had been covered. It ran four days that way.

Short answer: A Meta safe zone is the part of a 9:16 frame the platform interface does not sit on top of. Roughly the top 14% and a thin strip on each side go to chrome, and the bottom loses anywhere from a fifth to a third depending on the placement, so a correctly sized file can still be unreadable.

The takeaways

  • The bottom edge is the expensive one. Reels gives up around 35% of the frame to the interaction stack while Stories loses closer to 20%, so a CTA that clears Stories can disappear in Reels.
  • The published pixel tables disagree with each other, and none of the top-ranking guides I checked links Meta's own spec. Treat every number you read as approximate.
  • Ads Manager has a safe zone guardrail toggle above the placement preview that shades the covered regions on your file. Checking there beats any table you memorised.

What does the Meta interface cover on a 9:16 ad?

Three layers of interface sit on top of a vertical ad, and they are all outside your file. At the top: the profile row, the ad label, the close button. At the bottom: the caption, the CTA bar, and in Reels the vertical stack of like, comment, share, save and audio. On the right side, that stack pushes a column of buttons into the frame.

AdNabu's 2026 guide puts the vertical margins at roughly 14% at the top, 6% on each side, and 20% to 35% at the bottom. The bottom is a range because it depends on which placement serves the ad. Reels carries the heaviest chrome. Stories carries less. Feed placements have their own, much lighter, padding.

So the thing worth remembering is structural: the interface is added after you upload, and it lands on the two edges where designers habitually put the hook and the CTA.

Why do the published safe zone numbers disagree?

Because most of them are copies of copies. I pulled the guides ranking for this keyword and compared them: one says the bottom loses 380px, another 670px, a third gives a percentage range covering both. All three describe something real. They just describe different placements, measured at different times.

Two things move the number. Meta changes the interface, and the guides do not get re-measured when it does. Several sources date a consolidation to March 2026, when the four vertical placements were folded into one 9:16 safe zone built around the tightest of them. I could not confirm that against Meta's own documentation, and neither did the pages selling you the pixel table.

The consequence is freeing. Design against the tightest placement, keep critical content well inside the middle of the frame, and stop treating any published figure as an edge you can sit on.

Where do you check a safe zone without a pixel table?

In the ad itself, before it spends. Ads Manager carries a safe zone guardrail toggle in the top right of the placement preview, described the same way across every guide I checked: switch it on and the covered regions get shaded directly over your creative. Then use the placement dropdown to step through Facebook Stories, Instagram Reels and the rest one at a time.

That is the only check that answers the question for your file, at the size and crop you uploaded. A table tells you where the interface usually sits. The preview tells you whether your headline is under it.

It takes about ninety seconds per creative and it catches the two failures a mockup never shows: text that ends up behind the caption, and a logo or price tag that collides with the button rail on the right. Build it into your upload routine the way you would a spelling check.

Why does cropping one master file break the frame?

Because a crop moves the content, and the interface does not move with it. Take a 1:1 master that works, crop it to 9:16, and the subject that was centred is now floating in the middle of a much taller frame, with dead space top and bottom. Then the platform fills that dead space with its own chrome, and the parts of your ad closest to the edges get eaten.

This is also why the "put everything inside a centred square" trick, which several guides recommend, is a compromise. It survives every placement by using a fraction of each one. Your 9:16 ad ends up with the visual weight of a square, in a format where full-bleed vertical composition is what stops the scroll.

The alternative is composing each format on its own canvas. Adscalr builds four native formats (1:1, 4:5, 9:16 and 16:9), each one composed for its placement. Same discipline, just automated.

Does staying in the safe zone make the ad work?

No, and this is where most guides quietly stop. A safe zone is a legibility check, not a performance feature. Clearing it means your words can be read. It says nothing about whether they were worth reading, and I have shipped plenty of compliant ads nobody looked at.

Legibility and attention are different questions. A headline can sit well inside the safe region and still lose, because the eye goes elsewhere in the frame first. Fix the covered text, then ask where attention lands. Our attention prediction work sits on that second question, using a saliency model to predict the per-pixel order the eye moves through a static.

If you want the craft underneath the specs, the format decision comes first (which ratio to run), then the frame, then the line. That chain is what Adscalr's ad creation is built around: concepts composed per placement, scored against direct-response principles, with a human approving before anything ships.

This is the thinking behind Adscalr.

See the product