---
title: "Is a v0 site SEO friendly? v0, Next.js and AI search"
description: "Usually yes: v0 builds Next.js apps that render on the server. What breaks it is client-only pages, an open vercel.app copy or a locked deployment. Test all three."
url: https://katman.pro/v0-seo
lang: en
updated: 2026-10-21
---

Situation Updated 21 Oct 2026

# Is my v0 site SEO friendly?

> Bring your v0 project and its live URL. v0 defaults to Next.js on Vercel, so most pages already reach bots as HTML; check the few places that break that: pages that load their text in the browser, metadata inside client components, a vercel.app copy competing with your domain, and access settings that lock bots out. Fix them in v0’s chat or your coding tool, without leaving Vercel.

## The short answer

Usually yes, for the technical part. v0 defaults to Next.js, can use React Server Components “for improved performance and SEO”, and deploys to Vercel ([v0 docs, “Full-stack apps”](https://v0.app/docs/full-stack-apps), read 15 Oct 2026). New chats start with Next.js, Tailwind CSS and shadcn/ui. So unlike a single-page React app, a v0 site normally sends its text as HTML.

Normally isn’t always. Four things undo it on v0 projects, and none of them shows up when you look at the site in your browser.

## Four traps on v0 sites

| Trap | Why it happens | What breaks |
| --- | --- | --- |
| Text loaded in the browser | A page marked `"use client"` fetches its content in `useEffect` | AI crawlers see an empty section; they don’t run JavaScript |
| Metadata in a client component | Next.js supports `metadata` and `generateMetadata` only in Server Components ([Next.js docs, “Metadata and OG images”](https://nextjs.org/docs/app/getting-started/metadata-and-og-images), read 15 Oct 2026) | Every page keeps the layout’s title and description |
| An open vercel.app copy | Every deployment gets a `vercel.app` URL, and the production one stays reachable | Google may pick the wrong address as canonical |
| Bots locked out | Visibility chosen at first publish, Deployment Protection, or a firewall rule set to deny | 401 or 403 instead of your page |

Two Vercel defaults work in your favor. Deployments from non-production branches carry `X-Robots-Tag: noindex` ([Vercel KB, “Are Vercel preview deployments indexed?”](https://vercel.com/kb/guide/are-vercel-preview-deployment-indexed-by-search-engines), read 15 Oct 2026), and the AI bots managed ruleset is inactive unless you turn it on ([Vercel docs, “Bot Management”](https://vercel.com/docs/bot-management), read 15 Oct 2026).

## Test it in one minute

An example; replace both addresses with yours:

```bash
URL=https://yourdomain.com
curl -s $URL/ | sed 's/<[^>]*>/ /g' | wc -w
curl -s -A 'Mozilla/5.0 (compatible; GPTBot/1.2)' $URL/pricing \
  | grep -o '<title>[^<]*</title>'
curl -s -o /dev/null -w '%{http_code}\n' \
  -A 'Mozilla/5.0 (compatible; OAI-SearchBot/1.0)' $URL/
curl -sI https://your-project.vercel.app/ | grep -iE '^(http|location|x-robots-tag)'
```

What good looks like: hundreds of words, the pricing page’s own title, `200` for OAI-SearchBot, and a `vercel.app` address that returns a `308` to your domain (or pages whose canonical names your domain). Next.js streams metadata on dynamic pages and turns that off only for bots it recognizes by user agent; if the title is missing for GPTBot, look at the `htmlLimitedBots` option in the same Next.js docs.

## Fixes in v0

1.  **Move page text to server components.** Paste this into v0’s chat, as an example:

```text
On every public page (/, /pricing, /faq and the pages in the footer),
render headings, paragraphs and FAQ answers in server components. Keep
"use client" only for interactive parts. Give each route its own metadata
export or generateMetadata. Accept when: curl of each page shows its own
<title> and its H1 and first paragraph without JavaScript.
```

2.  **Add `app/sitemap.ts` and `app/robots.ts`.** Next.js generates both files from code, so the sitemap lists your routes on your custom domain.
3.  **Pick one address.** Add your domain from Publish → Customize Domain or Project menu → Settings → Domains; DNS and redirects are handled in the Vercel dashboard ([v0 docs, “Custom domain”](https://v0.app/docs/custom-domains), read 15 Oct 2026). Then redirect the production `vercel.app` host with a 308, or add canonicals, as [Vercel’s duplicate-content guide](https://vercel.com/kb/guide/avoiding-duplicate-content-with-vercel-app-urls) describes. Don’t point every canonical at the home page.
4.  **Check production visibility** under Project menu → Settings → Vercel Project. Public pages need to be public.
5.  **Publish through GitHub.** Connecting GitHub makes v0 create a private repository; each chat works on its own branch with a preview deployment, and Publish merges a pull request ([v0 docs, “GitHub”](https://v0.app/docs/github), read 15 Oct 2026).

## What Next.js can’t write for you

Rendering gets you read; it doesn’t get you named. Assistants quote pages whose first two sentences answer a buyer’s question, on sites whose facts match everywhere. Write one page per buyer situation and ask those questions every 14 days to see who gets named: [why ChatGPT doesn’t recommend your brand](https://katman.pro/why-chatgpt-does-not-recommend-my-brand) and [how to check](https://katman.pro/check-if-chatgpt-recommends-your-site).

## What Katman does on a v0 project

Open the GitHub repo in Cursor, Claude Code or another MCP client. `katman_scan_code` reports the v0 signature, the Next.js version, which routes render on the server and which only in the browser, and where head tags come from; `katman_audit_site` reads the live pages as AI crawlers do and can check your preview and `vercel.app` addresses; `katman_generate` writes robots.txt, llms.txt and JSON-LD from your research file. Katman doesn’t edit the code: v0 or your coding tool does, and Katman checks the result. It can’t change Vercel settings for you, and nobody can promise an assistant will recommend you. Katman Pro is $99 a month for up to 3 sites, with fix prompts and page briefs uncapped. Or have us do it: [Growth](https://katman.pro/done-for-you) writes 30 pages a month for you. [How Katman works](https://katman.pro/mcp).

Written by the Katman team, Rnify Limited. v0, Vercel and Next.js pages read 15 October 2026.

## Who this is not for

-   v0 prototypes you never publish: only the production deployment matters for search.
-   Deployments behind Vercel Authentication on purpose: they should stay out of search.
-   Anyone expecting Next.js alone to get a site recommended: rendering is the first gate, not the last.

## Frequently asked questions

### Does v0 render pages on the server?

By default, mostly yes. v0’s docs say it defaults to Next.js and can use React Server Components for performance and SEO; pages marked “use client” that fetch their text in the browser are the exception.

### Will my vercel.app address compete with my custom domain?

It can, because the production vercel.app URL stays reachable. Vercel’s own guide suggests a host-scoped 308 redirect to your domain, or canonical tags on every page pointing at it.

### Are v0 preview deployments indexed by Google?

They shouldn’t be. Vercel says every deployment from a non-production branch carries an X-Robots-Tag noindex header by default, and v0 builds each chat’s changes on a working branch.

### Does Vercel block AI crawlers by default?

No. Vercel’s docs say its AI bots managed ruleset is inactive by default, shown as Allow. It only blocks AI bots if someone sets it to deny.

### Why doesn’t my page title change when v0 edits the metadata?

Often because the metadata sits in a client component. Next.js supports the metadata object and generateMetadata only in Server Components.

## Related pages

-   [**I built my site with Lovable, Bolt or Cursor, and ChatGPT never mentions it** Built it with Lovable, Bolt, v0 or Cursor and ChatGPT never mentions it? Six traps hide vibe-coded sites; each has a one-minute test and a fix for your AI tool.](https://katman.pro/vibe-coded-site-invisible-to-chatgpt)
-   [**Is React bad for SEO, or is it my single-page app?** React is fine for SEO; an empty SPA shell is not. Google renders JavaScript in a queue, the crawlers behind ChatGPT and Claude read only raw HTML. Test, then fix.](https://katman.pro/react-spa-seo-ai-crawlers)
-   [**Is Cloudflare blocking AI crawlers from my site?** robots.txt allows GPTBot but Cloudflare returns 403? The three AI bot types, the settings that block them, the 15 Sep 2026 change, a curl test and the fix.](https://katman.pro/cloudflare-blocking-ai-crawlers)
-   [**How do I check whether ChatGPT, Claude and Perplexity recommend my site?** Ask 12 unbranded questions and 2 “What is \[brand\]?” ones logged out, then log who is named, recommended and cited. Why one answer misleads, and the API option.](https://katman.pro/check-if-chatgpt-recommends-your-site)
-   [**Is Lovable SEO friendly?** Mostly yes: new Lovable apps are server-rendered and its SEO review fixes the technical basics. It can’t pick the pages buyers need or measure what assistants say.](https://katman.pro/lovable-seo)
-   [**Katman MCP** Katman MCP runs in Cursor, Claude Code and VS Code: it scans your code, audits your live site like AI crawlers do and checks every fix. Katman Pro from $99/month.](https://katman.pro/mcp)

Updated 21 October 2026 · Katman
