All articles
3 min read#safety#compliance#moderation

Marking 18+ links so the page stays safe for everyone

Plenty of creators keep an adult platform alongside a public Instagram. The link-in-bio page is where those two audiences meet, and it is usually handled badly — which costs the creator, the visitor and every other user of the same domain.

What an age confirmation is for

An interstitial that says "are you 18?" with a button is not an age check, and nobody serious pretends otherwise. What it does do is establish intent: the visitor is told what is behind the link and takes a deliberate action before going there. That matters legally in several jurisdictions and it matters practically, because the alternative is sending someone somewhere they did not expect.

The confirmation belongs on your own page, at the point where the visitor chooses the link — not after they have already been sent somewhere. Confirming after the fact confirms nothing.

The part most pages get wrong

Almost every implementation puts the destination in the page source. The visible link goes to a warning screen, but the underlying href still reads onlyfans.com. That defeats the whole exercise, because the audience that matters here is not human.

Instagram and TikTok run automated classifiers over the pages their users link to. Those classifiers read the markup. If an adult destination is sitting in the HTML, the page is classified on that basis regardless of what a human visitor sees — and on a shared domain, that classification is not just yours.

If the destination is in the markup, the gate is decoration. The only gate that works is one where the address is not there to read.

What a correct flow looks like

  1. The card is marked 18+ on the page itself, so the visitor knows before tapping, not after.
  2. Its href points at a confirmation route on your own page. The real destination is not in the HTML anywhere.
  3. The visitor ticks the age confirmation. The tick gates a plain form submission, so it works with JavaScript disabled — otherwise the gate is trivially skipped.
  4. They pass through a separate warning domain that states plainly that sensitive content follows.
  5. Only then does the redirect resolve the destination, on the server.

Practical rules

  • Mark the link, do not disguise it. A visitor who feels tricked is a report waiting to happen, and reports are what actually damage a domain.
  • Never point an adult link at a link shortener to hide it. Redirect chains are a spam signal in their own right and get the whole page classified faster.
  • Keep the age gate server-side. A confirmation implemented purely in JavaScript is bypassed by disabling JavaScript.
  • Add rel="nofollow" to gated links so search engines do not follow the chain.
  • Do not put adult imagery in the page preview or the OG image. That is what the platform renders inside its own app.

Why this is everyone’s problem

A link-in-bio service hands every user a name on one shared domain. Reputation attaches to that domain, not to the individual page. One user routing traffic carelessly can get the domain limited across a platform, and every other user finds their link quietly stops working — with no notification and no appeal.

That is why adult links deserve a designed path rather than a checkbox bolted on afterwards: not because the content is a problem, but because the routing is shared infrastructure.

Read next