ChillScan

← Full launch checklist

v0 + Vercel SEO Checklist

v0 hands you a slick Next.js app and Vercel puts it online in seconds. But a pretty page Google can't read is a secret. This checklist covers the SEO setup that turns your deploy into something people can actually find.

Not affiliated with v0 or Vercel. Just big fans of people shipping things.

TL;DR

Export metadata on every page and set metadataBase. Add an OG image, app/sitemap.ts and app/robots.ts. Make sure your page text shows up in View Source. Then check it in Search Console's URL Inspection.

Scan your v0 app free →

1. Export real metadata from every page

v0 generates Next.js App Router code, which has SEO built in — if you use it. Each public page should export const metadata (or generateMetadata) with a unique title and description, and your root layout should set metadataBase to your real domain.

How to check: View Source on each page and look for a specific <title> and <meta name="description"> — not "v0 App" or "Create Next App".

Prompt to paste into v0 or Cursor

For every public route in app/, add an exported metadata object with a unique title, a 140–160 character description, alternates.canonical, and openGraph fields. Set metadataBase in app/layout.tsx to my production domain. Show me a table of route → title → description.

2. Give links a proper OG image

Shared links without an image get scrolled past. Add an opengraph-image.tsx (or a static opengraph-image.png) at the root, and per-page ones for your most-shared pages. 1200×630 is the sweet spot.

How to check: Paste your URL into a link previewer (or a Slack DM to yourself) and see what shows up.

3. Add sitemap.ts and robots.ts

Next.js turns app/sitemap.ts into /sitemap.xml and app/robots.ts into /robots.txt. List every public page in the sitemap and point robots at it. Make sure robots isn't blocking everything — and that preview deployments are the only thing marked noindex.

Prompt to paste into v0 or Cursor

Create app/sitemap.ts that returns every public route with absolute URLs on my production domain, and app/robots.ts that allows all crawlers, disallows /api and any private/dashboard routes, and links to the sitemap.

4. Make sure the content is in the HTML

The big win of Next.js is server rendering, but it's easy to lose: a "use client" at the top of a page that fetches everything in useEffect means Google gets an empty shell.

How to check: Right-click → View Page Source (not Inspect). Search for a sentence from your hero. If it's not there, move data fetching into a Server Component and keep "use client" for the interactive bits only.

Prompt to paste into v0 or Cursor

Audit each page in app/ for content that only renders on the client. Convert pages to Server Components where possible, fetch data on the server, and push 'use client' down to small interactive components so the main page text is in the initial HTML.

5. Test it like Google

  • View Source for title, description, canonical, OG tags and real text.
  • Google Search Console → add your domain → URL Inspection → "Test live URL" → view the rendered HTML and screenshot.
  • Submit your sitemap in Search Console so Google finds every page.
  • Check /robots.txt and /sitemap.xml load on your custom domain, not just the .vercel.app one.

6. Custom domain, HTTPS and one canonical host

Pick www or the bare domain and redirect the other in Vercel → Domains. Your .vercel.app URL should redirect too (or at least be canonicalized), so Google doesn't index duplicates. Vercel handles HTTPS; just make sure nothing loads over plain HTTP.

7. Security headers and leaked keys

Add headers via headers() in next.config.js: Strict-Transport-Security, X-Content-Type-Options: nosniff, X-Frame-Options: DENY, Referrer-Policy: strict-origin-when-cross-origin, and a Content-Security-Policy (start in report-only mode). And keep secrets out of NEXT_PUBLIC_ env vars — anything with that prefix ships to the browser.

See also what ChillScan checks for headers.

8. Speed check

Use next/image, avoid shipping giant client bundles, and lazy-load heavy components. ChillScan reports response time, page weight and bundle size.

The v0 + Vercel SEO checklist

Copy this into a note before you share the link.

[ ] Unique title + description on every public page
[ ] metadataBase set to the production domain
[ ] OG image (1200x630) on home + key pages
[ ] app/sitemap.ts and app/robots.ts live
[ ] Page text visible in View Source (not client-only)
[ ] Search Console: domain verified, sitemap submitted
[ ] URL Inspection → live test looks right
[ ] One canonical host (www vs bare, .vercel.app redirected)
[ ] No secrets in NEXT_PUBLIC_ env vars
[ ] Security headers in next.config.js
[ ] Mobile load feels fast

What ChillScan can't see

ChillScan checks what's publicly visible: titles, descriptions, OG tags, sitemap, robots, headers, HTTPS and speed. It can't see your Search Console data or how Google ranks you, so step 5 is on you — and now you know how. For the full launch list, see the launch checklist.

Let ChillScan do the boring part

Paste your v0 app's URL (or any website). In about 30 seconds you'll know about leaked keys, missing headers, HTTPS issues, SEO gaps and slow pages. Free, no signup. The $12 deep scan gives you every finding with explanations, fix tips and evidence, plus one prompt you can paste back into v0, Cursor or Claude to fix it all.

The full launch checklist →

More platform checklists: Lovable security checklist, Bolt.new launch checklist, Replit launch checklist.