Skip to main content
Find the symptom, then its cause and fix. For a failed deployment, start with its log: on the site’s Deployments tab, click the deployment, and read the last lines of Deployment logs. See Follow a deployment.

Builds

The publish directory is missing

The log ends with 'dist' directory does not exist. (with your publish directory’s name). After the build, Sevalla found no folder by that name.
  • Check where your build writes its output, and set the Publish directory to it. See Settings for common static site generators.
  • The publish directory is relative to the Root directory: with the root directory apps/docs, write dist, not apps/docs/dist.
  • If Build site before publishing is off, nothing creates the folder: commit it, or turn the build on.

The publish directory is over 1 GB

The log ends with 'dist' directory size exceeds 1 GB limit. A deployment can publish at most 1 GB.
  • Check that the publish directory is the build’s output, not the whole repository.
  • Move large media, such as videos, to object storage and link to it.
  • Leave out files the site doesn’t serve, such as source maps.

The build command fails

The log shows the command’s own error after Running build command:, and the deployment fails.
  • Missing script: "build": the build command names a script that isn’t in package.json. Update the Build command or add the script.
  • The same command works on your computer: build with the same Node version (see Node versions), and check that the environment variables the build needs are set for the deployment’s environment.

Wrong Node.js version

Errors such as The engine "node" is incompatible with this module. mean the build used another Node.js version than your project needs. Sevalla doesn’t read engines or .nvmrc: choose the Node version in the build settings, then deploy again.

Dependencies fail to install

  • The log warns There is no lock file. and installs with npm install. Commit your package-lock.json, yarn.lock, pnpm-lock.yaml or bun.lock to the root directory, so the build uses your package manager and versions. See Package managers.
  • A private package fails to install: give the build its token as an environment variable, for example NPM_TOKEN, and reference it from the project’s .npmrc.

The build stops after 30 minutes

A deployment fails when its build runs for 30 minutes. Commit your lockfile, remove steps the site doesn’t need from the build command, or build large parts ahead of time and commit the result.

Images and other large files are tiny text files

Files tracked with Git LFS are published as pointer files when Git LFS is off. Turn on Git LFS and deploy again.

Submodules fail to clone

The log shows a Git error while fetching the source. A private submodule must be on the same Git provider as the site’s repository, in a repository Sevalla can read. See Git submodules.

Deployments

No deployment after a push

  • Auto-deploy is off, or the push went to another branch than the default branch (with previews off). Check the site’s Settings tab. See Deploy automatically on push.
  • The deployment shows Skipped: the deploy paths excluded the push.
  • The site is built from a public repository: it deploys only by hand.
  • The site already has 10 deployments queued or running.
  • Sevalla lost access to the repository, for example after a change to the Kinsta GitHub App’s repository access. See Git providers.

Pending deployment limit reached

Pending deployment limit reached for static site "<id>" means the site has 10 deployments queued or running. Wait for them to finish, or cancel the ones you don’t need.

Deployment is in progress

Deployment is in progress, cannot delete site. appears when you update a setting or delete the site while a production deployment runs, even if you weren’t deleting it. Wait for the deployment to finish, or cancel it, then try again.

Operation blocked due to suspension

Operation blocked due to suspension for company "<id>" means the company is suspended, for example after a failed payment. You can’t create, update or deploy static sites until it’s resolved. See Failed payments.

Repository not found

Repository not found for URL "<url>", when you create a site or update its source, means Sevalla can’t read the repository. For a public repository, check the URL. For a private one, check that your Git account is connected and can access it; on GitHub, add the repository to the Kinsta GitHub App with Adjust GitHub repository access. See Git providers.

Site creation blocked

Site creation blocked due to limitations reached for company "<id>" means the company has 100 static sites. Delete sites you don’t use, or contact support.

The live site

The site shows a 404 page

  • The site hasn’t been deployed successfully yet: its status isn’t Live. Check its deployments.
  • The publish directory has no index.html (or your Index file) at its top level. Check the publish directory, and that the build is on if the site needs one.
  • The page is about.html, the URL is /about, and pretty URLs are off. Turn on pretty URLs, or link to /about.html.
  • File names are case-sensitive: /About/ doesn’t serve about/index.html.

Old content after a deployment

  • Your browser kept a file. Browsers keep files other than HTML for 30 days. Reload without the cache, and give such files content-hashed names or a short Cache-Control. See Cache files that keep their names.
  • The first request after the switch. Each edge location picks up a new deployment on its next request, so the first request there can still return the previous version. Reload.
  • You changed pretty URLs. The edge keeps responses it cached before the change: purge the cache.

Missing pages return status 200

The Error file build setting serves its page with status 200. To return 404, clear the error file and add a 404 rule such as /* /404.html 404.

A single-page application returns 404 when you reload a route

The router’s paths have no files. Add the rule /* /index.html 200 to _redirects. See Serve a single-page application.

The browser reports too many redirects

Two redirects send the browser back and forth. Common causes: a rule that removes trailing slashes while pretty URLs add them, or www and apex rules that point at each other. Remove one of the two.

Redirects and headers

Redirect rules have no effect

  1. Check the deployment’s log. There were errors while parsing your redirect rules: means the deployment has no rules at all; fix the line it names and deploy again. No mention of the file means Sevalla didn’t find it: put it in the publish directory.
  2. A file exists at the URL. Rules don’t apply over existing files unless they’re forced: add ! after the status, as in 301!. See Force a rule.
  3. An earlier rule matched first. Rules run from the top; move specific rules up.
  4. The status code isn’t supported. Use 200, 301, 302, 303, 307, 308 or 404.
  5. Conditions don’t match exactly. Query parameters must match the request’s full set, and a header value must equal the whole header.
  6. The path has encoded characters. Write spaces and non-ASCII characters percent-encoded in from.

A redirect applies to every visitor

The rule has a Country=, Language=, Role= or Cookie= condition. Sevalla ignores these conditions, so the rule matches every request. Remove the rule, or use a header condition.

Custom headers are missing

  • The log shows There were errors while parsing your header rules:: the deployment has no custom headers. Fix the line it names and deploy again.
  • The path doesn’t match the URL: paths are case-sensitive and a trailing slash matters, so /about doesn’t match /about/. See Path patterns.
  • The header is one Sevalla manages, such as Content-Encoding. See Restricted headers.
Check the response with curl -I https://<your-domain>/<path>.

Previews

No preview after a push

  • Pull request previews are off, or the site is built from a public repository. See Pull request previews.
  • The push went to the default branch: that’s a production deployment.
  • The deploy paths excluded it (status Skipped).
  • On GitHub, a new branch pushed with no new commits doesn’t start a preview.

Visit commit preview is disabled

The commit preview exists only once the deployment shows Deployed.

A preview looks different from production

Previews build with the variables marked Preview, and they don’t apply pretty URLs. Check the variables’ availability on the Environment variables tab.

Settings

Pretty URLs fail to turn on

Domain not found for service <id> means the site has no active primary domain yet, which happens before its first successful deployment. Deploy the site, then try again.

Purging the cache fails

No domains found for this service means the site has no active domains, for example before its first successful deployment. There’s nothing cached to purge yet.