Ten modules compared, two tables and one uncomfortable finding: most Drupal SEO modules answer the same question and leave the same one open. Figures as of September 2026.
Every “best Drupal SEO modules” list looks the same. Metatag, Pathauto, sitemap, done, ten paragraphs of filler around it. That is not wrong, it is just inconsequential: you install the usual suspects, tick them off and still have no idea whether your site is landing out there.
So this comparison sorts the modules by the layer they work on rather than by popularity. That is where the difference sits.
Why the usual module lists don't help much
Almost every Drupal SEO module works on the input side. It helps you put something into the page: a title tag, a clean URL, a JSON-LD object, an entry in sitemap.xml. That is valuable infrastructure. It does not answer the question you open the site with in the morning:
Why is so little coming in, and how much of that is my own doing?
A module that helps you fill in a field cannot answer that. It only ever sees the form. It does not know whether the crawler reached the page, whether Google indexed it, what it is found for, whether it lost clicks last month, or whether any other page links to it at all.
That line is what this comparison is built on: input (what you write into the page), output (what the page delivers to the outside), measurement, checking from the inside (what is in the form) and checking from the outside (what actually happens out there).
The criteria
Five points, all verifiable:
- Layer: input, output, measurement, inside check or outside check.
- Drupal 11: is there a stable release for Drupal 10.3 and 11? A module without a current release is not a candidate, however good it was in 2019.
- Adoption: how many installs does drupal.org report? Not a quality verdict, but a decent indicator of whether anyone will help you when you end up in an issue queue.
- Maintenance: when did the last release land, and is it covered by the security policy?
- Work it takes off your hands: which task disappears once the module is installed? That question tells you more than a list of features.
The comparison table
| Module | What for | Layer | Installs | Price |
|---|---|---|---|---|
| Pathauto | URL aliases from patterns | Input | 460,080 | free |
| Metatag | Title, description, Open Graph, canonical | Input | 330,658 | free |
| Redirect | Redirects and one canonical URL | Infrastructure | 263,857 | free |
| Simple XML Sitemap | sitemap.xml, hreflang, IndexNow | Output | 136,726 | free |
| Google Tag | Embedding GA4 and GTM | Measurement | 104,885 | free |
| Easy Breadcrumb | Breadcrumbs including JSON-LD | Output | 100,184 | free |
| Schema.org Metatag | Structured data as JSON-LD | Input | 67,910 | free |
| Real-time SEO (Yoast) | Text analysis inside the edit form | Inside check | 26,827 | free |
| SEO Checklist | A task list for the team | Process | 17,986 | free |
| Traffalyzer | Crawl findings, search queries and AI visibility in the admin | Outside check | new | module free, account from €5/domain/month |
Install counts and release numbers taken from the respective drupal.org project pages, retrieved in September 2026. All modules run on Drupal 10.3 and Drupal 11.
The essentials: four modules you cannot skip
These four are not optimisation, they are basic supply. A Drupal site without them does not have an SEO problem, it has an installation problem.
Pathauto
Generates URL aliases from patterns instead of having someone type them. /blog/my-title instead of /node/123, automatically, in every language, with tokens for content type, date or taxonomy.
At 460,080 reported installs it is the most used module in this comparison, for a simple reason: without Pathauto every clean URL is made by hand, and every hand forgets one eventually. Important: Pathauto changes aliases when you rename things. Without Redirect next to it, you are producing dead links.
Metatag
The standard for everything that belongs in the <head>: title, description, canonical, noindex, Open Graph, Twitter Cards. Configurable globally, per content type and per node, with tokens and per-tag permissions.
The 330,658 installs are deserved. The sore point lies in the practice, not in the module: Metatag provides the field, you still have to fill it. A page with an empty description field is technically configured correctly and still a wasted snippet line. No module in the input column tells you which 40 pages that applies to.
Redirect
Creates redirects, keeps one canonical URL and catches what would otherwise end in nothing after a rename. 263,857 installs, version 8.x-1.13 since April 2026.
The project page is currently looking for co-maintainers. With a module this established that is no reason for concern, more an invitation if you want to give something back. Practical note: Redirect manages redirects, it does not find them. Which addresses run into the void is something you have to learn from the outside.
Simple XML Sitemap
Builds sitemap.xml from your content, with hreflang for multilingual sites, image sitemaps, custom sitemaps via plugins and IndexNow support. 136,726 installs, version 4.2.3.
The alternative is XML Sitemap (124,874 installs, version 2.0.0), the older and heavier route with its own indexing table. For new projects I pick Simple XML Sitemap: less state, fewer cron surprises.
The next tier: structured data, breadcrumbs, measurement
Schema.org Metatag
Extends Metatag with JSON-LD: Article, Product, Event, Organization, Recipe and 20 more types, plus sub-objects such as Address, Rating or Offer. 67,910 installs, version 3.0.4 from February 2026.
The maintainers' advice is the most important sentence on the project page: fill the values with tokens from your content, not by hand. Hand-maintained structured data drifts away from the visible text sooner or later, and that is what Google penalises.
Easy Breadcrumb
Turns the path into a real breadcrumb trail, including the current page title and optional JSON-LD. 100,184 installs, version 2.0.10 from August 2026.
Underrated: breadcrumbs are internal linking. On a deeply structured site they are often the only reason category pages get any links at all.
Google Tag
Embeds Google Tag Manager and GA4, with multiple containers and conditions by role, path or status code. 104,885 installs.
Strictly speaking this is measurement and not an SEO module. It belongs in every list anyway, because without measurement every optimisation is a matter of taste. If you want analytics without the cookie-banner debate, Plausible is the lean alternative.
The checkers: Real-time SEO and SEO Checklist
Real-time SEO for Drupal (Yoast)
The Drupal implementation of the Yoast analysis: you enter a focus keyword, the module scores text length, keyword distribution, subheadings, meta description and readability live. 26,827 installs, version 8.x-2.2, security-covered, requires Metatag.
An honest placement: this is an editor, not an instrument. The traffic light rates your text against rules, not against reality. It turns green when your keyword appears often enough, even when nobody searches for that keyword and three of your own pages have been ranking for it for years. As discipline for an editorial team that is worth a lot. The question “does this page bring visitors?” it never touches.
SEO Checklist
A task list with checkboxes, sorted by topic, with direct links to modules and configuration screens and a timestamp per completed item. 17,986 installs.
The project page puts it best itself: the most powerful Drupal module that does nothing. It changes no setting, it reminds you to change it. Genuinely good for agencies at project handover. Useless for the running site afterwards, because the list is the same for every website. It does not know yours.
The outside view: Traffalyzer
This is where the list normally stops. The problem only starts here. Every module so far works with what is stored in Drupal. None of them has ever requested the finished page.
The Traffalyzer module brings that outside view into the admin: the findings of a real crawl, the data from Google Search Console and a rating of your AI visibility, shown under Reports → Traffalyzer and in the sidebar of every node edit form.
More than on-page: the growth plan
One thing the table above cannot show: Traffalyzer does not only check individual pages against a rule list. From the data of the whole domain it builds a growth plan, an order you work through step by step instead of digging through 200 equally ranked messages.
At the start there is a diagnosis, not a task: what situation is this website in, and what is the bottleneck right now? A site with 300 posts and no internal linking has a different problem from a site with five landing pages nobody finds. Only then come the phases, each with its own goal, and inside them the individual steps with an impact (high, medium, low) and an effort (S, M, L).
The value lies in the order. Adding alt texts is not wrong, but if half of your pages are linked from nowhere, you are working on the third decimal while the first digit is missing. The plan tells you which digit that is.
You tick steps off inside Drupal: one click on the step, the module reports it back to Traffalyzer, the next one moves up. The SEO Checklist follows the same idea, only identically for every website. This list knows your numbers.
Search Console and analytics, evaluated together
The second difference is in the sources. Traffalyzer combines three things that normally live in three interfaces: its own crawl, Google Search Console and your analytics, meaning GA4, Plausible, Fathom or Matomo. From those it draws conclusions none of the three could produce on its own:
- Plenty of impressions, hardly any clicks. The ranking is there, the line in the search result is not convincing. What needs fixing is the title and description, not the text.
- Clicks arrive, visitors leave immediately. The reverse case: the snippet promises something the page does not deliver. No meta tag helps here; the content has to.
- Queries on positions 5 to 20. The shortest lever there is: the visibility already exists, a few places are missing. Those pages first, not the ones sitting at position 60.
- Several of your own pages on the same query. Cannibalisation: you compete with yourself and split the signals across two half pages.
- A page losing clicks that has not changed in twelve months. No crawler finds this. It is a trend somebody has to notice.
- A page that ranks but gets no internal link. The inventory from Drupal knows which pages exist; Search Console knows what they are found for. Together that turns into a concrete suggestion for which page to link from.
Every one of those conclusions becomes a step in the plan, with its reasoning attached. In plain words it does not say “description missing”, it says: this page collects impressions at position 8 and barely gets clicks, so fix the line in the search result, the ranking is fine. A checking tool tells you what deviates from a norm. A recommendation tells you what to do next and why it pays off.
What of that lands in the Drupal admin
- Findings from the last crawl, sorted by severity, with an explanation, a recommendation and an edit link for every affected page. No detour through an external interface, and no guessing which node sits behind a URL.
- The growth plan as its own tab: diagnosis, phases, steps with impact and effort, tickable right there.
- Search queries from Search Console: the strongest ones, the opportunities on positions 5 to 20, winners and losers, plus the queries each page is actually found for.
- The sidebar in the edit form: findings for this exact URL, clicks, impressions, plan steps, pages competing for the same query, and pages worth linking from. Loaded via JavaScript so nobody waits when opening the form.
- “Needs a refresh”: pages that lost at least 20% of their clicks and have not been touched in twelve months. That is the list nobody else keeps.
- Broken addresses with the pages linking to them. If Redirect is installed, a suggestion for the matching redirect comes with it, and the module will create it for you.
- llms.txt at
/llms.txt, generated from your published content. ChatGPT, Claude and Perplexity use the file to understand what the site is about. Most websites do not have one. - Inventory: Drupal reports which URLs exist, whether they are published and indexable, and when they last changed. That enables findings no crawler can make on its own: published pages nothing links to, unpublished content still publicly reachable, indexable pages blocked by robots.txt.
- Views fields, a toolbar badge, a dashboard block and Drush commands (
traffalyzer:status,traffalyzer:inventory,traffalyzer:scan,traffalyzer:metrics) for everyone who would rather build their own content overview.
What it does not do: trigger a scan on save. A crawl takes minutes and costs quota. There is a button for that.
Requirements: Drupal 10.3 or 11, PHP 8.1 or newer and an account at traffalyzer.com. The first scan runs without signing up, after that it is 7 days free and then €5 per domain per month. The module itself is GPL-licensed and free like every other one here; it sits at version 1.0.0-beta2 and, being a beta, is not covered by the drupal.org security advisory policy. The details of the plan steps and ticking them off belong to the paid plan.
Which module answers which question?
This table is what I miss in the usual lists: question against answer instead of feature against feature.
| Question | Who answers it |
|---|---|
| What do my URLs look like? | Pathauto |
What is in the <head>? |
Metatag, Schema.org Metatag |
| Does Google know all my pages? | Simple XML Sitemap submits them |
| Is my text structured properly? | Real-time SEO (Yoast) |
| What do I tick off at launch? | SEO Checklist |
| Which pages are actually missing a description? | Traffalyzer |
| What am I really found for? | Traffalyzer (Search Console in the admin) |
| Which page lost clicks? | Traffalyzer |
| Which published page is orphaned? | Traffalyzer (inventory plus crawl) |
| Which of my pages compete for the same query? | Traffalyzer |
| Which addresses are broken? | Traffalyzer finds them, Redirect fixes them |
| Can ChatGPT see my site? | Traffalyzer (llms.txt, AI crawler rules) |
| In which order do I work through it? | Traffalyzer (growth plan with diagnosis and phases) |
| What do I do next? | SEO Checklist generically, Traffalyzer prioritised for this site |
The top half of that table is well covered. The bottom half was empty until recently, inside Drupal at least. These questions were always answerable, just in three browser tabs on the side, and nobody does that daily.
My stack for a new Drupal site
Concretely, in this order:
- Pathauto + Redirect on day one. Together, never separately.
- Metatag, with token patterns per content type so even unmaintained nodes output something sensible.
- Simple XML Sitemap, with hreflang on multilingual sites.
- Schema.org Metatag as soon as articles, products or events are involved, filled with tokens.
- Easy Breadcrumb once the structure goes deeper than two levels.
- Google Tag or Plausible before the first optimisation. No baseline, no result.
- Traffalyzer as soon as content is live. From then on there is something to measure that you did not type in yourself.
- Real-time SEO only with an editorial team that needs fixed rules. On my own I would rather work with real search queries than with a traffic light.
What I leave out: anything that exists twice. Two sitemap modules, two analytics integrations, or Metatag plus a second module that also touches the <head> reliably produce contradictory markup.
What does a crawl find on your site?
You can install every module above without ever learning what is actually broken on your site. The first scan answers that before you change anything, and it shows you whether the Drupal module is worth it for you.
The first scan needs no account and takes under a minute. After that: 7 days free, then €5 per domain per month.
Rather look at the module first? drupal.org/project/traffalyzer · traffalyzer.com
Conclusion
The established Drupal SEO modules are good, free and mature. They all do the same kind of work: they help you build the site properly. That is the precondition for visibility, not visibility itself.
What comes after used to live outside Drupal: what the crawler finds, what you are found for, which page is slipping right now, whether an AI can read you at all. That gap is why I built the Traffalyzer module. How I work with this kind of data is in my write-up on SEO content strategy and on technical blogging.
Installation as usual:
composer require drupal/traffalyzer
drush en traffalyzer
Then connect it under Configuration → Web services → Traffalyzer. The module fetches the key itself, and it never appears in a URL.
Comments