Website errors and troubleshooting
Every error a website can show you or its visitors, and how to fix it.
Common problems
| Problem | What to do |
|---|---|
| My change isn’t showing | Check you went live, not previewed: benchy site get, or Versions on the website’s page, shows what is live. A stylesheet or script without a fingerprint in its name can be cached for 5 minutes; see Caching. A content change shows within seconds unless the page keeps its own copy of /_benchy/content/<collection>.json |
| Reloading a page in my app shows Page not found | The address has no file of its own. Build each route to its own page, or route after a #; see App routing |
| “This key cannot publish this website. Use a key that can publish websites, or one limited to this website.” | The key only reads, is limited to another website, or belongs to another workspace. Make a Publish websites key for this website; see Who can publish |
| My domain stays on Waiting for DNS | Create the records where the domain’s DNS is actually run. If your provider appends the domain to record names, enter www and _benchy-challenge.www. Copy the TXT value with its button. New records can take an hour; Check now looks again within 2 minutes |
| My website isn’t on Google | A Free workspace’s website stays out of search for 14 days after its name is reserved. A live version published hidden from search keeps the website out until you go live with one that isn’t. See Search engines |
| A dev server in Desktop fails at start-up | Dev servers can’t reach the internet, so a font or API fetched at start-up fails; the log in the page viewer says what. Load it from the page, or run the server in Terminal |
| The camera or location doesn’t work | Websites can’t use the camera, microphone or location; see What Benchy sends with every page |
Publishing a canvas
These show under Not published in the canvas’s publish dialog, or come back to the agent that tried. A refused publish never changes what is live.
| Message | What it means | What to do |
|---|---|---|
| Add a Page or anything else to this canvas first. | The canvas is empty, so there is nothing to publish | Add a Page, then publish |
| You can view this workspace's websites but not publish to them. | Your role in the workspace is Can view | Ask the workspace’s Owner for Can edit |
| Only the canvas's owner can publish it as a website. | Someone else owns this canvas | Ask the canvas’s owner to publish it |
| That canvas is in a different workspace from this website. | A canvas publishes only to a website in its own workspace | Pick a website in the canvas’s workspace, or choose New website |
| This website is offline, so a preview would not open. Go live to put it back online. | An offline website takes no preview, because the preview wouldn’t open either | Choose Go live, or Put back online on the website’s page, then preview |
| Website … has no project yet, and a canvas is published into a project. … | The website was made without a project, and a canvas publish needs one | Publish to a website that has a project, or choose New website. An agent names a project you can edit in this workspace |
| Website … already publishes another project. … | A website publishes one project, and this canvas is in another | Choose another website for this canvas, or New website |
| A key that can only publish websites cannot publish a canvas. Use a key with Canvas access. | The agent’s key has Publish websites access, which reaches no canvas | Use a key with Canvas access. See Who can publish |
| Your latest changes haven't saved yet. Try again in a moment. | The canvas was still saving when you pressed | Wait a moment and publish again |
| There was an issue publishing this canvas. If it keeps happening, let us know. | The publish didn’t finish. Nothing live changed | Publish again |
| Couldn't make the project “…” for this canvas. Try again. | A canvas outside any project gets a project of its own when it first publishes, and making it failed | Publish again |
| An image or video on this canvas is larger than a website may hold. | One file is over the 25 MiB a website file may be | Replace it with a smaller file, or host long video elsewhere and link to it |
| An image or video on this canvas could not be read. Try again. | Benchy couldn’t fetch the file just then | Publish again |
| An image or video on this canvas is not in its own library. Replace it, then publish again. | The canvas points at a file it doesn’t hold | Replace the image or video with an upload, then publish |
| An image or video on this canvas is not ready. Try again once it has uploaded. | A file is still uploading | Wait for the upload, then publish |
| This canvas cannot be published yet: … | The rest of the sentence names what stops it | Fix what it names, then publish |
| This canvas is too large to publish from here (…). Publish it from the editor. | An agent tried to publish a canvas too large for the agent route | Open the canvas in Studio and publish it from there |
| Published. A newer version is live at … | Someone went live after you started. The one started last stays live; yours is kept as a version | To show yours instead, choose Restore on it under Versions on the website’s page |
Notes after a canvas publish
After a publish, the dialog lists what the website shows differently from the canvas, or what a visitor or search engine will miss. None of them stops the publish. “…” is the page it is about.
| Note | What to do |
|---|---|
| A 3D model shows as a still box on a website; it is interactive on an Instant link. | Replace it with an image or a video, or publish an Instant link instead |
| A form takes entries only on a website. | Shown for an Instant link, where a form takes no entries. To take them, choose Publish, then Website |
| A file at … is not part of this website: replace it with an upload. | Upload the file to the canvas and use the upload |
| … has no Heading 1: give one text layer that Website role. | Select the page’s main heading and give it the Heading 1 role under Website |
| … has … Heading 1s; one page states one thing. | Keep one Heading 1 per page and make the others smaller headings |
| … has no title: set Site title in Website settings. | Fill in Site title under Website settings in the publish dialog |
| … has no description: set Description in Website settings. | Fill in Description under Website settings |
| … has … images with no Alt text. | Describe each image in its Alt text, for people who can’t see it |
| … has … links with no Label: set Label under Link. | Give each link a Label under Link |
| Text is set in an uploaded font, which a website on benchy.site does not carry, so it shows in Geist. | Choose one of the canvas’s own fonts, which every website carries |
| A link goes to …, which is not a page of this website, so it leads nowhere. | Point the link at a Page of this canvas, or at a full address |
On a website’s page
Messages on a website’s page in Studio, in its General, Content and Forms sections. See Add a form for forms.
| Message | What it means | What to do |
|---|---|---|
| Hidden from search engines for now. | Search engines are told to skip the website: its live version has something held for review, or it is a Free workspace’s website in its first 14 days | See Search engines on the Safety page |
| This website isn’t available | It may be in another workspace, or it was deleted | Switch to the workspace the website belongs to |
| That didn't work. Try again. | The change didn’t go through | Try again. If it keeps failing, check your role: Can view can’t change a website |
| A suspended website can’t be deleted. | Benchy suspended this website | Write to abuse@benchy.studio to appeal |
| Only the workspace’s Owner can delete a website, in Benchy Studio. Anyone who can edit it can unpublish it. | Permanent deletion is for the workspace’s Owner, and only in Studio | Ask the workspace’s Owner, or take it offline if you can edit it |
| This changed since you opened it. Reload the page and make your change again. | Someone saved this content after you opened it | Reload, then make your change again |
| This photo contains its location. Anyone who opens it can see where it was taken. | The picture holds the place it was taken | Choose Upload anyway to publish it with its location, or pick a picture without location data |
| This website takes no entries yet. Add a Form block on its canvas and publish again, or, for a website built as files, declare its forms in benchy.site.json. | The live version has no forms | Add a form and publish again. See Add a form |
| This workspace has used this month's entries. Forms answer “This form isn’t taking entries right now” until the 1st. | The workspace reached its monthly form-entry quota | Upgrade the plan, or wait for the 1st |
Custom domain messages
A domain’s row shows its state and, under it, what the last check found. The states are on Custom domains; “…” stands for the date Benchy keeps checking until, or the certificate authority’s name.
| Message | What it means | What to do |
|---|---|---|
| No TXT record found yet. New records can take up to an hour to appear. … | Benchy hasn’t seen the TXT record | Create it where the domain’s DNS is run, then wait or choose Check now |
| A TXT record is there, but its value doesn't match. Copy the value below again. … | The TXT value differs from the one Benchy showed | Copy the value with its button and replace the record’s value |
| We couldn't reach DNS on the last check, and will try again shortly. … | The DNS lookup failed on Benchy’s side | Nothing; the next check runs by itself |
| Certificate blocked | The domain has CAA records that don’t allow the authority issuing its certificate. The row names the authority and the CAA record to add | Add that CAA record beside your others. Benchy checks again within the hour |
| The certificate couldn't be validated yet. Check that the CNAME record below is in place, and that your DNS provider answers for the domain. | The certificate check can’t reach the domain through its CNAME | Check the CNAME points at domains.benchy.site, with any proxy or CDN switch off |
| The certificate is taking longer than usual. … | It has been more than an hour | Check the CNAME record; most delays are a missing or wrong CNAME |
| The domain is yours. The certificate provider didn't answer on the last check; we'll try again shortly. | The certificate provider didn’t respond | Nothing; Benchy tries again |
| The domain is yours. Another website is still letting go of it, which can take a few minutes. | The domain was removed from another website moments ago | Wait a few minutes |
| The TXT record didn't appear within 3 days. Remove it and add it again to start over. | The 3 days for proving the domain ran out | Remove the domain, add it again, and create the TXT record with the new value |
| The TXT record's value didn't match within 3 days. Remove it and add it again to start over. | The record never held the value Benchy showed | Remove the domain, add it again, and set the TXT record to the new value |
| The TXT record was missing for 3 days, so the domain stopped serving. Put it back, and it returns within about 6 hours. | The TXT record was deleted after the domain was active | Put the TXT record back |
| The certificate couldn't be issued. Check that the CNAME record points at the value below. … | Issuing failed | Fix the CNAME. Benchy asks again every 6 hours for a week |
| The certificate provider refused this domain. Remove it and add it again to start over. | The certificate provider won’t issue for this domain | Remove it and add it again |
| The checks ran out of time. Remove it and add it again to start over. | The domain wasn’t ready within its time | Remove it and add it again |
| Its DNS doesn't show a CNAME record pointing to domains.benchy.site. … | Shown as Not pointing here. The domain serves, but Benchy can’t see its CNAME, often because the provider proxies or flattens it | Set the record to DNS only, pointing at domains.benchy.site |
| We can't reach this domain. Check that its CNAME record points to domains.benchy.site. … | Shown as Can’t reach it | Check the CNAME record |
| The plan's custom domains are all in use. Remove one to add another. | The workspace has as many domains as its plan allows. Pending and failed domains count too | Remove one, or upgrade |
| This workspace is adding custom domains too often. Try again later. | A workspace adds at most 10 domains an hour and 30 a day | Wait, then add it |
| This domain was checked 4 times this hour; try again in about … minutes. | Check now runs at most 4 times an hour for each domain | Wait; Benchy also checks by itself |
| That domain is not connected to this website; … | The domain belongs to another website, or was removed | Open the website it belongs to |
| This domain's checks have ended. Remove it and add it again to start over. | Check now can’t restart a domain whose checks are over | Remove it and add it again |
| Custom domains are connected by a person in Benchy Studio, or with a key or app that can make changes to the whole workspace. | The key or app can’t change domains | Add the domain in Studio, or use a key with Read and write access to the workspace |
When you add a domain, Benchy refuses it with one of these sentences:
- Enter a domain, such as www.example.com.
- A domain is at most … characters.
- That is not a domain name. Enter only the name, such as www.example.com: no https://, path or port.
- Wildcard domains are not supported. Add each name, such as www.example.com.
- An IP address cannot be a website's domain.
- Enter a full domain, such as www.example.com.
- Use a subdomain such as www.example.com. A bare domain (example.com) cannot point at benchy.site; redirect it to www at your registrar.
- That is a public suffix, not a domain you can own.
- That domain ending is not a public top-level domain.
- Each part of the domain must use one alphabet; names mixing, say, Latin and Cyrillic letters are refused because they imitate other names.
- That domain belongs to Benchy or a hosting platform and cannot be added.
Error codes
Studio shows the sentence; the CLI and agents also get the code. A refused deploy never changes what is live.
| Code | What it means | What to do |
|---|---|---|
SITE_NAME_UNAVAILABLE | The name breaks the rules, is reserved or is taken; the message says which | Choose another name |
SITE_PERMISSION_OR_LIFECYCLE | The website doesn’t exist for this account or key, or the request isn’t allowed. Many refusals share this code, and each sentence names its case: the key’s access, the canvas’s owner, the project, an offline website’s preview | Do what the sentence says. For “That website does not exist, or this account or key cannot change it.”, check the name, the key’s workspace and your role |
SITE_LIMIT_FILES | More than 1,000 files | Remove files the website doesn’t use |
SITE_LIMIT_FILE_BYTES | A file, or a content picture, is over 25 MiB | Compress it, or host large video elsewhere |
SITE_LIMIT_TOTAL_BYTES | The deploy is over 100 MiB | Resize images and remove unused files |
SITE_PATH_INVALID | A path is too long or has a hidden or empty part | Rename the named file |
SITE_EXTENSION_REFUSED | A file type websites don’t serve, or a content picture that isn’t PNG, JPEG, GIF, WebP or AVIF | Remove or convert the file |
SITE_MANIFEST_INVALID | The list of files sent with the deploy doesn’t add up: no files, a path twice, a size or digest that doesn’t match, or a project in another workspace | Deploy again with the current CLI. For “That project is in another workspace.”, choose a project in the website’s workspace |
SITE_CONFIG_INVALID | benchy.site.json is invalid; the message names the setting, or the line for a JSON syntax error | Fix the file and deploy again |
SITE_FORM_FIELD_REFUSED | A form asks for a password, payment details or a government ID number | Remove the field |
SITE_CAP_REACHED | The workspace has as many websites or custom domains as its plan allows, or content is over its size: 1,000 items in a list, 4 MiB a collection, 16 MiB a website | Upgrade, or remove some |
SITE_RATE_LIMITED | Too many publishes, three deploys already in progress for this website, or too many domain adds, Check now presses, content saves, picture uploads or link checks | Wait and try again. A deploy in progress finishes or expires within an hour |
SITE_UPLOAD_INCOMPLETE | Some files, or a content picture, hadn’t arrived when the deploy was finished | Deploy again; only the missing files upload |
SITE_DEPLOYMENT_EXPIRED | The upload took more than an hour, or the deploy was already closed | Deploy again |
SITE_STORAGE_FULL | The workspace’s storage is full, or a Free owner’s shared Free storage is | Free up space or upgrade |
SITE_STORAGE_BUSY | Files from an earlier deploy or picture are still being cleaned up | Deploy again in a few minutes |
SITE_UNSAFE_CONTENT | The deploy, the version you tried to put live, or a link in content goes to a page on a list of unsafe pages | Remove the link. If the listing is wrong, write to abuse@benchy.studio |
SITE_REVIEW_REQUIRED | On Free, some pages couldn’t be checked completely | Split very large pages, or pages with a great many links |
SITE_CHECK_UNAVAILABLE | The safety check couldn’t run, or links in content couldn’t be checked | Try again in a few minutes |
SITE_WORKSPACE_ON_HOLD | A website in the workspace is suspended, so the workspace can’t publish | To appeal, write to abuse@benchy.studio |
SITE_NO_PREVIOUS_DEPLOYMENT | There is no version to put live: the website was never published, there is no earlier one, or the one named is a preview or didn’t finish | Deploy instead, or pick a version from benchy site get |
SITE_DEPLOYMENT_NOT_FOUND | The website has no version with that id | Pick a version from benchy site get |
SITE_LIVE_CHANGED | The live version changed since you read it, so nothing was rolled back | Read benchy site get again, then choose a version |
SITE_DEPLOYMENT_REQUIRED | An agent rolled back an offline website without naming the version to put back online | Name the version; the message gives its id |
SITE_DELETE_BLOCKED | Benchy suspended the website, so it can’t be deleted | Write to abuse@benchy.studio to appeal |
SITE_SERVICE_UNAVAILABLE | Benchy’s upload service couldn’t finish the request | Try again in a few minutes; nothing live changed |
SITE_DOMAIN_INVALID | The domain breaks a rule; the message says which (listed under Custom domain messages) | Use a subdomain you control, such as www |
SITE_DOMAIN_UNAVAILABLE | The domain is connected to another website or still being removed, or its checks have ended | Remove it there first, wait a few minutes, or remove it here and add it again |
SITE_DOMAIN_NOT_CONNECTED | The domain isn’t connected to this website | Use a domain benchy site domain list prints |
SITE_DOMAIN_PLAN_REQUIRED | Custom domains need a paid plan | Upgrade the workspace |
SITE_FORM_NOT_DECLARED | No form by that name, or the live version doesn’t declare it | Use a name benchy site forms list prints, or declare the form and deploy |
SITE_CONTENT_NOT_DECLARED | The live version doesn’t declare that collection in benchy.site.json | Declare it and deploy, or pull again to see the collections there are |
SITE_CONTENT_INVALID | Content doesn’t fit its declaration; the message names the item and the field | Fix what it names and save again |
SITE_CONTENT_CONFLICT | The content changed since you read it | Pull or reload, then make your change again |
SITE_PICTURE_LOCATION | A content picture holds the place it was taken | Choose Upload anyway under Content in Studio, or use a picture without location data |
In Studio, a name that can’t be used says “That name is reserved. Choose another.”, “That name is taken. Choose another.”, or which rule it breaks: “Use 3 to 40 lowercase letters, numbers and single hyphens.”, “A name has to start and end with a letter or number.” or “Use single hyphens only.”
What visitors see
Besides your own pages, visitors can meet these Benchy pages. None of them names your website or sets a cookie.
| Status | Title | Why |
|---|---|---|
| 404 | Nothing here | No website answers at this address, or its custom domain isn’t active |
| 404 | Page not found | The website has no file here and no 404.html of its own |
| 404 | Not published | The website is offline |
| 400 | Bad request | The address isn’t a valid one |
| 451 | This website is unavailable | Benchy suspended it |
| 503 | Back soon | Benchy paused websites for maintenance |
| 503 | Temporarily unavailable | The website couldn’t be loaded just then |
| 502 | Temporarily unavailable | Part of the website couldn’t be loaded just then |
| 429 | Too many requests | One network asked for too much at once |
| 405 | Not allowed | A request other than GET, HEAD or a form entry |
| — | Your entry wasn't sent | A form posted without the form script was refused; the page says why |
A form shows one of these lines beside its button when an entry isn’t taken:
| Line | Why |
|---|---|
| This form isn't set up yet. | The live version doesn’t declare this form |
| This form isn't taking entries right now. | The workspace has used this month’s entries |
| Too many entries from here. Try again in a minute. | One visitor sent more than 10 a minute |
| Check the highlighted fields. | A required field is empty or a value doesn’t fit |
| The spam check didn't pass. Try it again. | The check failed or expired |
| Finish the spam check first. | The visitor sent before the check finished |
| Your entry wasn't sent. Try again. | Anything else went wrong; nothing was kept |