Guide WordPress SEO

A SEO technique practitioner's guide to WordPress — the par défaut settings que hurt vous, how the core sitemap and canonical handling en réalité fonctionner, pourquoi vous run exactly un SEO plugin, and the duplicate-content sources WordPress creates on its propre.

Première publication : 27 juin 2026 · Dernière mise à jour : 3 août 2026 · Advanced
Langues

WordPress is SEO-capable, pas SEO-finished. It self-canonicalizes posts since version 2,9 and ships a native XML sitemap since 5,5 — but its defaults aussi leave ?p=123 permalinks, attachment pages, date/tag/author archives, feeds, and internal résultats de recherche tout indexable, and a unique Settings → Reading checkbox peut silently block the whole site. The fixes que en réalité matter: définir /%postname%/ avant publishing, run exactly un SEO plugin (Yoast, Rank Math, or AIOSEO — jamais two, the wp_head conflict produces duplicate metadata), noindex thin archives au lieu de disallowing les, and garder le sitemap to canonical indexable URLs seulement. WordPress 6,4+ disables attachment pages on nouveau installs by par défaut — redirecting straight to the fichier, pas the parent post — but existing sites garder les on and doit migrate manually. Google has jamais said WordPress ranks meilleur or worse que quelconque autre CMS — content and liens decide que, pas the platform.

TL;DR — WordPress is SEO-capable, pas SEO-finished. It self-canonicalizes singular posts since version 2,9 and ships a native XML sitemap since 5,5 — but defaults leave ?p=123 permalinks, attachment pages, date/tag/author archives, feeds, and ?s= search pages tout indexable, and the Settings → Reading checkbox peut silently block the whole site. The fixes que déplacer the needle: /%postname%/ avant publishing, exactly un SEO plugin (the wp_head conflict from two is réel), noindex thin archives plutôt que disallowing les, and a sitemap of canonical indexable URLs seulement. WordPress 6,4+ disables attachment pages by par défaut on nouveau installs — redirecting to the fichier itself, pas the parent post; existing sites garder les enabled and migrate by hand. Google has jamais said WordPress is meilleur or worse pour le SEO que quelconque autre CMS. Evidence for this claim WordPress added core XML sitemaps in 5.5 and attachment-page redirects for new sites in 6.4. Scope: Core version history; existing sites can retain prior attachment behavior. Confidence: high · Verified: WordPress 5.5 XML sitemaps WordPress 6.4 attachment pages

WordPress is SEO-capable, pas SEO-finished

The honest framing is somewhere entre the two marketing claims vous usually hear. WordPress is pas “SEO-friendly out of the box” in quelconque complet sense — but it aussi isn’t bad pour le SEO. It donne vous a strong, controllable foundation and alors leaves a pile of indexable cruft turned on by par défaut. The whole job is knowing qui defaults to modifier and qui auto-generated URLs to suppress.

And to be clair up front: Google has jamais said WordPress ranks meilleur or worse que quelconque autre CMS. As Google’s documentation puts it, “si you’re en utilisant a CMS tel as WordPress, Wix, or Blogger, it’s probable que votre CMS has déjà made a sitemap disponible to moteur de recherches” — the platform is treated comme quelconque autre. Rankings come from content and liens, pas from the logo in votre admin bar. Evidence for this claim Google says common CMS platforms often generate sitemaps and does not prescribe a CMS-specific ranking advantage. Scope: Google sitemap guidance; absence of a CMS ranking advantage is an editorial inference from platform-neutral requirements. Confidence: medium · Verified: Google: Build and submit a sitemap

The defaults que hurt — and pourquoi

The “Discourage search engines from indexing this site” checkbox (Settings → Reading) writes a site-wide noindex and a restrictive virtual robots.txt. It’s the premier chose I vérifier on quelconque WordPress audit, parce que it’s the unique setting que peut silently zero out an entier site’s indexation — usually left on from staging.

The ?p=123 par défaut permalink donne aucun topical signal and isn’t a clean URL. Switch to /%postname%/ — and do it avant publishing. On an established site, modification the permalink structure signifie URL changements; WordPress va auto-301 the old numeric URLs pour standard post types, but custom post types and pages don’t toujours redirection cleanly, so tester. I’d éviter baking the category into the permalink (/%category%/%postname%/): the day vous reorganize taxonomy vous trigger a mass URL modifier and throw away ranking history pour aucun proportional benefit.

Attachment pages are the WordPress-specific gotcha personnes forget. Every media upload historically spawned a standalone URL containing simplement the fichier and some auto-metadata — thin pages que peut cannibalize the réel ones. WordPress 6,4 modifié the par défaut so nouveau installs disable attachment pages entirely — une requête to un now redirections straight to the fichier itself, pas the parent post. Existing (upgraded) sites garder attachment pages enabled; there’s aucun Settings-screen toggle pour ce, seulement wp option set wp_attachment_pages_enabled 0 via WP-CLI or editing the option directement on wp-admin/options.php. En pratique la plupart site owners jamais touch que option and à la place handle it the plugin façon: noindex the attachment page, or meilleur, redirection it to the parent post via votre SEO plugin. Don’t assume an older site inherited the WordPress 6,4 par défaut; it didn’t.

Archives, feeds, and search pages. By par défaut WordPress generates indexable category archives, tag archives, date archives, author archives, paginated archive pages (?page=2), feed URLs (/feed/), attachment pages, and internal search result pages (/page=search, i.e. ?s=). That’s the canonical liste of WordPress duplicate-content sources, and almost none of it was a decision vous made.

Contenu dupliqué WordPress creates on its propre

Worth stating plainly parce que it surprises personnes: WordPress manufactures structural contenu dupliqué by par défaut. The recurring sources:

SourceExempleTypical fix
Category archives/category/news/Garder, or noindex si thin
Tag archives/tag/wordpress/Usually noindex (thin, overlapping)
Author archives/author/admin/Noindex on single-author sites
Date archives/2023/04/Noindex (almost toujours thin)
Pagination/page/2/Self-referential canonical (pas page 1)
Feed URLs/feed/Noindex feeds
Attachment pages/photo-of-cat/Redirection to parent via SEO plugin (WP 6,4+ redirections nouveau installs to the fichier itself à la place)
Résultats de recherche/?s=keywordNoindex

The fix is almost jamais to panic à propos de a penalty — Google consolidates duplicates to a canonical plutôt que penalizing structural duplication. The fix is to noindex the thin stuff and garder le sitemap clean. And a critical distinction: noindex ≠ no-crawl. A noindexed page doit stay crawlable so Google peut en réalité lire the noindex. Si vous disallow it in robots.txt à la place, Google can’t voir the directive — qui is pourquoi vous noindex thin archives plutôt que blocking les.

The XML sitemap: core vs. plugin

WordPress 5,5 (August 2020) ajouté a native XML sitemap at /wp-sitemap.xml. It’s réel, but barebones. It dumps in tout public post types, tout public taxonomies, and author archives — meaning it happily listes exactly the thin pages vous vouloir out of the index. It has aucun image-sitemap prise en charge and limited contrôler. So En pratique la plupart sites utiliser le sitemap from Yoast or Rank Math à la place, qui lets vous inclure/exclude spécifique post types and taxonomies and garder the fichier to canonical, indexable URLs. Yoast disables the core sitemap and replaces it; that’s attendu.

Two choses le sitemap won’t do pour vous: Google ignores <priority> and <changefreq> entirely (per Google’s propre docs), and WordPress ne fait pas submit the sitemap to Google pour vous — vous submit it in Search Console and Bing Webmaster Outils, and vous pouvez liste it via a Sitemap: directive in robots.txt pour passive discovery. The 50 000-URL / 50MB limite from the spec encore s’applique; split into a sitemap index past que.

Canonical handling: core, plugin, and the conflict trap

Core has output rel=canonical via rel_canonical() since WordPress 2,9 (2009) — singular posts and pages self-canonicalize. WordPress 4,6 didn’t ajouter the tag; it refactored the function to utiliser the filterable wp_get_canonical_url(), qui is ce que personnes usually mean quand ils dire “canonical since 4.6.” That’s a bon baseline, but core doesn’t handle custom post types consistently à travers themes, doesn’t ajouter canonicals on 404s, and doesn’t resolve URL-variation duplicates (?utm_source=, www vs. non-www, trailing slashes) on its propre. SEO plugins replace the core output with plus comprehensive handling: custom post type canonicals, self-referential pagination canonicals (pas pointing page 2+ at page 1 — a mistake que deindexes votre deepar pages), cross-domain canonical pour syndication, and per-page overrides.

Here’s the trap que ties the whole plugin question ensemble: the balise canonical définir by votre SEO plugin is the authoritative signal — but si votre theme aussi injects a title tag or its propre SEO meta, vous obtenir a conflict. Some theme frameworks (Genesis, Thesis) emit leur propre SEO tags. Quand vous activate an SEO plugin, disable the theme-level SEO, and inspect the rendered <head> to confirmer exactly un canonical, un title, un meta description.

Un SEO plugin. Jamais two.

Ce deserves its propre heading parce que it’s the la plupart courant self-inflicted WordPress SEO wound. Jamais run two SEO plugins simultaneously. Yoast, Rank Math, and AIOSEO tout hook into wp_head() to écrire the title, meta description, canonical, Ouvrir Graph/Twitter tags, robots meta, and JSON-LD. Run two and ils les deux fire — duplicate meta descriptions, duplicate (and contradictory) balise canonicals, conflicting Ouvrir Graph, and conflicting sitemaps. Search Console va flag the duplicate metadata. Pick un and entièrement uninstall the autre (deactivating leaves database entries behind).

As pour qui un — ils tout cover the core tasks; the choice is use-case and budget:

  • Yoast SEO — the largest install base, the familiar traffic-light scoring, great pour beginners and content teams que vouloir a guided workflow. (WooCommerce schema is a paid add-on.)
  • Rank Math — the la plupart generous free tier: unlimited focus keywords, redirection manager, 404 monitoring, GSC + GA4 integration, and a strong schema builder (16+ types free). My pick pour developers and power utilisateurs.
  • Tout in Un SEO (AIOSEO) — strong WooCommerce integration, internal-link assistant, bon local SEO. Suits agencies and grand stores.

Un caution on Yoast’s green lights: a plus élevé Yoast score doesn’t mean meilleur rankings. It’s a heuristic pour basic on-page formatting — keyword presence, title length, readability proxies. A red-light post routinely outranks an all-green un. Content quality, intent match, authority, and liens matter far plus.

Schema: ce que WordPress fait and doesn’t output

Core WordPress outputs essentially nothing utile pour résultats enrichis — clean HTML Google peut parse, but aucun JSON-LD. As Google notes, “si vous utiliser a CMS, tel as Wix, WordPress, or Shopify, vous pourrait pas be able to edit votre HTML directement… vous may be able to install a plugin que permet vous to specify données structurées.” That’s the chemin:

  • Yoast auto-adds Organization/Person, WebSite (with SearchAction), WebPage, BreadcrumbList, and Article schema in JSON-LD.
  • Rank Math adds ceux plus 16+ schema types in the free tier (FAQ, HowTo, Product, Examiner, Event…) and a builder pour custom types.
  • WooCommerce alone outputs basic Ouvrir Graph product metadata but aucun Product JSON-LD — vous besoin Yoast WooCommerce SEO (paid) or Rank Math Pro pour complet Product schema with price, availability, and examiner aggregate.

WooCommerce, briefly

WooCommerce stacks plus SEO surface on top of standard WordPress. The recurring problèmes: the /product/ and /product-category/ URL bases (removable, with redirections on existing sites), product variations creating near-duplicates, and — the big un — faceted navigation generating thousands of thin filter-combination URLs. Handle facets the même façon you’d handle les anywhere: ideally JS-based filtering with aucun URL modifier, sinon rel=canonical to the base category and/or noindex, follow on filter pages (with exploration allowed so the directive is seen). Shop and category pagination veut self-referential canonicals, and Google deprecated rel=prev/next back in 2019 — harmless si présent, but don’t rely on it. Faceted nav has its propre deep treatment in the Ecommerce SEO pillar.

robots.txt and Core Web Vitals — two rapide notes

WordPress sert a virtual robots.txt (it’s pas a fichier on disk) defaulting to disallowing /wp-admin/ pendant que allowing admin-ajax.php. Drop a physical fichier at the root and it overrides the virtual un entirely; SEO plugins let vous edit the virtual version from the dashboard. The classic mistake is disallowing /wp-content/, qui blocks CSS/JS/images and breaks rendering — don’t.

On performances: the “WordPress is slow” complaint is a configuration problem, pas a core problem. LCP problèmes trace mostly to TTFB (cheap shared hosting, aucun opcode cache) and unoptimized hero images; INP problèmes to JavaScript bloat from page builders (Elementor, Divi); CLS to images sans dimensions and web fonts sans font-display: swap. Lightweight themes (GeneratePress, Kadence, Astra) plus a mise en cache plugin, a CDN, and modern image formats obtenir a well-built WordPress site via Core Web Vitals comfortably. The detail lives in the Web Performances cluster.

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.