SEO · SEO & preview

On-page SEO in 2026: the 12 things that actually matter

Published 2026-10-05

On-page SEO has 12 things that matter. Everything else is either outdated or noise. This post walks through each one and what good looks like.

TL;DR

Title, meta, OG tags, robots, sitemap, JSON-LD. Skip the 200-item checklists. Here is what moves the needle for organic search.

The four essentials

A unique, descriptive tag (50–60 characters). A unique <meta name="description"> that summarizes the page (140–160 characters). A <link rel="canonical"> that points to the canonical URL. A single <h1> per page that matches the topic. If you get these right and skip everything else, you will still rank for most queries.</p> <h2>The four that help with social shares</h2> <p>Open Graph tags (og:title, og:description, og:image, og:url) control how your link looks when shared on Slack, Twitter, LinkedIn, Discord. Twitter Card tags (twitter:card, twitter:image) override for Twitter specifically. A og:image of 1200×630 with text readable at thumbnail size works best. JSON-LD structured data (Article, Product, FAQPage, etc.) can produce rich snippets in Google.</p> <h2>The technical four</h2> <p>A robots.txt that disallows crawlers from junk (search results pages, internal search, admin pages). An XML sitemap that lists every public URL. Structured data (JSON-LD) that matches the page content (Article for blog posts, Product for product pages, FAQPage for Q&A). Mobile-friendly responsive design with readable font sizes and tap targets.</p> <h2>What does not matter anymore</h2> <p>Keyword stuffing (penalized since 2011). Meta keywords tag (I added this in 2009, it has not been a ranking factor since). Excessive internal linking (a few contextual links per page is enough). Long-form content for its own sake (a 3000-word post that does not answer the question is worse than a 600-word post that does).</p> </section> <section class="mt-8 card p-5 border-brand-400/30" style="border-color: rgba(34, 211, 238, 0.30);"> <h2 class="text-base font-bold mb-2 text-brand-300">Try it →</h2> <p class="text-slate-300 text-sm leading-relaxed mb-3">Run the SEO checker tool on sitetrace.it.com — paste a value and get an instant answer.</p> <a href="/seo-checker/" class="inline-flex items-center gap-2 px-4 py-2 rounded-lg bg-brand-gradient text-ink-900 font-semibold text-sm hover:opacity-90 transition"> Open SEO checker <svg class="w-4 h-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M7 7h10v10"/><path d="M7 17 17 7"/></svg> </a> </section> <div class="mt-8 text-sm text-slate-500"> <a href="/blog/" class="hover:text-brand-300">← Back to all articles</a> </div> </article> </main> <footer class="border-t border-white/5 mt-12"> <div class="max-w-6xl mx-auto px-4 sm:px-6 py-10 grid sm:grid-cols-[2fr_1fr_1fr] gap-8 text-sm"> <div> <div class="flex items-center gap-2 mb-3"> <span class="w-7 h-7 rounded-lg bg-brand-gradient"></span> <span class="font-bold">SiteTrace</span> </div> <p class="text-slate-400 text-xs leading-relaxed max-w-md">Free, no-login network tools. No accounts, no tracking, no nonsense.</p> </div> <div> <div class="text-slate-500 text-xs uppercase tracking-widest mb-2">About</div> <ul class="space-y-1 text-slate-300"> <li><a href="/about/" class="hover:text-white">About</a></li> <li><a href="/blog/" class="hover:text-white">Blog</a></li> <li><a href="/privacy/" class="hover:text-white">Privacy</a></li> </ul> </div> <div> <div class="text-slate-500 text-xs uppercase tracking-widest mb-2">Language</div> <ul class="space-y-1 text-slate-300 text-sm"> <li><button class="lang-link hover:text-white" data-lang="en">English</button></li> <li><button class="lang-link hover:text-white" data-lang="es">Español</button></li> </ul> </div> </div> <div class="border-t border-white/5"> <div class="max-w-6xl mx-auto px-4 sm:px-6 py-4 text-xs text-slate-500 flex flex-col sm:flex-row items-center justify-between gap-2"> <span>© 2026 SiteTrace. All rights reserved.</span> <span class="font-mono">v1.0.0</span> </div> </div> </footer> <script src="/js/i18n.js?v=32"></script> <script src="/js/layout.js?v=32"></script> </body> </html>