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.
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
- Google SEO Starter Guide
Google’s own version, straight from the source.
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
- Ahrefs Academy
The free “SEO Training Course” walks a real site through all three levers.
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
- The SEO Learning Roadmap
Aleyda Solís maintains this; it is the map this course is a shortcut through.
Do thisSkim the whole LearningSEO roadmap once — not to absorb it, just to know what exists.
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.
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.
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.
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.
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.
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 }
);
}Resources
Do thisConfirm a share card renders for your homepage and one inner page.
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
- Ahrefs Academy
The keyword research module of the free SEO course is the hands-on version.
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
- Ahrefs Academy
“Blogging for Business” is the deep course on content that compounds.
Do thisPick one query from your list and outline the page that would deserve to rank #1 for it.
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.
Why links are the ranking moat
6 min
A link from another site is a vote. Google treats links from relevant, trusted sites as the strongest authority signal — which is why great content on an unknown domain still struggles until someone links to it.
Resources
Earn your first links
8 min
Early links come from showing up where your audience already is: communities, newsletters, open-source, digital PR. You earn them by making something worth referencing, then telling the right people it exists.
Resources
- Semrush Academy
The free link-building courses cover outreach mechanics in detail.
Do thisList five places — subreddits, Discords, newsletters, directories — your readers already gather.
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
- Why doesn’t my page rank? checklist
The diagnostic checklist for when a page stalls.
Do thisAfter two weeks, sort your queries by impressions and pick one page to improve.