DEV Community

Cover image for SEO for New Websites: A Developer's Launch Checklist (Sitemap, Robots, CWV, Schema)
Jai Nischal Verma
Jai Nischal Verma

Posted on Originally published at sitesyouown.com

SEO for New Websites: A Developer's Launch Checklist (Sitemap, Robots, CWV, Schema)

A brand-new domain has no history, no backlinks and no trust. Most "our SEO isn't working" tickets I've seen in 20+ years of shipping sites weren't caused by content. They came from something technical that slipped through at launch, like a staging noindex or a Disallow: / nobody removed.

This is the checklist I run on every launch, with the dev-side details spelled out.

The mental model: crawl → index → rank

  1. Crawl: Googlebot discovers URLs through links and your sitemap.
  2. Index: Google renders the page, works out what it's about and stores it.
  3. Rank: for each query, Google picks the results it considers most helpful.

Each stage gates the next. A page that can't be crawled can't be indexed, and an unindexed page can't rank. When debugging, work through the stages in that order.

Realistic expectations: new sites usually need 3–6 months of consistent work before rankings build momentum, and longer in competitive niches. Nobody can guarantee a #1 position, and Google says so itself. Good engineering gives your pages a fair shot. It doesn't guarantee a result.

1. Make the site crawlable

robots.txt

Ship a deliberate robots.txt and point it at your sitemap:

User-agent: *
Disallow: /admin/
Disallow: /cart/

Sitemap: https://www.example.com/sitemap.xml
Enter fullscreen mode Exit fullscreen mode

The most common launch bug is a staging Disallow: / that gets deployed to production. Add a CI check for it:

curl -s https://www.example.com/robots.txt | grep -qE '^Disallow:\s*/\s*$' && echo "BLOCKED" && exit 1
Enter fullscreen mode Exit fullscreen mode

Remember that robots.txt controls crawling, not indexing. To keep a page out of the index, use noindex, and don't also block that URL in robots.txt, because then Google never sees the tag.

Leftover noindex

Check the HTML and the headers:

curl -sI https://www.example.com/ | grep -i x-robots-tag
curl -s  https://www.example.com/ | grep -i 'name="robots"'
Enter fullscreen mode Exit fullscreen mode

Your build should only emit <meta name="robots" content="noindex"> for environments that are not production. Gate it on an env var, not a CMS checkbox someone forgets to untick.

XML sitemap

Generate the sitemap at build time from your routes. Include only canonical, indexable, 200-status URLs, and use a real lastmod:

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://www.example.com/services/</loc>
    <lastmod>2026-11-04</lastmod>
  </url>
</urlset>
Enter fullscreen mode Exit fullscreen mode

2. One site, one address

  • Force HTTPS and choose one host (www or apex). 301 every other variant to it.
  • Add a self-referencing canonical on every page:
<link rel="canonical" href="https://www.example.com/services/">
Enter fullscreen mode Exit fullscreen mode
  • Settle on trailing-slash and lowercase rules and enforce them consistently.
  • Choose clean URL slugs (/seo-checklist/, not /page?id=48392) before launch. Changing them later means maintaining redirect maps.

3. Get indexed with Search Console

  1. Verify a Domain property (DNS TXT record), which covers every protocol and subdomain.
  2. Submit sitemap.xml under Sitemaps.
  3. Use URL Inspection → Test live URL on key pages. It shows the rendered HTML, the canonical Google selected, and whether indexing is allowed. Then click Request indexing.
  4. Check the Pages (indexing) report weekly at first. "Crawled – currently not indexed" usually points to a content-quality or duplication problem rather than a technical one.

If your content depends on client-side JS, check the rendered HTML in URL Inspection. Server-render or pre-render anything you need indexed. Titles, H1s, body copy and internal links should be in the initial HTML.

4. Core Web Vitals

Google's targets, measured at the 75th percentile of real users:

Metric Measures Good
LCP main content render ≤ 2.5 s
INP interaction responsiveness ≤ 200 ms
CLS layout stability ≤ 0.1

Practical wins:

<!-- LCP image: don't lazy-load it, give it priority -->
<img src="/hero.avif" width="1200" height="630" fetchpriority="high" alt="...">

<!-- Below the fold: lazy-load, always set dimensions to avoid CLS -->
<img src="/team.webp" width="800" height="533" loading="lazy" alt="Our team on site in Denver">
Enter fullscreen mode Exit fullscreen mode
  • Serve AVIF/WebP and use responsive srcset.
  • Defer non-critical JS. Third-party tags are the usual INP killers.
  • Reserve space for embeds and ads, and use font-display: swap with preloaded fonts.
  • Cache aggressively and put static assets behind a CDN.

Use PageSpeed Insights for field data (CrUX) and Lighthouse for lab debugging. Keep in mind that a new site often has no field data yet.

5. Structured data

Use JSON-LD where it honestly describes the page: Organization/LocalBusiness, WebSite, Article, BreadcrumbList, and FAQPage where it applies.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "SEO for New Websites",
  "author": { "@type": "Person", "name": "Jai Nischal Verma" },
  "datePublished": "2026-11-04",
  "image": "https://www.example.com/cover.jpg"
}
</script>
Enter fullscreen mode Exit fullscreen mode

Validate it with the Rich Results Test. Schema helps Google understand a page, but it doesn't buy you rankings, and markup that doesn't match the visible content can get you a manual action.

6. On-page basics

These aren't technical, but they're cheap to get right in templates:

  • A unique <title> and meta description per page. Generate them from content fields and fail the build if they're empty or duplicated.
  • One <h1>, with a logical H2/H3 hierarchy.
  • Descriptive image file names and alt text.
  • Two or three contextual internal links per page, with descriptive anchor text.
  • Mobile-first, responsive layout with tap-friendly targets. Google indexes the mobile version.

7. Content and links (the part you can't automate)

  • Target long-tail, intent-matched queries first. A new domain won't win "seo".
  • Give each page one primary keyword so your own pages don't compete.
  • Write people-first content with a real author and real experience (E-E-A-T).
  • Organise it into topic clusters: a pillar page plus supporting posts, all internally linked.
  • Earn links from partners, suppliers, directories and genuinely useful tools or data. Never buy links, because it breaks Google's spam policies.

8. Measure

  • Search Console: impressions move first, then clicks. Filter for queries at average position 8–20. Those "striking distance" pages are your best ROI.
  • GA4: track the conversions that matter (form submits, tel: clicks) as events.
  • Review monthly, not daily.

A 90-day plan

  • Days 1–30: set up GSC and GA4, ship the sitemap, audit robots.txt and noindex, set up HTTPS and canonical host redirects, fix titles, meta and CWV.
  • Days 31–60: publish 4–6 helpful long-tail pages, link them together, add alt text, and give every service its own URL.
  • Days 61–90: earn your first backlinks, improve striking-distance pages, review the data and plan the next quarter.

I'm Jai. I run Sites You Own, a remote web studio in New Delhi that builds fast, fixed-price sites for small businesses (from $349). Whatever the stack, these foundations go in at launch, and the client owns the domain, hosting and every login.

📖 Full guide (all 25 tips): SEO for New Websites: 25 Practical Tips
📄 Free printable PDF (7 pages, no email): The Launch Playbook: SEO for New Websites

Top comments (0)