All starter kits

Starter Kit

Learn SEO like a course, not a rabbit hole

An interactive SEO course for developers. Learn how search works, ship the technical floor as copyable Next.js code, then keywords, links, and measurement — and track your progress as you go.

5 modules15 lessons~1.7h
01

How search actually works

Before touching code, build the mental model. Every SEO decision is easier once you can picture the pipeline.

Crawl, index, rank

8 min

Google discovers pages through links and sitemaps (crawl), stores a parsed copy (index), then ranks that index on relevance and authority when someone searches. Everything you do fits one of those three stages.

Resources

The three levers

6 min

Technical (can Google read it), content (is it the best answer), and links (does the web vouch for it). You control the first two directly; the third is a consequence of the other two done well.

Resources

The honest order of operations

4 min

Technical first, content second, links last. You cannot rank what Google cannot read, and you cannot earn links to what does not exist yet. Most beginners skip the floor and wonder why nothing ranks.

Resources

Do thisSkim the whole LearningSEO roadmap once — not to absorb it, just to know what exists.

02

The technical floor (the toolkit)

Six files cover the crawlability floor. Each block is the whole task — swap your domain and paste. This is the part a developer gets right in an afternoon.

A sitemap of only canonical URLs

6 min

The sitemap tells Google the full list of URLs you want indexed. The one rule that matters: list only canonical URLs — pointing it at filtered or duplicated pages tells Google to index URLs your own pages disclaim.

app/sitemap.ts
import { MetadataRoute } from 'next';

export default function sitemap(): MetadataRoute.Sitemap {
  const baseUrl = 'https://your-site.com';
  const now = new Date().toISOString();

  return [
    { url: baseUrl, lastModified: now, changeFrequency: 'daily', priority: 1 },
    { url: `${baseUrl}/about`, lastModified: now, changeFrequency: 'monthly', priority: 0.8 },
    // Map over your posts, tools, or products here.
  ];
}

Do thisGenerate /sitemap.xml and confirm it loads in the browser.

A robots.txt that points at the sitemap

5 min

Tells crawlers what they may fetch and where the sitemap lives. If you do nothing else, point it at the sitemap — Search Console and every auditor checks here first.

app/robots.ts
import { MetadataRoute } from 'next';

export default function robots(): MetadataRoute.Robots {
  return {
    rules: { userAgent: '*', allow: '/' },
    sitemap: 'https://your-site.com/sitemap.xml',
  };
}

Do thisGenerate /robots.txt and confirm it references your sitemap.

Titles, descriptions, and canonical URLs

7 min

The title and description are what a searcher reads before clicking; the canonical is you telling Google which URL is the real one. All three belong in metadata, not buried in a component.

app/about/page.tsx
import type { Metadata } from 'next';

export const metadata: Metadata = {
  title: 'About',
  description: 'Who we are and why this site exists.',
  alternates: { canonical: '/about' },
  openGraph: { url: '/about' },
};

Do thisGive every public page a unique title, description, and canonical.

Structured data, honestly

7 min

JSON-LD that describes what a page is — an article, an app — so Google can show more than a bare link. The trap is invisible markup: a rating or price you do not actually have. Mark up only what is real, and leave the rest off.

app/blog/[slug]/page.tsx
const jsonLd = {
  '@context': 'https://schema.org',
  '@type': 'Article',
  headline: post.title,
  datePublished: post.date,
  author: { '@type': 'Organization', name: 'Your Site' },
};

// In the page body:
<script
  type="application/ld+json"
  dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
/>

Do thisAdd Article or Breadcrumb markup to one page; validate it in Google’s Rich Results Test.

Share cards and a favicon

5 min

The og image turns a bare URL into a preview when shared; the favicon is the only asset that shows in the tab, the SERP, and a bookmark at once. Next generates cards from a per-route file, so new pages get one by existing.

app/opengraph-image.tsx
import { ImageResponse } from 'next/og';

export const size = { width: 1200, height: 630 };
export const contentType = 'image/png';

export default function Image() {
  return new ImageResponse(
    <div style={{ width: '100%', height: '100%', background: '#121A30' }}>
      {/* your card design */}
    </div>,
    { ...size }
  );
}

Do thisConfirm a share card renders for your homepage and one inner page.

03

Keywords & content

The floor gets you indexable. This is the other 80% — the part that actually earns rankings. It is a skill, not a file.

Find a query you can actually win

10 min

Keyword research is finding queries with real search volume that a new site can plausibly rank for. Early on, favour specific, lower-competition queries over broad head terms you will never crack.

Resources

Do thisWrite down five queries your ideal reader types, and check who currently ranks for each.

Match the intent behind the query

6 min

Every query has an intent — learn, compare, buy, or do. Google already shows you the answer: the current results for a query tell you the format and depth it rewards. Match it before you write a word.

Write the single best answer

12 min

Content that ranks is the best answer on the internet for one specific query — clearer, more complete, more current than what is already there. One excellent page beats ten thin ones.

Resources

Do thisPick one query from your list and outline the page that would deserve to rank #1 for it.

04

Links & authority

Authority is the lever you cannot fully control, but you can earn it. It matters most once the floor and the content exist.

05

Measure & iterate

SEO is a compounding loop, not a launch task. This is how you see whether it is working and what to do next.

Set up Search Console

6 min

Google Search Console is the one non-negotiable tool: it shows which queries you appear for, your click-through rate, and any indexing or structured-data errors. Verify your site and submit the sitemap from lesson two.

Do thisVerify your domain and submit /sitemap.xml.

Read the data, then iterate

8 min

Watch which queries get impressions but few clicks (improve the title), which pages get impressions but no clicks at all (improve the content), and double down on whatever starts to win.

Resources

Do thisAfter two weeks, sort your queries by impressions and pick one page to improve.