Technical SEO: The Non-Negotiable Basics

Keyboard shortcuts
  • JNext lesson
  • KPrevious lesson
  • /Search lessons
  • EscClear search

I know what you’re thinking. “I’m a blogger, not a developer. Why do I need to know technical SEO?”

Because technical SEO is the foundation everything else sits on. You can write the best content in the world, build a perfect internal linking strategy, and earn backlinks from major sites. But if your pages take 6 seconds to load, or Google can’t crawl half your site, none of it matters.

The good news? You don’t need to be a developer. I’ve been building websites for 16+ years, and I can tell you that 90% of technical SEO for bloggers comes down to a handful of things you set up once and check occasionally. This chapter covers those things. No fluff, no unnecessary complexity. Just the stuff that actually affects whether your content ranks.

Site Speed: Core Web Vitals Explained Simply

Google has told us, publicly and repeatedly, that page speed affects rankings. They’ve even given us specific metrics to hit. These are called Core Web Vitals, and there are three of them.

Largest Contentful Paint (LCP). This measures how long it takes for the biggest visible element on your page to load. Usually that’s your hero image or the main text block. Google wants this under 2.5 seconds. If your LCP is over 4 seconds, you’ve got a problem.

How to fix slow LCP: compress your images (I use ShortPixel for this, it’s paid about 50,000 image credits for $9.99 one time), use a CDN like Cloudflare (free tier works), and make sure your hosting server is fast. Cheap shared hosting at $3/month? That’s often the LCP bottleneck.

Interaction to Next Paint (INP). This replaced First Input Delay in March 2024. It measures how quickly your page responds when someone clicks a button, taps a link, or interacts with a form. Google wants this under 200 milliseconds. Most blogs pass this easily because blog content doesn’t have heavy interactivity. If you fail INP, it’s usually because of heavy JavaScript from ad networks, chat widgets, or poorly coded plugins.

Cumulative Layout Shift (CLS). This measures visual stability. Ever been reading an article and the text jumps down because an ad loaded above it? That’s layout shift. Google wants a CLS score under 0.1. Fix it by always specifying width and height on images, not injecting content above existing content after the page loads, and using font-display: swap for custom fonts.

You can check your Core Web Vitals in Google Search Console under the “Core Web Vitals” report. It tells you exactly which pages pass and which fail, and why. I check this monthly. If you only check one technical SEO thing regularly, make it this.

A quick note on page speed tools. Google PageSpeed Insights and GTmetrix give you lab data. That’s a simulated test. The Core Web Vitals report in Search Console gives you field data. That’s from real users. Field data is what Google actually uses for rankings. Don’t obsess over lab scores. Focus on field data.

Mobile-First Indexing

Google indexes the mobile version of your site first. This has been the case since 2019 for new sites and since March 2021 for all sites. If your blog doesn’t work well on mobile, you’re in trouble.

What this means in practice:

Your content needs to be identical on mobile and desktop. Don’t hide content on mobile with CSS display:none tricks. If Google’s crawler sees less content on your mobile page than your desktop page, you’ll rank based on the smaller mobile version.

Your text needs to be readable without zooming. Font size of 16px minimum for body text. I use 18px on my own sites. Tap targets (buttons, links) should be at least 48px by 48px so people can tap them without hitting the wrong thing.

Test your site on an actual phone. Not just Chrome DevTools’ mobile simulator. Load your blog on your phone over a 4G connection. Is it usable? Can you read comfortably? Does the navigation work? If you struggle, your readers struggle, and Google knows it.

One thing I learned the hard way: responsive design isn’t just about scaling down. Some WordPress themes technically resize for mobile but create a terrible user experience. Sidebars that push content way down. Pop-ups that cover the entire screen. Menus that need three taps to navigate. Technically responsive, practically unusable. Test with real human eyes.

XML Sitemaps and Robots.txt

These two files are how you communicate directly with search engines about your site structure.

XML sitemaps. Your sitemap is a file (usually at yoursite.com/sitemap.xml) that lists all the URLs you want Google to index. It helps Google discover your content faster, especially new pages.

If you’re on WordPress, you don’t need to create this manually. WordPress has built-in sitemaps since version 5.5. But I prefer using a plugin like Rank Math or Yoast SEO because they give you more control. You can exclude certain post types, categories, or specific pages from your sitemap.

What to include in your sitemap: blog posts, pages, and important category pages. What to exclude: tag archives (unless you’ve invested in making them valuable), author archives (if you’re a single-author blog), media attachment pages, and thin pages that don’t deserve indexing.

After setting up your sitemap, submit it in Google Search Console under Sitemaps. Google will tell you how many URLs it found and how many it indexed.

Robots.txt. This file (at yoursite.com/robots.txt) tells search engine crawlers which parts of your site they can and can’t access. Most bloggers don’t need to mess with this beyond the default WordPress settings.

But there are a few things to check. Make sure you’re not accidentally blocking important content. I’ve seen WordPress sites with “Disallow: /wp-content/” in their robots.txt, which blocks all uploaded images from being crawled. That’s bad.

The one robots.txt rule I always add: block crawling of /wp-admin/ but allow /wp-admin/admin-ajax.php (because some plugins need it). WordPress does this by default, but worth checking.

Don’t use robots.txt to hide pages from Google. If you don’t want a page indexed, use a noindex meta tag instead. Robots.txt blocks crawling, not indexing. Google can still index a page it finds through links even if robots.txt blocks the crawler.

HTTPS and Security Basics

Your site needs HTTPS. Full stop. Google confirmed it as a ranking signal back in 2014. And in 2024, Chrome displays prominent “Not Secure” warnings on HTTP sites. If your URL starts with http:// instead of https://, fix this today.

Getting HTTPS is free. Most hosting providers include free SSL certificates through Let’s Encrypt. Cloudflare also provides free SSL. Setting it up takes 15-30 minutes on most hosts.

After switching to HTTPS, check for mixed content issues. These happen when your pages load over HTTPS but some resources (images, scripts) still load over HTTP. Your browser console will show these as warnings. Fix them by updating the URLs in your database. If you’re on WordPress, the “Better Search Replace” plugin handles this. Search for “http://yourdomain.com” and replace with “https://yourdomain.com.”

Two security things that affect SEO indirectly:

Malware. If your site gets hacked and starts serving malware, Google will flag it in search results with a “This site may be harmful” warning. Your traffic will drop to zero overnight. Keep WordPress, themes, and plugins updated. Use a security plugin like Wordfence (free version is enough). And never use nulled (pirated) themes or plugins.

Spam injections. Hackers sometimes inject hidden spammy content and links into your pages. You can’t see them, but Google’s crawler can. This is one of the most common causes of sudden ranking drops on WordPress sites. Check for spam injections regularly by searching Google for: site:yourdomain.com and looking for pages or titles you don’t recognize.

Canonical URLs and Duplicate Content

Duplicate content confuses Google. If the same content exists at multiple URLs, Google doesn’t know which one to rank. So it picks one, and it might not be the one you want.

Common causes of duplicate content on WordPress:

  • www vs. non-www (yourdomain.com vs. www.yourdomain.com)
  • HTTP vs. HTTPS
  • URLs with trailing slashes vs. without
  • Pagination (page/2/, page/3/)
  • URL parameters (?utm_source=twitter, ?ref=homepage)
  • Category archives showing the same content as the actual post

Canonical URLs solve this. A canonical tag tells Google: “This is the original version of this content. Index this URL, ignore the others.”

WordPress SEO plugins handle most of this automatically. Rank Math and Yoast both set self-referencing canonicals on every page by default. But you should check that they’re working correctly. View the page source of a few posts and search for rel="canonical". The URL in that tag should be the clean, final URL you want ranking.

One mistake I see often: bloggers syndicating their content to Medium or LinkedIn without setting a canonical tag pointing back to their original post. Google might decide the Medium version is the original, and your blog post gets treated as the duplicate. If you syndicate content, always use canonical tags. Medium supports this if you import your post through their tool.

Structured Data

Structured data (also called schema markup) is code you add to your pages that helps Google understand what your content is about. It’s the reason some search results show star ratings, recipe cook times, FAQ dropdowns, and “How To” steps.

For bloggers, the most useful structured data types are:

Article schema. This tells Google your page is a blog post and provides information like author, publish date, and modified date. Most WordPress SEO plugins add this automatically.

FAQ schema. If your post has a FAQ section, adding FAQ schema can get those questions and answers displayed directly in search results. Rank Math has a built-in FAQ block that adds this schema automatically. I add FAQ schema to about 60% of my posts, and the ones with it consistently get more clicks because they take up more real estate on the results page.

HowTo schema. For step-by-step tutorials, HowTo schema tells Google the steps, time required, and materials needed. If your blog publishes tutorials, this is worth adding.

Breadcrumb schema. Shows the page’s location in your site hierarchy directly in search results (Home > Blog > Category > Post Title). Most WordPress themes and SEO plugins handle this automatically.

You can test your structured data at Google’s Rich Results Test (search.google.com/test/rich-results). Paste a URL, and it’ll tell you what structured data Google found and whether it’s valid.

Don’t add structured data types that don’t apply to your content. I’ve seen bloggers adding Product schema to blog posts or Recipe schema to non-recipe content just to try getting rich results. Google penalizes this. Only use schema types that accurately describe your content.

WordPress-Specific Technical SEO

Since most bloggers use WordPress, here are the WordPress-specific things you need to get right.

SEO plugin. Pick one: Rank Math or Yoast SEO. I use Rank Math because it does more in the free version than Yoast. But either works. Don’t install both. Configure it once, set up your XML sitemap, connect it to Google Search Console, and let it handle the basic meta tags and canonical URLs.

Caching plugin. WordPress generates pages dynamically from the database on every request. Caching stores a static version so your server doesn’t rebuild the page for every visitor. This is the single biggest speed improvement you can make.

My recommendation: FlyingPress if you want the best performance ($60/year for one site). WP Super Cache (free) if budget is tight. I’ve tested every major caching plugin across dozens of sites. FlyingPress consistently delivers the fastest load times, 0.2-0.4 seconds faster than WP Rocket in my tests. But any caching is better than no caching.

CDN (Content Delivery Network). A CDN stores copies of your static files (images, CSS, JavaScript) on servers around the world. When someone visits your site from Tokyo, they get those files from a nearby server instead of your host in Dallas. Cloudflare’s free plan includes a CDN and it takes about 20 minutes to set up. I put Cloudflare on every site I build. No exceptions.

Image handling. Images are typically the heaviest elements on a blog. Convert them to WebP format (ShortPixel does this automatically). Set dimensions on every image. Use lazy loading (WordPress enables this by default since version 5.5, but make sure it’s not disabled). And don’t upload 4000px-wide images for a content area that’s 800px wide. Resize before uploading.

Database cleanup. Over time, your WordPress database accumulates post revisions, spam comments, transients, and orphaned metadata. A bloated database slows down your queries. I use WP-Optimize (free) to clean the database quarterly. On one client site, database cleanup reduced average query time from 0.8 seconds to 0.2 seconds.

Permalink structure. Use /%postname%/ as your permalink structure. Not the date-based or numeric defaults. Clean URLs rank better and are easier for humans to read. If you’re changing permalink structure on an existing site, you need to set up 301 redirects from the old URLs. Otherwise, you’ll lose all your existing rankings.

PHP version. Make sure your host is running PHP 8.1 or higher. Each PHP version is faster than the last. Upgrading from PHP 7.4 to PHP 8.2 typically improves server response time by 15-30%. Check your PHP version in the WordPress dashboard under Tools > Site Health.

The 80/20 of Technical SEO

If this chapter feels like a lot, focus on these five things first. They’ll handle 80% of your technical SEO needs:

  1. Install a caching plugin and set up Cloudflare CDN.
  2. Check Core Web Vitals in Google Search Console. Fix any failing pages.
  3. Make sure HTTPS is working and there’s no mixed content.
  4. Install Rank Math or Yoast. Let it handle sitemaps, canonicals, and basic schema.
  5. Compress your images and set dimensions.

Everything else is optimization on top of that foundation. Get these five right and you’re ahead of most blogs out there.

Chapter Checklist

  • [ ] Core Web Vitals pass for all pages (LCP < 2.5s, INP < 200ms, CLS < 0.1)
  • [ ] Site is served over HTTPS with no mixed content warnings
  • [ ] XML sitemap is submitted in Google Search Console
  • [ ] Robots.txt isn’t blocking important content
  • [ ] Mobile experience is tested on an actual phone (not just DevTools)
  • [ ] Canonical tags are present and correct on all posts
  • [ ] Article schema is active on blog posts (via SEO plugin)
  • [ ] FAQ schema is added to posts with FAQ sections
  • [ ] Caching plugin is installed and configured
  • [ ] Cloudflare CDN (or equivalent) is active
  • [ ] Images are compressed, sized correctly, and in WebP format
  • [ ] PHP version is 8.1 or higher
  • [ ] Permalink structure is /%postname%/
  • [ ] Database is cleaned quarterly
  • [ ] WordPress, themes, and plugins are up to date

Chapter Exercise

Run a full technical SEO audit on your blog. This should take about 60-90 minutes.

  1. Check Core Web Vitals. Go to Google Search Console > Core Web Vitals. Screenshot the results. If any pages fail, note which metric is the problem (LCP, INP, or CLS) and the specific URLs.

  2. Run a PageSpeed Insights test. Test your homepage and one blog post at pagespeed.web.dev. Note your mobile scores. If mobile is under 70, prioritize the fixes it suggests, usually image compression and render-blocking resources.

  3. Verify HTTPS. Open your site in Chrome. Click the padlock icon in the address bar. If you see any warnings, you have mixed content. Open Chrome DevTools (F12) > Console to find the specific HTTP resources causing the issue.

  4. Check your sitemap. Visit yourdomain.com/sitemap.xml. Does it load? Does it include your important pages? Submit it in Google Search Console if you haven’t already.

  5. Test mobile usability. Open your blog on your phone. Read a full article. Tap 5 different links. Try using the navigation menu. Note anything that’s frustrating, too small, or broken.

  6. Verify structured data. Pick 3 blog posts and test them at search.google.com/test/rich-results. Note what schema types are detected and whether there are any errors.

  7. Check your PHP version. Go to your WordPress dashboard > Tools > Site Health > Info > Server. Note your PHP version. If it’s below 8.1, contact your host to upgrade.

Create a simple document with your findings and mark the top 3 fixes to tackle first. Prioritize by impact: speed fixes first, then mobile issues, then everything else.

Disclaimer: This site is reader-supported. If you buy through some links, I may earn a small commission at no extra cost to you. I only recommend tools I trust and would use myself. Your support helps keep gauravtiwari.org free and focused on real-world advice. Thanks. - Gaurav Tiwari