# Fix public site problems

A custom domain will not connect or go live, or visitors cannot sign in to your site.

## Custom domain

| Message | Fix |
| --- | --- |
| Enter a domain. | The field is empty |
| Enter the whole domain, like docs.yourcompany.com. | Include the domain, not only the subdomain |
| Domains can only use letters, numbers, hyphens and dots. | Remove spaces and other symbols |
| That domain is too long. | Use a shorter hostname |
| That domain has two dots in a row. | Check the spelling |
| Each part of a domain can be up to 63 characters. | Shorten the longest part |
| No domain ends in .&lt;ending&gt;. Check the spelling. | The ending does not exist in DNS. Check it against your registrar |
| Domains can only use letters, numbers and hyphens, and a part can't start or end with a hyphen. | Underscores and other symbols can't be in a hostname |
| Use a domain name, not an IP address. | Enter the hostname, not the address it points at |
| Your median.website address comes from your slug. Change it in Settings under General. | A different `median.website` address is a slug change, not a custom domain |
| vercel.app addresses belong to Vercel. Use a domain you own. | Connect your own domain, not the Vercel address |
| localhost only works on your own computer. Use a public domain. | Use a domain that resolves on the internet |
| median.sh addresses are only for Median's own site. The same message names portal.sh | Median keeps its own domains for its own site |
| That domain is already connected to another site. | Remove it from the other organization's site first |
| That domain is already in use somewhere else. Remove it there first. | It is attached to another Vercel project. Remove it there |
| That domain can't be used. Check the spelling and try again. | Check the spelling |
| This feature requires an eligible paid plan. | Add Site, or move to Pro |
| Custom domains are not available right now. Please try again later. | Try again later |
| We couldn't check this domain just now. We'll try again soon. | Nothing. The next check runs on its own |
| Stuck on **Waiting for DNS** | Run `dig help.example.com`. It has to return the value shown, with no proxy in front |

Setup is in [Use your own domain](/articles/use-your-own-domain).

## Sign-in

| The visitor sees | Cause | Fix |
| --- | --- | --- |
| **Sign in to Acme first** | Your app's sign-in route found nobody signed in, and has nowhere to send them | Your developer points the sign-in route at your login page. See [Site sign-in](https://docs.median.sh/site/sign-in#options) |
| **No email address** | Your app or your provider sent no email | For OpenID Connect, allow the `email` scope at your provider. For your app, your developer's sign-in route has to send the email |
| **That didn't work** | The sign-in did not verify, took over 15 minutes, or was opened in another tab | Try again in one tab. If it keeps failing with your app, check the route uses a current Median key from this organization |
| **Sign-in cancelled** | They pressed **Cancel**, or denied access at the provider | Nothing |
| **Sign-in isn't working** | Your OpenID provider refused the sign-in, like a scope its app doesn't allow or a client secret it doesn't accept | **Site → Sign-in** shows the provider's reason, and Logs has it under **Site sign-in**. Fix it at the provider, then sign in again. The reason clears once a sign-in works |
| This sign-in link has expired or isn't valid. | An old link, or one used twice | Start again from the site |
| **This sign-in has expired** or **Incomplete sign-in link**, then "Go back to the site and try again." | The approval page on median.sh was opened too late, or with part of its address missing | Start again from the site |

| The dashboard says | Fix |
| --- | --- |
| Enter your sign-in route's https URL. | Use the full URL. `http` only works for `localhost` |
| We couldn't read that provider's OpenID configuration. Check the issuer URL. | Open `<issuer>/.well-known/openid-configuration` in a browser. It has to load |
| That provider calls itself &lt;issuer&gt;. Use that as the issuer. | Copy the issuer from the message |
| Enter the client secret from your provider. | The secret is needed the first time, and after changing the client |

Setup is in [Choose how visitors sign in](/articles/choose-how-visitors-sign-in).
