
What it does: extends Metatag to emit Schema.org structured data as JSON-LD, using the same token-pattern system — Article, Organization, BreadcrumbList, Event, Product, FAQ, and the rest.
Verdict: new builds get Simple XML Sitemap, no debate. Existing sites on XML Sitemap that are monolingual and stable can stay — a working sitemap is not a problem demanding a project. But if you’re touching the site for a migration anyway, switch during the migration; it’s an hour of work inside a project already full of hours.
Simple XML Sitemap is the modern answer, and for any Drupal 9/10/11 build it’s the one I install without deliberation. The case:
1. Pathauto — the module that decides what your URLs say
Every WordPress-to-Drupal migrant asks for Yoast, and Drupal’s answer is the Real-time SEO module (built around the Yoast library). It gives editors the familiar traffic-light content analysis: keyword presence, description length, readability hints.
Why it matters: structured data is how you get rich results (stars, FAQs, breadcrumbs, event cards) and how you make your entities machine-readable — which increasingly means AI-search-readable. Because it rides on Metatag’s pattern system, you configure Article markup once per bundle and every post on the site emits correct JSON-LD forever.
The coordination detail most sites miss: hreflang must be reciprocal — if the English page references the Arabic version, the Arabic page must reference back — and it should agree with the hreflang data in your sitemap (see the Simple XML Sitemap entry). Contradictory signals get ignored wholesale, which means one misconfigured language silently disables the annotations for all of them. After setup, verify with Search Console’s international targeting report rather than trusting the markup by eye.
- Design patterns before content exists. For a typical corporate site:
[node:title]for pages under a section path,blog/[node:title]for posts,[term:vocabulary]/[term:name]for taxonomy. Keep them shallow — every directory level in a URL is a promise about site structure that you’ll have to keep. - Set “Update action” to “Create a new alias, leave existing alias functioning.” This is the setting most people get wrong. The default behavior on some builds deletes the old alias when a title changes — which silently 404s every external link to that page. Combined with the Redirect module (next entry), the correct setting turns every title edit into an automatic 301 instead of a dead link.
- Punctuation settings: reduce everything to hyphens; strip apostrophes rather than converting them.
/whats-newbeats/what-s-new. - Resist the bulk-generate button on a live site until you’ve verified the patterns and confirmed Redirect is configured. Bulk regeneration without redirects is the single fastest way I’ve seen a site destroy its own rankings — thousands of URLs changed in one cron run, zero redirects created.
The coordination detail most sites miss: hreflang must be reciprocal — if the English page references the Arabic version, the Arabic page must reference back — and it should agree with the hreflang data in your sitemap (see the Simple XML Sitemap entry). Contradictory signals get ignored wholesale, which means one misconfigured language silently disables the annotations for all of them. After setup, verify with Search Console’s international targeting report rather than trusting the markup by eye.
- Enable automatic redirect creation on alias change (works hand-in-glove with the Pathauto setting above).
- Turn on the 404 log submodule for the first 90 days after any launch or restructure. It shows you the dead URLs real visitors and crawlers are actually hitting — which is a prioritized to-do list, not a guess.
- Flatten redirect chains quarterly. A→B→C chains leak equity and crawl budget at every hop; the module’s list view sorted by source lets you spot them. After a couple of restructures, chains three and four hops deep are common, and each hop is measurable loss.
- Watch for redirect loops after bulk imports — the module warns you, but only if someone reads the status report. Put it in your launch checklist.
The coordination detail most sites miss: hreflang must be reciprocal — if the English page references the Arabic version, the Arabic page must reference back — and it should agree with the hreflang data in your sitemap (see the Simple XML Sitemap entry). Contradictory signals get ignored wholesale, which means one misconfigured language silently disables the annotations for all of them. After setup, verify with Search Console’s international targeting report rather than trusting the markup by eye.
- Understand the inheritance chain: Global defaults → per-entity-type defaults → per-bundle defaults → per-node overrides. Configure the bundle level properly and you’ll almost never need node-level overrides — which matters, because node-level overrides rot. Editors leave, and their hand-written 2023 meta descriptions outlive the content they described.
- Title pattern:
[node:title] | [site:name]is the sane default. Resist stuffing keywords into the suffix — Google rewrites spammy titles anyway, and a rewritten title means you’ve lost control of your own SERP presentation. - Canonical URLs: confirm the canonical points at the alias, not the
/node/IDpath, and that it’s absolute. This closes Drupal’s classic duplicate-content hole where the same content answers at two addresses. - Enable the Open Graph and Twitter Cards submodules and set a real default share image. Social crawlers don’t guess politely.
- Set robots noindex patterns for the junk bundles every site accumulates: internal search results, user profiles, taxonomy pages you don’t intend to rank, webform confirmation pages.
For a fresh Drupal 10/11 site, the sequence that avoids rework: Pathauto first (URL patterns before any real content exists), Redirect second (so alias changes are safe from day one), Metatag + Schema.org Metatag third (bundle-level patterns while bundles are still being modeled), Simple XML Sitemap fourth (inclusion settings as bundles land), then the remainder in any order before launch. Total configuration time for the full stack, done carefully: about a day. Rankings-relevant coverage achieved: nearly everything a technical SEO audit checks.
4. The sitemap showdown: Simple XML Sitemap vs XML Sitemap
Why it’s here: breadcrumbs show up in Google’s result snippets replacing the raw URL, they distribute internal links to your section pages from every leaf page, and users on deep pages orient with them. Three benefits, one module, fifteen minutes.
The mistake everyone makes: treating Pathauto as install-and-forget. The module ships working; the patterns ship generic. /node-title-here flat URLs for every content type on the site is a missed opportunity to encode topical structure that both crawlers and humans use.
Configuration notes: exclude the home segment or don’t — but be consistent with your BreadcrumbList schema; strip title casing rules that fight your content titles; and make sure the trail’s intermediate pages actually exist as real, indexable pages. A breadcrumb pointing at a 403 section page is an internal-linking bug wearing a UX costume.
- Multilingual correctness: hreflang annotations inside the sitemap itself, which is the implementation Google actually recommends and the thing the older module never did natively. For any site with two or more languages this alone decides the contest.
- Cleaner generation model: batch-friendly, cron-driven regeneration that behaves on six-figure-URL sites.
- Sensible per-bundle inclusion settings — indexed content types in, utility bundles out, with per-entity overrides when needed.
- Image sitemap support — underrated for any site where image search is a real acquisition channel.
What it does: generates breadcrumb trails from the URL path structure (which, thanks to Pathauto, now encodes your hierarchy) instead of Drupal core’s menu-based breadcrumbs, which fail silently the moment content isn’t in a menu.
Why it’s #2: link equity is earned slowly and lost instantly. Every changed URL without a redirect donates its accumulated authority to your competitors. On migration projects this module is the difference between keeping and losing years of SEO work; I’ve written elsewhere about migrating 50,000-page sites without ranking losses, and the honest summary is that half of that work is redirect discipline.
5. Schema.org Metatag — structured data without hand-rolled JSON
A list of what to use implies a list of what to refuse, so, briefly — I don’t install: keyword-density analyzers (measuring a signal Google retired over a decade ago), auto-internal-linking modules (they produce exactly the unnatural anchor patterns that get sites hurt, and they turn every content edit into a game of link roulette), and anything promising “one-click SEO” (the click exists; the SEO doesn’t). Every module on a site is attack surface, update burden, and cognitive load — the refusal list is as load-bearing as the install list.
What it does: moves robots.txt from a file in the repo to a configurable setting in the database, editable per environment.
Why that’s not a triviality: two reasons. First, the classic disaster — a staging site’s Disallow: / robots.txt deployed to production, or the reverse: staging left open and outranking production for brand queries. I find an indexed staging environment on roughly one audit in five; it’s the most common serious problem on otherwise well-built sites. Environment-specific robots content managed in config kills this class of failure.
For an existing site, invert it: start with the Redirect module’s 404 log and a crawl to find what’s already broken, fix the bleeding, then work up the list. Retrofitting patterns onto live content is redirect-intensive work — which is why the honest cost of “we’ll do SEO after launch” is always a multiple of doing it during the build.
6. Easy Breadcrumb — navigation that doubles as a ranking signal
Configuration notes for either: submit the sitemap URL in Search Console and Bing Webmaster Tools (Bing feeds DuckDuckGo and, these days, AI search tools — it’s not optional anymore); exclude noindexed bundles from the sitemap so your sitemap and robots signals never contradict each other. A sitemap that lists noindexed URLs is telling Google two opposite things about the same page, and Search Console will nag you about it indefinitely.
Why it earns a slot: even with perfect Redirect discipline, external links rot in ways you can’t fully map — typos in newsletters, truncated URLs in PDFs, links to pages that never existed. Every such visit is someone who wanted your content. The difference between a dead end and a soft landing is one module and zero ongoing maintenance. It also quietly reduces the “visitor bounces back to Google within two seconds” signal that bare 404s generate.
How I configure it:
7. Search 404 — turning dead ends into second chances
What it does: replaces the bare 404 page with a search of the site using terms extracted from the failed URL — someone hitting /drupal-migration-guide-old gets search results for “drupal migration guide” instead of a shrug.
This is the one genuine either/or decision in the stack, and the community went through a real transition here, so it deserves the versus treatment.
The mistake everyone makes: configuring Global defaults, skipping bundle-level configuration, and shipping a site where every content type shares one generic description pattern. The whole point of the module is that an event, a product, and a blog post deserve different metadata logic.
8. RobotsTxt — environment-aware crawl control
Two ground rules for the list. First: everything here is Drupal 10/11 compatible and actively maintained — no zombie modules. Second: I’ve ranked by impact per hour of configuration, not popularity. The first three entries fix more SEO problems than the other seven combined.
What it does: emits hreflang alternate-language annotations for translated content, telling search engines which language version to show which audience.
I run SEO and Drupal engineering as one practice, which means I both configure these modules and then live with the search results they produce. This is the stack I install on every build, in the order I install it, with the settings that matter and the mistakes I keep finding in other people’s sites. It’s long because the details are the whole point.
9. Hreflang — multilingual sites that don’t cannibalize themselves
How I configure it: Organization markup on the front page (name, logo, sameAs links to your real profiles); Article on posts with author, dates, and image; BreadcrumbList paired with the visible breadcrumb (next entry). Then validate with Google’s Rich Results Test — not because the module gets it wrong, but because your tokens might: an empty image field or a missing author reference produces structurally valid, semantically hollow markup, and no module can know that.
What it does: generates human-readable URL aliases from patterns you define per content type, instead of Drupal’s default /node/4127.
When to hand-code instead: genuinely custom schema needs — complex nested types, multi-entity graphs — are sometimes cleaner as a small preprocess function emitting JSON-LD directly. The module covers the standard 90%. Don’t contort its UI for the exotic 10%; write the ten lines of PHP.
10. Real-time SEO (the Yoast question) — verdict: useful, optional, oversold
How I configure it:
XML Sitemap is the veteran — it powered Drupal 6 and 7 sites for a decade, and if you’re maintaining an older site you’re probably running it. It works, but it carries its era with it: a heavier architecture, historical performance complaints on large sites, and a data model from before multilingual was a core concern.
This stack is exactly what we configure on every project at Gspikes — and if you’re staring at an existing site wondering which of these ten are misconfigured, that’s precisely what a technical audit is for. The longer version of this thinking, covering architecture and Core Web Vitals beyond the module layer, is in our complete Drupal SEO guide.
The modules I deliberately don’t install
What it does: manages 301/302 redirects with a UI, and — critically — creates them automatically when URL aliases change.
Install order on a new build
Who needs it: any site running core Content Translation with real translated content. Without correct hreflang, Google guesses — and its favorite wrong guess is showing your English page to Spanish searchers who then bounce, or treating your en-US and en-GB pages as competing duplicates.
Second — faceted navigation crawl traps. Any site with filterable listings (commerce, publications, courses) generates parameter-combination URLs exponentially: color × size × sort × page is tens of thousands of near-duplicate URLs. Googlebot will crawl them, exhaust your crawl budget on garbage, and take days longer to find your actual new content. Pattern-based disallows for facet parameters, maintained in this module alongside your noindex strategy, are the fix — and on large sites the effect is visible in the crawl-stats graphs within weeks.
My honest verdict after years of both installing and uninstalling it: it’s an editorial training tool, not an SEO tool. The green light measures conformance to a checklist, not the probability of ranking — I’ve watched thoroughly green-lit pages rank nowhere because the checklist can’t see search intent, competition, or whether anyone wanted the content at all. Meanwhile everything that structurally matters is already handled by entries 1–9 with zero editor effort per page.






