Skip to content
Searchpedia SEO field notes Callum Bennett Callum

Site ops

Drupal SEO Checklist

I used to think Drupal SEO was just installing Metatag and Pathauto, but I learned the hard way that missing canonical URLs and robots.txt rules cost me weeks of crawl waste.

Beginner4 min read10–20 min per URLUpdated 2026-07-27Notes by Callum Bennett

How I’d prioritise

  • Install and configure Pathauto to generate clean URL aliases for every content type.
  • Set up HTTPS sitewide and force redirect all HTTP variants to the canonical HTTPS version.
  • Generate an XML sitemap via the Simple XML Sitemap module and submit it in Google Search Console.
  • Review and tighten robots.txt to block low-value paths like /node/add while keeping important pages crawlable.
  • Add structured data using the Schema.org Metatag module to target rich results for articles, events, or products.

The list

Start with the basics that too many sites skip. Enable clean URLs – Drupal 8+ does this by default, but check your settings.php to confirm. Then install Pathauto and set up patterns for each content type so a blog post at /node/42 becomes /blog/how-to-optimise-drupal. Without this, you leave crawl efficiency on the table. Next, force HTTPS sitewide and configure the HSTS header. I once inherited a site that still served HTTP for half its pages; the duplicate content issue took me a day to untangle. Use the Redirect module to map HTTP to HTTPS with a 301.

Canonical URLs are non-negotiable. Drupal’s core sets them for nodes, but views and taxonomy pages often miss one. Install the Metatag module and enable canonical tags for all entity types. Then generate an XML sitemap using the Simple XML Sitemap module – it handles language variants, which is critical if you run a multilingual site with [hreflang tags](/hreflang-tags/). Submit the sitemap to Google Search Console and watch the indexed pages count.

Now review robots.txt. Drupal’s default allows everything on standard paths, but that includes /node/add and /user/register. Block those. For taxonomy term pages with thin content, consider adding a noindex directive via the Metatag module. I also set up [301 redirects](/301-redirect/) for any old URLs that survived a site migration – you only need one broken link to lose a ranking.

Structured data comes next. The Schema.org Metatag module lets you add JSON-LD markup per content type. For an article page, I add Article schema with headline, image, and datePublished. For events, add Event schema. It doesn’t improve rankings directly, but it gets you into rich results. Finally, run a quick [SEO audit](/seo-audits/) to catch missing meta descriptions, thin H1s, and slow pages. Fix the H1 hierarchy first – I always check that each page has exactly one H1 and that headings follow a logical order.

When to stop

There’s no such thing as a perfect Drupal SEO setup, and chasing every possible improvement will waste time that should go into content. I stop when the following conditions are met.

First, the crawl fundamentals are solid: clean URLs, HTTPS, canonical tags, a working sitemap, and robots.txt that doesn’t block important paths. If I still see pages in the index that shouldn’t be there, I check the canonical tags and redirects before touching any module. Second, I stop after I’ve verified structured data on three representative pages – the home page, a typical article, and a product page. I use Google’s Rich Results Test, not the Schema validator, because the validator flags warnings that don’t affect search. Third, if the site has fewer than 50 pages, I don’t spend more than a few hours on Drupal-specific tuning. Core settings plus Pathauto and Metatag are enough.

The real stop condition is diminishing returns. If the site already loads in under 2.5 seconds (on mobile) and has no duplicate content issues, I move on to [website structure](/website-structure/) and internal linking. The last thing I’d do is enable caching modules like Internal Dynamic Page Cache – that’s for the infrastructure team. My rule: if a checklist item doesn’t change how Googlebot sees a page, skip it.

What I got wrong

Honestly, for my first few Drupal sites, I installed Pathauto and Metatag and called it done. I assumed the sitemap module would exclude low-quality taxonomy terms automatically – it doesn’t. I wasted three months wondering why dozens of /taxonomy/term/X pages were indexed and competing with actual content. The fix was adding a noindex override in Metatag for all taxonomy term pages with fewer than two child nodes. I should have checked the site: query in Search Console from day one.

Another mistake: I relied too heavily on the core Redirect module for URL aliases without testing the redirect chain. Pathauto changes the alias when you update the title – suddenly old URLs 301 to a new alias, but if that new alias changes again, you get a 302 loop. I now set the ‘Update action’ in Pathauto to ‘Do nothing’ and manually add redirects when I rename content. It sounds slower, but it has saved me from hundreds of 404s in the logs.

I also used to ignore the robots.txt for multilingual setups. Drupal’s default allows paths like /{lang}/search/ and /{lang}/node/. Blocking those earlier would have saved crawl budget for the actual localised pages. And I spent too long tweaking the max_url_length setting for the sitemap – the default 2048 characters is fine. Learn from my time sink.

Next step

Quick answers

Which Drupal SEO modules are essential and which can I skip?

Essential: Pathauto, Metatag, Redirect, Simple XML Sitemap, and Schema.org Metatag. Skip: XML Sitemap (the simple one covers 90% of cases), Page Title (Metatag does it better), and any module that claims to auto-optimise meta tags – they add bloat and rarely guess intent correctly.

How do I handle duplicate content from Drupal’s multiple URL aliases?

Drupal can generate several URLs for the same node (e.g., /node/1, /alias, /alias-0). Always set a canonical tag in Metatag pointing to the preferred alias. For taxonomy pages, use the Redirect module to alias the primary URL and disable other paths via the ‘Generate automatic URL alias’ option in taxonomy terms.

Should I use the core’s built-in caching or install Redis for Drupal SEO?

For sites with fewer than 10,000 monthly visits, core caching is sufficient. Enable Internal Page Cache and Dynamic Page Cache. Redis shines when you have high traffic or a complex query-heavy site – it reduces TTFB and helps Core Web Vitals. But caching does not directly affect indexing; it improves user experience signals.

How often should I update my Drupal XML sitemap?

Regenerate the sitemap every time you publish or unpublish a node. The Simple XML Sitemap module can be set to regenerate on cron. I run cron every hour for most sites. Submit the updated sitemap to Google Search Console manually only after major structural changes like a new content type or a restructured taxonomy.

Sources

Primary documentation is linked directly. Anything commercial is marked nofollow.

  • Google Search Central — Official guidance on canonicalization, sitemaps, and structured data – used for the checklist fundamentals.
  • Drupal.org documentation — Primary source for Pathauto configuration, Metatag module settings, and Robots.txt best practices for Drupal.
  • Acquia Drupal SEO guide — Comprehensive reference for Drupal-specific SEO modules, performance tuning, and multilingual considerations.
  • Pantheon Drupal SEO tactics — Concise launch checklist covering redirects, canonical URLs, and cache strategies for Drupal sites.

Notes from Callum Bennett.