Troubleshooting

The things that go wrong most often, and what each one actually means. If your problem is not here, the last section says where to take it.

I cannot sign in

Go to /signin. There are three ways in, and one of them almost always works.

  1. Email and password. If it comes back with "That password didn't match. Try again, or get a sign-in link by email.", the pairing was refused. That message covers both a wrong password and an email with no account behind it, so check the address as well as the password.
  2. Email me a sign-in link. Type your email address first, then press it. urls.bio emails you a link that signs you in without a password. If you press it with the field empty you get "Enter your email address first".
  3. forgot password? The small button beside the password label. Same idea, but the link takes you to a page where you set a new password.

A sign-in link is good for about an hour and works once. If it has aged out you land on a page that says so plainly:

That link didn't work.

with three reasons under it: the link is more than an hour old, it was already used once, or it got rewritten in transit, usually by an email scanner. That last one is the sneaky one. Some corporate mail systems and security tools follow every link in an email to check it, which uses the link up before you ever click it. If that keeps happening, ask for a link at a personal address instead.

Nothing arriving at all is nearly always the spam folder. Check it before asking for a fourth link, because each new one invalidates the last.

"That link has expired." on the reset page means the same thing for password resets. Enter your email there and it sends a fresh one.

You keep getting bounced to the sign-in page. The dashboard, onboarding, and the admin area require a session. If your session has lapsed, urls.bio sends you to sign in and then back to where you were going.

You cannot get back into onboarding. Once your account has a name on it, onboarding is finished and /onboarding sends you to the dashboard. Everything in it lives in the Studio and in Settings afterwards.

My embed is not showing

Embeds only accept URLs from services urls.bio can render safely, and only in the shapes it can parse. Seven services work:

  • YouTube. A watch URL, a youtu.be link, or a Shorts link.
  • Vimeo. A video URL with the numeric id.
  • TikTok. A single video, tiktok.com/@someone/video/....
  • Spotify. A track, album, playlist, episode, show, or artist link.
  • SoundCloud. A track or a set.
  • Tweet. One post on x.com or twitter.com, ending in /status/....
  • Booking. A Calendly or a Cal.com page.

Three things account for nearly every embed that will not take:

  • A profile or channel URL where a single item is expected. A YouTube channel, a TikTok profile, or an X timeline is not an embed. Open the individual video or post and copy that address.
  • A shortened or wrapped link. Share buttons in some apps hand out a redirect rather than the real address. Open it in a browser first and copy what the address bar settles on.
  • A privacy-enhanced YouTube address. The youtube-nocookie.com form is not recognized. Use the plain youtube.com/watch?v= address.

While the URL is unrecognized, the field tells you so and the block stays a draft, its row reading "Needs a supported URL". Nothing on your public page changes, and nothing is broken; there is simply nothing there yet.

The provider dropdown above the field only changes the example text and the hint wording. Picking TikTok and pasting a Spotify link still works, because the address itself decides which player gets built.

My changes are not appearing

Start with the pill in the dashboard header. It appears on your first change of the session and answers the question directly:

  • Saving with a spinner: the write is in flight.
  • Saved with a tick: it landed.
  • Not saved with a cloud icon: it did not.

There is no publish button and nothing to press. Text fields write half a second after you stop typing, and again the moment you click away. Switches, menus, and drags write immediately.

When a write fails, urls.bio puts the old value back rather than leaving you with something on screen that is not in the database, and tells you which one: "Could not save that change. It has been reverted.", "Could not reorder. The previous order was restored.", "Could not save your appearance changes." Nothing is retried in the background. Make the change again once your connection is back.

Cmd+Z undoes the last fifty changes, including deletes, reorders, and design edits, and a message names what came back.

My block is not on my public page

Work down this list. One of them is always the answer.

  1. It is still a draft. The block's row says "Needs" and then the field it is missing. Fill it in.
  2. It is hidden. The row says "Hidden". Turn Show on my page back on.
  3. It is scheduled or expired. The row says "Scheduled" with a date, or "Expired". Clear the window, or move it.
  4. It is a Pro block on a Free account. Contact form, file download, voice intro, and menu blocks stay in your editor but do not render for visitors when the plan lapses. Galleries show their first five images. See plans and billing.
  5. A gate is in front of it. If an email capture block has Require before viewing content on, or any block has the 18+ switch, visitors meet that first. You are never gated out of your own page, which is exactly why it looks fine to you. Open your page in a private window to see what they see.
  6. The embed has no supported URL. See above; it renders nothing rather than erroring.

My whole page shows a not-found error

  • Check the handle. Case does not matter, but spelling does.
  • Did you change your handle? The old address stops working immediately and there is no redirect. Anything already printed or pasted needs updating. See sharing.
  • Is it in the address bar exactly as your dashboard shows it? The button at the top right of My Page prints urls.bio/yourhandle for exactly this reason.

The passcode is not being asked for

A passcode only holds the page while the account is on Pro. If the subscription lapsed, the gate comes off and the page opens rather than trapping your audience behind something you can no longer manage. The passcode is not deleted; it comes back when Pro does.

Three other reasons a page opens for somebody who should be asked:

  • They are you. Signed in as the owner, your own page never asks.
  • They already unlocked it. A visitor stays unlocked for thirty days on that device. Saving a new passcode ends every one of those sessions immediately, which is the way to lock everyone out again.
  • It never saved. The card says "Your page is locked" under the field once one is set. If it says "Your page is open to anyone with the link", nothing was saved.

My animation does not play

Motion is off until it is turned on, in two places that both have to agree.

  1. The page default. Design, Motion. Off is the default.
  2. The block's own Motion row. Page default follows the panel; Off means this block sits still whatever the panel says.

If both look right, check the third possibility: the visitor's device is asking for reduced motion. Every animation is skipped for them and every block is shown in its finished state, which is the correct behaviour rather than a fault. Your own machine can be the one doing it, in the accessibility settings of macOS, Windows, iOS, or Android.

Blocks inside a group have no Motion row at all. The group animates, and its children come with it.

My sending address is still pending

Turning Emails on builds you a sending domain and asks the DNS to verify it. Fifteen minutes is normal, and it happens without you.

  • Still Pending after an hour is worth a look, but there is nothing for you to configure; the records are ours.
  • Failed shows the reason under the chip and a Retry button beside it. Press it. If it goes back to Pending, it is trying again and will email you when it is ready.
  • A post scheduled before the address was ready pauses with "Paused: sending address" and resumes on its own once the domain verifies, as long as that happens within a day of the scheduled time.

The Newsletter tab does not appear until all three of Pro, Emails on, and a verified address hold. See newsletter.

My post is paused

The row says which line it crossed, and the answer depends on which one.

  • Paused: too many spam reports, too many addresses bounced, or too many people unsubscribed. This is the firewall, and it stops everything you have scheduled, not just the one post. The Newsletter tab carries a line saying which rate tripped and what the limit was. There is no resume button, on purpose; email hello@urls.bio and we will read the account. When sending comes back, the daily limit starts again at 500.
  • Paused: sending address. The post was ready before the domain was. It resumes by itself once the address verifies.
  • Paused: deliveries failed. It reached nobody. The three dots on the post offer Send again, or Cancel to put it back to a draft.

A post that already reached some people cannot be cancelled. Send it again to finish it, or leave it paused.

The thresholds and what counts as a clean send are in newsletter.

My imported addresses have not appeared

They are there. They are just not subscribers yet.

Import puts every valid address on Confirming and emails it one message asking it to confirm. Nothing joins your list until somebody taps that link, which is why the Subscribed count does not move on import and the table fills with amber rows.

Three other things the result screen will have told you:

  • Duplicates. An address already on your page's record, in any state, is skipped. That includes ones that bounced or unsubscribed, which is the point of the check.
  • Not an email address. Anything that is not shaped like one is skipped and counted.
  • Sent over the next day. Confirmation emails are metered against your daily sending limit, so a large import goes out in batches rather than at once.

If the count of imported addresses is zero, the file's addresses were all duplicates, or the column urls.bio read was the wrong one. It takes the column named email, or the first column if there is no header.

Subscribers are not reaching my email tool

Email capture and the integrations that follow it are two separate things, and only the second one can fail quietly.

Check the Audience tab first. If the address is there, capture is working and the problem is downstream. Then check, in this order:

  1. Have they confirmed? Integrations fire on confirmation, not on submission. An address on Confirming has not fired.
  2. Are you on Pro? The sync is checked at the moment the address confirms. Email capture keeps working on Free; the fan-out does not.
  3. Are both fields filled? Every provider needs its key and its list or publication id. One without the other does nothing.
  4. Is the key still valid? A revoked or mistyped key fails silently. There is no error, no red mark, and no email.

The way to be sure is to submit a test address on your own page from a private window, confirm it, and watch for it on the other side. See integrations.

Uploads are refused

  • Avatars, thumbnails, images, galleries, and logos. JPG, PNG, GIF, or WebP, up to 5MB.
  • File download blocks. PDF or ZIP, up to 25MB.
  • Voice intro blocks. MP3, M4A, WAV, or OGG, up to 25MB.

The messages are specific: "Please upload a JPG, PNG, GIF, or WebP file", "File size must be less than 5MB", "Please upload a PDF or ZIP file", "File size must be less than 25MB". A photo straight off an iPhone is often HEIC, which is not on the list. Export it as JPEG first.

Galleries take five images on Free and twenty on Pro; logo strips take eight. At the cap the add button switches off and a line under it names the number.

My custom domain is not working

Custom domains are a Pro feature and are set up in the Custom domain card in Settings. See sharing for the full walkthrough.

  • The status says "Waiting for DNS". The records shown in the card are not resolving yet. Check that you copied the value exactly and that it is on the right record name, then press Refresh. Propagation takes a few minutes at most registrars and can take hours at some, so waiting is often the whole fix.
  • "That domain is already connected to another urls.bio page." A domain can only serve one page at a time. Remove it from the other account first.
  • "That domain is already connected to another Vercel project." The domain is attached to another project on our hosting provider. It has to be detached there before we can take it.
  • Your registrar will not let you add an A record on @. Some do not allow it. Use a subdomain like links.example.com with the CNAME record instead.
  • The domain stopped working after your subscription lapsed. Connected domains only resolve while the account is on Pro. Visitors are sent to urls.bio in the meantime, the domain stays on your account, and it comes straight back when Pro does.
  • The certificate is not ready yet. Nothing to do. It is issued automatically once the DNS records resolve.

Visitors say the page keeps asking for their email

The confirmation is a cookie on their device, tied to your page and lasting three days. Anything that clears it starts the ask again: a private window, a different browser, a different phone, or cleared site data. The 18+ confirmation works the same way and lasts the same three days.

Confirming on one creator's page has no effect on another's. Each page asks for itself.

Something broke and I do not know what

When a page errors outright you get "Something broke on our side." and, underneath, a short code reading "Error" followed by a string of characters. That code identifies the specific failure in our logs. Write it down before you reload, because it is the single most useful thing you can hand over.

Where to take it

If none of the above resolves it:

  • Check the changelog. If something changed recently, it is listed there.
  • Reach us on social. X, Instagram, and TikTok are the accounts that get read.
  • Privacy, data, and legal questions go to the address in the legal pages, which is the right route for a data request or anything about how your information is handled.

Somebody arriving from Instagram or TikTok is inside that app's own browser rather than Safari or Chrome. Inside it they are usually logged out of everything, which is why a Spotify link can look like it "did not work": it opened, but as a logged-out web page.

Where urls.bio knows the app's own address, it hands the tap over instead, so a Spotify, YouTube, Apple Music or X link opens the app itself. If the app is not installed, the web page loads as normal a moment later.

This only happens inside those in-app browsers. In a normal browser, the ordinary link already opens the app when one is installed, and urls.bio leaves it alone.

Not every destination has an address we can use, and we do not guess at one: a guessed address is a tap that does nothing at all, which is worse than the page it was avoiding.

Common questions

What is the fastest way to see what a visitor sees? Open your page in a private window. Signed in as yourself you are never gated, never asked for a passcode, and never counted in analytics, so your own view is the one view that is not representative.

Is anything cached that I have to clear? Not on your side. Your page updates as you save it. The one exception is the link preview card, which the social platforms cache on their end and refresh on their own schedule.

Why does the block list say "Needs" instead of an error? Because it is not an error. A block with a missing field is a draft: it stays in your list, it stays out of your page, and it publishes itself the moment you fill the field in.

Three things make any problem solvable in one exchange. Your handle, what you did just before it went wrong, and the error code if there was one.