Guide · 11 min read

Replit SEO: get your Replit Agent app on Google

For builders who shipped an app with Replit Agent and want its public pages found. What crawlers get from a Replit deployment, how to check it, and the fixes in order, with prompts and code.

Updated · By the Serpkin team

In short

  • Replit Agent builds full-stack apps; many use a client-rendered React front end, so crawlers get an empty shell and a 200 for every URL.
  • Fix rendering and status codes first: prerender the public pages at build time and make the server return 404 for unknown URLs.
  • Put the site on your own domain, and redirect www and the replit.app address to it in your server code, since we found no built-in redirect.
  • Replit's SEO Agent and SEO Rating cover titles, descriptions, robots.txt, sitemaps and tags, but not server rendering, canonicals or status codes.
  • Content sites without a backend fit a Static deployment, which serves files directly and supports a 404.html.

A site built with Replit Agent can show up on Google once it is published on a public deployment, ideally on your own domain. The catch is how most Agent apps are built: a full-stack app with a React front end that renders in the browser, served by a Node server that returns the same HTML shell for every URL. Crawlers get a page with no text and a 200 status even for URLs that don't exist. Fix that first (prerender the public pages and return real 404s), then use Replit's own SEO tools for titles, descriptions, robots.txt and the sitemap. This guide is the Replit-specific follow-up to SEO for AI-built websites.

What Replit Agent builds and how it's served

Replit's docs say Agent builds a full-stack web app by default and sets up "API routes, a database, and server-side logic" as needed. They don't name the front-end stack. In practice many Agent apps are React + Vite with an Express server (community reports, not a documented default), so open package.json to see yours. How it is served depends on the deployment type:

Replit deployment types and what they mean for SEO (per Replit docs, October 2026)
TypeWhat it isSEO notes
AutoscaleServers added when busy, scaled to zero when idleYour server controls HTML, status codes and redirects. First request after idle can take a few seconds
Reserved VMOne dedicated server that never sleepsSame control, no cold starts
StaticFiles only, no backend serverReplit's SEO guide recommends it for content sites. Agent's full-stack apps aren't compatible with it
ScheduledJobs on a timerNo public URL, not relevant

Every published app gets a your-app.replit.app address. Development URLs on replit.dev are private by default and meant for testing; don't use them for SEO checks. A remixed app may get a different replit.app subdomain, which is one more reason to put the site on your own domain.

The five-minute diagnosis

  1. Curl the published app
    Terminal
    URL=https://your-domain.com/pricing      # or https://your-app.replit.app/pricing
    curl -s $URL | grep -o "<title>[^<]*"
    curl -s $URL | grep -o "<h1[^>]*>[^<]*"
    curl -s -o /dev/null -w "%{http_code}\n" https://your-domain.com/no-such-page
    Terminal
    $ curl -s https://your-app.replit.app/pricing | grep -o "<title>[^<]*"
    <title>My App
    $ curl -s https://your-app.replit.app/pricing | grep -o "<h1[^>]*>[^<]*"
    (no output)
    $ curl -s -o /dev/null -w "%{http_code}" https://your-app.replit.app/no-such-page
    200
    $ curl -s https://your-domain.com/pricing | grep -o "<h1[^>]*>[^<]*"
    <h1>Pricing for tutors
    $ curl -s -o /dev/null -w "%{http_code}" https://your-domain.com/no-such-page
    404
    
    Illustrative output. Top: a typical React + Express Agent app (one title, no H1, 200 for a missing page). Bottom: after prerendering and a real 404.
  2. Check both host names
    Terminal
    curl -sI https://www.your-domain.com/ | grep -iE "^(HTTP|location)"
    curl -sI https://your-app.replit.app/ | grep -iE "^(HTTP|location)"

    Replit connects www and the apex as separate domains, each with its own records, and we found no documented redirect between them or from replit.app. If all of them answer 200 with the same page, you have duplicate hosts. The redirect checker shows the chain.

  3. Check robots.txt and the sitemap

    Fetch /robots.txt and /sitemap.xml. If the sitemap URL returns your app's HTML, the server's catch-all route is answering. Use the robots.txt tester, the sitemap validator and the free SEO checker if you'd rather not use a terminal.

  4. Read Replit's SEO Rating, with care

    After each publish, Replit runs a Lighthouse audit and shows an SEO Rating for public Autoscale, Reserved VM and Static deployments. Lighthouse loads the page in a browser, so a good score doesn't prove the content is in the server HTML. Trust the curl output for that.

Fixes, in order of impact

  1. 1Real HTMLPrerender public pages at build time
  2. 2Real 404sThe server returns 404 for unknown URLs
  3. 3One hostCustom domain; other hosts redirect to it
  4. 4On-page basicsSEO Agent: titles, descriptions, robots, sitemap
  5. 5Search ConsoleVerify the domain, submit the sitemap
Fix order for a Replit app: real HTML and status codes first, then one host, then the on-page basics Replit's tools cover well.

1. Prerender the public pages

The public pages (home, pricing, about, blog) are usually a small part of an Agent app, and their content is known at build time. Render them to HTML during the build and keep the logged-in app as it is. The full prerender code (route list, server entry, script) is in React SEO for Vite apps. A prompt for Agent:

Prompt for Replit Agent
Add a build-time prerender for the public pages (/, /pricing, /about and every /blog post):
render each with renderToString during the build and write its own HTML file with a unique
<title>, meta description and canonical on https://your-domain.com. Write a 404.html with a
noindex tag and a sitemap.xml with the public URLs. The logged-in app under /app stays
client-rendered. Hydrate prerendered pages instead of re-rendering them. Don't change the design.

2. Serve those files, and a real 404

The usual Express setup ends with a catch-all that sends index.html for every path. Replace it so known pages get their own file, the app gets its shell, and everything else gets a 404 status. This works on Express 4 and 5:

server/index.ts
import express from "express";
import path from "node:path";
import { pages } from "../src/seo"; // the same route list the prerender uses

const app = express();
const dist = path.resolve("dist");
const known = new Set(pages.map((p) => p.path));

// One host: send www and the replit.app address to your domain.
const OTHER_HOSTS = ["www.your-domain.com", "your-app.replit.app"];
app.use((req, res, next) => {
  if (OTHER_HOSTS.includes(req.hostname)) return res.redirect(301, `https://your-domain.com${req.originalUrl}`);
  next();
});

// ...your API routes here...

app.use(express.static(dist, { index: false, redirect: false })); // JS, CSS, images, robots.txt, sitemap.xml
app.use("/app", (_req, res) => res.sendFile(path.join(dist, "app/index.html"))); // client-only app shell
app.use((req, res) => {
  if (req.method === "GET" && known.has(req.path)) {
    const file = req.path === "/" ? "index.html" : `${req.path.slice(1)}/index.html`;
    return res.sendFile(path.join(dist, file));
  }
  res.status(404).sendFile(path.join(dist, "404.html"));
});

app.listen(Number(process.env.PORT ?? 5000), "0.0.0.0");

3. Put the site on your own domain

Connect a domain from the Domains tool: buy one through Replit or connect one you own. Manual setup means adding the A record and a replit-verify TXT record, which must stay in DNS because Replit uses it to renew SSL. Add www separately with its own records. Replit doesn't support apex CNAMEs or wildcard certificates; on Cloudflare, set the records to DNS only. DNS can take up to 48 hours.

4. Let SEO Agent handle the on-page basics

Replit's SEO Agent, in the Growth pane (paid plans, published apps only), audits robots.txt, the sitemap, links, titles and descriptions, JSON-LD, Open Graph tags, headings and alt text, and turns each finding into a fix you can apply. Replit's SEO guide also suggests telling Agent "optimize my SEO". Its documented checks don't cover rendering, canonical tags or status codes, which is why steps 1 to 3 come first. After it runs, make sure each page's canonical points at your domain and that the sitemap uses the same URLs. Check titles with the SERP preview.

5. Verify the domain in Search Console

Add a Domain property, submit https://your-domain.com/sitemap.xml, and inspect one key URL with the live test to see the HTML Googlebot gets.

When Static deployment is the better fit

If your site has no backend (a landing page, docs, a blog with build-time content), a Static deployment serves files directly, and Replit's SEO guide calls it the best fit for content-heavy sites. It supports a root 404.html for paths that don't exist, [[deployment.rewrites]] (on the primary domain only), and custom response headers. Scope rewrites to the client-only part of the site so unknown URLs still reach the 404 page. Replit doesn't document redirect rules or the status code of that 404 page for Static deployments, so check it with the not-found curl.

.replit
[[deployment.rewrites]]
from = "/app/*"
to = "/app/index.html"

What you can and can't control

SEO controls on Replit ('not documented' means we found no official statement)
ItemAutoscale / Reserved VMStatic
Head tags, robots.txt, sitemapYes, in your codeYes, as files
Status codes and redirectsYes, in your server code404.html supported; redirects not documented
Host redirects (www, replit.app)In your server codeNot documented
Response headersIn your server code[[deployment.responseHeaders]]; Location is reserved
Cold startsAutoscale: a few seconds after idleNone

When to move off Replit, and how

Most apps can stay: with your own server code you control HTML, status codes and redirects. Consider moving if you want build-time rendering in a framework Replit Agent doesn't set up well, a CDN in front of static pages, or a team workflow in your own CI.

  1. Sync to GitHub or download a ZIP

    Connect GitHub in the Git pane and turn on auto-sync for two-way syncing, or use Download as zip from the file tree menu. Copies don't include secrets, the database or deployment config, so export those separately.

  2. Brief a coding agent in the repo
    Prompt for a coding agent
    This app was built with Replit Agent (React front end, Express server). Before we move
    hosts: make every public route return its H1, title, description and an absolute canonical
    on https://your-domain.com in the server HTML; return 404 for unknown URLs; redirect www to
    the apex with a 301; generate sitemap.xml from the route list. Done when curl against a
    production build shows all of that.
  3. Switch DNS last

    Point the domain at the new host only after the checks pass on its preview, then resubmit the sitemap.

In the exported repo, npx serpkin sets up Claude Code, Codex or Cursor, registers the site and runs a first scan. The scan flags pages whose text isn't in the server HTML, and small metadata fixes ship as one "Fix the basics" mission. npx serpkin check <preview-url> compares a preview with production and fails on regressions, which is a useful gate before you switch DNS.

Check a page nowFree: see what a crawler finds on any URL, with a prompt for your agent.

Questions

Is Replit good for SEO?

It can be. On Autoscale or Reserved VM your server code controls the HTML, status codes and redirects. The usual problem is an Agent-built React front end that renders in the browser; prerender the public pages to fix it.

How do I connect a custom domain on Replit?

Use the Domains tool on your published app. Buy a domain through Replit or add the A record and the replit-verify TXT record at your DNS provider. Add www separately, and keep the TXT record so SSL keeps renewing.

Does Replit have an SEO tool?

Yes. Every public publish gets an SEO Rating from a Lighthouse audit, and paid plans include SEO Agent in the Growth pane, which audits titles, descriptions, robots.txt, the sitemap, structured data and social tags and applies fixes.

Do Replit Autoscale cold starts hurt SEO?

Replit says the first request after scaling to zero can take a few seconds. That slows the occasional crawl but doesn't block indexing. If it matters, use a Reserved VM, which never sleeps, or serve public pages from a Static deployment.

Sources

Let your agent do the SEO work.

Serpkin finds the next fix from real search data, hands it to Claude Code, Codex or Cursor, and checks it after you ship.

npx serpkin
Start free