Coding SEO

What technical SEO looks like with nothing between you and the HTML — no theme, no plugin, no abstraction layer.

Why hand-code any of this?

WordPress and its plugins are convenient precisely because they generate this markup for you. Building it by hand once is what makes that convenience legible — you can see exactly which line of HTML a plugin setting eventually produces.

What lives in HTML vs. what doesn't

Some technical SEO controls are pure markup; others require server or hosting configuration that no amount of HTML can substitute for:

  • In HTML: title, meta description, canonical link, Open Graph tags, robots meta tag, structured data (JSON-LD), semantic headings, image alt/width/height.
  • Not in HTML: HTTP status codes, redirects, HTTP security headers, compression, and caching — these live at the server or CDN layer.

Example: a complete, minimal <head>

<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Technical SEO Basics | SEO Practice Lab</title>
<meta name="description" content="A practical introduction to technical SEO.">
<meta name="robots" content="index, follow">
<link rel="canonical" href="https://seopracticelab.example/blog/technical-seo-basics/">

The one JavaScript rule that matters most

Anything a search engine needs to see — navigation links, article content, pagination — exists as real HTML on this site, not something injected by JavaScript after the page loads. JavaScript here is limited to small UI behavior: the mobile menu toggle, the footer's copyright year, and a couple of form-status messages.

Why this matters Not every crawler executes JavaScript the same way, or at all. Content that only exists after a script runs is a common, avoidable cause of pages that look fine in a browser but crawl as empty.

Back to Technical SEO Compare to WordPress