← All posts

A Developer's Starter Guide to SEO

📖 7 min read • May 28, 2026 • Nikhil Nathwani

When I decided to make my projects discoverable, I realized I had no idea what "doing SEO" actually meant in practice. I knew roughly what it was—optimizing for search engines—but I'd never implemented it for a real site.

The research process felt like an archaeological dig. Every article touched on something different, used different vocabulary, and assumed different levels of knowledge. I had to cross-reference a dozen sources to get a coherent picture of what I actually needed to do and in what order.

This post is the guide I wish I'd had: a clear, sequential checklist with code examples and honest "why this matters" explanations.

How Search Engines Work (Briefly)

Before the checklist, a quick mental model. Search engines do three things:

  1. Crawl — bots (Googlebot, Bingbot) follow links and discover pages
  2. Index — they read and store page content so it can be searched
  3. Rank — when someone searches, they decide which indexed pages to show and in what order

The checklist below addresses all three stages: helping bots find your pages, helping them understand your content, and giving them signals to rank you well.

The Checklist

1. Title Tag

The <title> tag is the single most important on-page SEO element. It's what appears as the clickable headline in search results. Make it descriptive and specific.

<!-- Bad: generic -->
<title>Home</title>

<!-- Good: descriptive -->
<title>Nikhil Nathwani — Web Developer &amp; Blog</title>

For blog posts, put the article title first, then your name: Article Title | Your Name. Google typically displays ~60 characters before truncating.

2. Meta Description

The description that appears under your title in search results. It doesn't directly affect ranking, but it affects click-through rate—which does.

<meta
    name="description"
    content="How I replaced ~30 lines of JavaScript ranking logic
             with a single SQL RANK() window function."
/>

Keep it under 160 characters. Write it like ad copy: tell the reader exactly what they'll get, and make it sound worth clicking.

3. Canonical URL

If your page is accessible at multiple URLs (with/without trailing slash, with/without www, HTTP vs HTTPS), search engines may treat them as duplicate content and split ranking signals between them. A canonical tag tells search engines which version is authoritative.

<link
    rel="canonical"
    href="https://nikhilnathwani.com/blog/session-management.html"
/>

Even if you don't have a duplicate URL problem today, it's a cheap one-liner to add to every page.

4. robots.txt

A plain text file at the root of your site that tells crawlers which pages they can and can't index. For most personal sites, you want everything crawled:

User-agent: *
Allow: /

Sitemap: https://yourdomain.com/sitemap.xml

The Sitemap: line is a bonus: it tells crawlers where to find your sitemap (see below) so they don't have to discover it on their own.

5. sitemap.xml

A sitemap is a list of all pages on your site. It helps search engines discover content they might miss otherwise, and tells them how often pages change.

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">

  <url>
    <loc>https://yourdomain.com/</loc>
    <lastmod>2026-05-25</lastmod>
    <changefreq>monthly</changefreq>
    <priority>1.0</priority>
  </url>

  <url>
    <loc>https://yourdomain.com/blog/my-post.html</loc>
    <lastmod>2026-02-02</lastmod>
    <changefreq>never</changefreq>
    <priority>0.7</priority>
  </url>

</urlset>

Update it whenever you publish a new page. Remember to also submit it in Google Search Console (step 8 below).

6. Structured Data (JSON-LD)

Structured data is metadata that helps search engines understand what your content is, not just what it says. You add it as a <script type="application/ld+json"> block using the schema.org vocabulary.

For a personal site, two types are most useful:

Person — on your homepage, describes who you are:

<script type="application/ld+json">
{
    "@context": "https://schema.org",
    "@type": "Person",
    "name": "Nikhil Nathwani",
    "url": "https://nikhilnathwani.com",
    "jobTitle": "Full-Stack Web Developer",
    "sameAs": [
        "https://github.com/nikhilNathwani",
        "https://www.linkedin.com/in/nathwani-nikhil/"
    ]
}
</script>

BlogPosting — on each article page, describes the post:

<script type="application/ld+json">
{
    "@context": "https://schema.org",
    "@type": "BlogPosting",
    "headline": "Moving Calculations from Frontend to Backend",
    "description": "How I replaced ~30 lines of JavaScript with a SQL RANK() window function.",
    "url": "https://nikhilnathwani.com/blog/sql-window-functions-refactor.html",
    "datePublished": "2026-01-26",
    "author": {
        "@type": "Person",
        "name": "Nikhil Nathwani",
        "url": "https://nikhilnathwani.com"
    }
}
</script>

Structured data can unlock rich results— enhanced search listings with extra info (star ratings, breadcrumbs, author bylines). For blog posts, it can trigger author attribution in search snippets.

7. Open Graph + Twitter Card Tags

These aren't strictly SEO, but they're SEO-adjacent and worth doing at the same time. When someone shares your URL on LinkedIn, Slack, Twitter/X, or iMessage, these tags control the preview card that appears.

<!-- Open Graph (Facebook, LinkedIn, Slack, iMessage) -->
<meta property="og:type" content="article" />
<meta property="og:url" content="https://yourdomain.com/blog/post.html" />
<meta property="og:title" content="Post Title | Your Name" />
<meta property="og:description" content="Post description." />
<meta property="og:image" content="https://yourdomain.com/og-image.png" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />

<!-- Twitter Card -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Post Title | Your Name" />
<meta name="twitter:description" content="Post description." />
<meta name="twitter:image" content="https://yourdomain.com/og-image.png" />

Your OG image should be 1200×630px. A clean branded image goes a long way—even a simple one with your name and the post title.

8. Google Search Console

Google Search Console (GSC) is free and invaluable. It shows you which searches are surfacing your pages, click-through rates, and any crawl errors Google encounters.

Setup steps:

  1. Go to search.google.com/search-console
  2. Add your domain and verify ownership (usually via a DNS TXT record or an HTML file upload)
  3. Submit your sitemap: in the left sidebar, go to Sitemaps and enter your sitemap.xml URL
  4. Use URL Inspection to request indexing for new pages

After submitting, it can take a few days to a few weeks for Google to crawl and index your pages. GSC will tell you when they're indexed and flag any issues.

9. Bing Webmaster Tools

Yes, there's a Bing equivalent—and it's worth doing because DuckDuckGo uses Bing's index. Verifying on Bing covers both search engines at once.

Setup steps:

  1. Go to bing.com/webmasters
  2. Sign in with a Microsoft account
  3. If you've already done Google Search Console, use the "Import from Google Search Console" option—it copies your site and sitemap configuration in one click
  4. Verify ownership (Bing accepts the same HTML meta tag method as Google)

The import from GSC makes this genuinely quick—it took me about five minutes after GSC was already set up.

What You Can Mostly Ignore

SEO content online often oversells the complexity. For a personal developer site, here's what doesn't need to be on your radar:

Validation Tools

Once you've implemented the above, use these to verify everything is working:

Putting It Together

The full SEO surface area sounds large, but most of it is a one-time setup. Write your title and description tags, add a canonical link, drop in a robots.txt and sitemap.xml, add JSON-LD, paste in the OG/Twitter meta tags, and submit to both Search Consoles. Total time for a new site: a few hours at most.

The part that requires ongoing attention is keeping your sitemap up to date as you publish new pages and checking Search Console periodically for crawl errors or new ranking data.

Everything else—writing good content, loading fast, being mobile-friendly—is the foundation that makes all of this worth anything. The technical checklist above is just how you tell search engines that foundation exists.