Why Search Console says 'duplicate without user-selected canonical', a diagnosis tree for the four usual causes, and the fix for each one, with real redirects.
Screaming Frog alternatives compared by job: desktop vs cloud, JavaScript rendering, logs, API and MCP access, and cost per crawl, plus a tested Python crawler.
Course schema in 2026: the course list rich result Google still shows, the course info result it retired, and how to generate the markup from your CMS.
Webflow SEO for practitioners: the settings Webflow handles, where it stops (schema, hreflang, logs, redirects, CMS canonicals) and the workaround for each.
What a canonical tag is, the exact syntax, self-referencing and cross-domain use, hreflang, HTTP headers, setup in Next.js, Astro and WordPress, and 9 mistakes.
The best technical SEO audit tools in 2026, grouped by job: crawlers, log analysers, rendering, schema, Core Web Vitals and index checks, with two stacks.
A soft 404 is a page that returns 200 but reads as missing or empty. How Google detects it, why SPAs create them, and how to fix each cause in Search Console.
Schema markup examples for 12 common types, each a copy-paste JSON-LD block with a note on what Google still shows for it after the 2023 to 2026 removals.
Review schema from Google's current docs: which item types still earn stars, the self-serving rule, widgets, Review vs AggregateRating, and validated JSON-LD.
The X-Robots-Tag header explained for developers: exact config for Apache, Nginx, Netlify, Vercel, Next.js, Workers and Express, and how to verify it with curl.
Author schema from Google's docs: the author property, Person vs Organization, one Person @id reused across posts, ProfilePage, and Astro, Next.js and WP code.
WebSite schema now does one job in Google: it states your preferred site name. The required properties, alternateName, the home page rule and valid JSON-LD.
An SEO roadmap ordered by dependency, not by tactic: measurement first, then crawl and index, then content and GEO. With a copy-paste 12-month template.
Custom edtech software lives or dies on the spec: LTI 1.3, WCAG 2.2 under the European Accessibility Act, multilingual architecture and findable course pages.
Build an MCP server for your marketing stack in Python: expose a Search Console export, a URL checker, a sitemap resource and a review prompt, then test it.
An engineering guide to AI crawler log analysis: verify GPTBot, ClaudeBot and PerplexityBot against published IP lists, then compute the per-bot metrics.
An orphan page has no internal links pointing at it. Googlebot could sometimes still reach it. AI crawlers, at a fraction of Google's volume, usually cannot.
I crawled 10,426 posts across 15 SaaS blogs and mapped every in-content link. 3,979 posts had no in-content link pointing at them. Method and full data.
Google's supported property list for Article schema has seven entries. Publisher is not one. What to emit, what to delete, and the author rules in the docs.
Google ranks redirect types by how reliably it can read them. What each one signals, what a chain really costs, and how to stop redirect rules rotting silently.
Google says most sites should ignore crawl budget. How to tell whether you are one of them, what capacity and demand really are, and what moves the number.
Google's own definition says it rescheduled the crawl because fetching would overload your site. Why that is usually only half true, and what actually fixes it.
Vue builds client-side apps by default, and vue-router says hash mode has a bad impact on SEO. How to choose a rendering mode per route and prove it worked.
Most SPA SEO advice starts with a framework migration. Here are the routes that need no rewrite: prerendering, edge rendering, and selective server rendering.
Angular defaults to client-side rendering, which its own docs call poor for SEO. How to move routes to SSR or prerendering, and fix metadata that lands late.
Organization schema markup done from Google's own docs — why nothing is required, which subtype to use, the logo rules, and the identifiers that disambiguate.
International SEO strategy from Google's own docs — the URL-structure decision, the ccTLDs Google treats as generic, and four signals it ignores entirely.
robots.txt for SEO, written for developers: copy-paste files for WordPress, Next.js, Astro and SaaS, a tested Disallow reference, the Sitemap line and AI bots.
Pagination SEO for engineers: why paginated content needs real crawlable URLs, how infinite scroll hides content from bots, and the hybrid pattern I ship.
Google retired FAQ rich results in May 2026. FAQPage markup no longer earns SERP stars, but it stays extractable for AI answer engines. Here's how to decide.
Rich snippets don't raise rankings directly — they raise click-through. Google's own case-study data shows CTR gains up to 82%, and what really drives them.
Canonical vs noindex: canonical consolidates duplicate URLs, noindex removes a page from Google. A decision table by situation, and what combining them does.
A developer's guide to Core Web Vitals: the three metrics and current thresholds, field data vs lab data, and the exact code-level fixes for LCP, INP, and CLS.
JavaScript SEO for engineers — how Google renders JS, the failure modes that hide your content from crawlers, and how to make it crawlable and citable.
Keyword clustering done right groups keywords by shared Google results, not similar words — the SERP-overlap method, step by step, for SEO and AI search.
Learn how to automate SEO tasks with Claude AI. Includes working Python scripts for meta tag generation, JSON-LD schema creation, and Claude Code CLI workflows.
How programmatic SEO works, real examples from Zapier, Wise, and Nomadlist, when it crosses into spam, and a step-by-step no-code process to get started.
A complete technical SEO audit methodology — crawl, index, schema, Core Web Vitals, AI crawler access, and the cadence that holds up across engagements.
I use a small set of cookies to understand how the site is used and to improve it.
See the privacy policy for the full list and what each one does.
Cookie preferences
Choose which categories you allow. Essential cookies are always on because the site won't work without them.
You can change this any time from the "Cookie preferences" link in the footer.
EssentialAlways on
Required for the site to function — navigation, form submission, security.
Analytics
Anonymous usage data via Google Analytics 4 — pages viewed, time on site, traffic source. Used to improve the site.
Marketing
Cookies that enable ad measurement and remarketing. Off by default; only relevant if Google Ads or similar campaigns are running.
Personalisation
Used to remember preferences like language or display mode across visits.