Guides
WordPress SEO, step by step
Task-by-task guides for WordPress sites, from fixing Search Console indexing statuses to redirects, schema and AI crawlers. Not sure where to start? Run a free audit first.
Search Console 12
- How to add Google Search Console to WordPressVerify your WordPress site in Google Search Console with a DNS record or an HTML tag, then submit your sitemap and add your team. About 15 minutes.
- How to check if a page is indexed by GoogleCheck whether Google has indexed a page with the URL Inspection tool, read the result correctly, and know when the site: search and the Pages report help.
- "Alternate page with proper canonical tag": what it means and when to act"Alternate page with proper canonical tag" is usually a healthy status. Learn what it means, which WordPress URLs belong there, and the rare cases to fix.
- How to fix "Blocked by robots.txt" in Search ConsoleWhat "Blocked by robots.txt" means in Search Console, when blocking is intended, and how to find and remove the WordPress robots.txt rule blocking your pages.
- How to fix "Crawled - currently not indexed" in Search ConsoleWhat "Crawled - currently not indexed" means in Google Search Console, when to ignore it, and how to fix the WordPress pages that should be in the index.
- How to fix "Discovered - currently not indexed" in Search ConsoleWhat "Discovered - currently not indexed" means, why Google has not crawled the page yet, and how to fix it on WordPress with links and a clean sitemap.
- How to fix "Duplicate without user-selected canonical"What "Duplicate without user-selected canonical" means, when Google's choice is fine, and how to fix www, http and trailing-slash duplicates on WordPress.
- How to fix "Excluded by 'noindex' tag" in Search ConsoleWhat "Excluded by 'noindex' tag" means, which WordPress settings add noindex without you noticing, and how to remove it from pages that should be in Google.
- "Page with redirect" in Search Console: when to fix it and when to ignore it"Page with redirect" in Search Console is usually normal. See when it needs no action, when it points at a real problem, and how to clean it up on WordPress.
- How to fix "Soft 404" errors in WordPressWhat "Soft 404" means in Search Console, the WordPress pages that trigger it, and how to fix each one: real content, a proper 404, or a relevant redirect.
- How to request indexing in Google Search ConsoleRequest indexing for a page with Search Console's URL Inspection tool, know the daily quota and what the request does, and use sitemaps for everything else.
- How to submit a sitemap to Google in WordPressFind your WordPress sitemap URL, check it is clean, submit it in Google Search Console and read the status correctly. A five minute job you do once.
Setup 12
- How to add a favicon (site icon) to WordPressUpload a 512-pixel Site Icon in WordPress so your favicon shows in browser tabs and Google results, check the tags it prints, and fix one that won't update.
- How to add a meta description in WordPress without a pluginPrint a meta description on every WordPress page with a short functions.php snippet that uses the excerpt, with fallbacks for archives and the homepage.
- How to add Bing Webmaster Tools to a WordPress siteVerify a WordPress site in Bing Webmaster Tools by importing it from Search Console or pasting the msvalidate.01 tag, then submit the sitemap.
- How to add Open Graph tags to WordPressAdd og:title, og:description and og:image to WordPress so shared links show a proper card: with a setting, or by hand with a wp_head snippet.
- How to change the title separator in WordPressChange the dash between the page title and site name in WordPress title tags to a pipe or another character, with one setting or a one-line filter.
- How to create a custom 404 page in WordPressBuild a useful 404 page in a block theme or a classic theme, keep the real 404 status code, set its title, and see which broken URLs visitors hit.
- How to remove the site name from WordPress title tagsDrop or move the site name that WordPress appends to every title tag: edit the title template for a post type, override one page, or filter the title parts.
- SEO setup for a new WordPress site: the launch checklistSet up SEO on a new WordPress site in the right order: indexing settings, permalinks, one canonical host, titles, sitemap, Search Console and the first audit.
- How to set a default social share image in WordPressGive every WordPress page a fallback og:image so shared links never show a blank or random picture: one setting, the right size, and how to test it.
- How to set the WordPress homepage title and meta descriptionSet the title tag and meta description of a WordPress homepage, for a static front page or a latest-posts homepage, and check what Google will read.
- How to turn off "Discourage search engines" in WordPressUntick Discourage search engines under Settings, Reading, then confirm the noindex tag, robots.txt and sitemap are back to normal so Google can index the site.
- How to verify (claim) a WordPress site on PinterestClaim your WordPress site on Pinterest with the p:domain_verify meta tag: where to get the code, where to paste it, and how to confirm it is live.
Technical 44
- How to add your sitemap to robots.txt in WordPressWordPress adds a Sitemap line to its virtual robots.txt by itself. Check yours is there and correct, and add it by hand if a physical file overrides it.
- How to add breadcrumbs to WordPressAdd visible breadcrumbs to any WordPress theme with a shortcode or PHP function, pick the category each trail uses, and output matching BreadcrumbList schema.
- How to add FAQ schema to a WordPress pageAdd FAQPage JSON-LD to a WordPress page from the SEO settings or by hand, validate it, and know what it does now that Google's FAQ rich result is retired.
- How to add images to a WordPress XML sitemapThe built-in WordPress sitemap lists no images. Switch on image entries in the sitemap settings, check the image:loc tags, and fix images that are missing.
- How to add or remove trailing slashes in WordPress URLsWordPress takes the trailing slash from your permalink structure. Set it once under Settings, Permalinks, let core redirect the other form, and test.
- How to add Organization schema to a WordPress siteAdd Organization JSON-LD to WordPress with your name, logo, contact details and sameAs profiles, so search engines can connect the site to the business.
- How to add schema markup to WordPressAdd JSON-LD schema markup to WordPress site-wide and per page, check what your theme already prints, and validate it before Google reads it.
- How to bulk noindex posts in WordPressSet noindex on dozens of WordPress posts at once from the Posts screen with Bulk Edit, check the result, and hand them back to the default later.
- How to change a custom post type's URL slug in WordPressRename the URL base of a WordPress custom post type, such as /portfolio/ to /work/, refresh the rewrite rules and 301 the old single and archive URLs.
- How to change a WordPress post's URL slug without losing trafficEdit a published post's slug, see which old URLs WordPress redirects by itself and which it does not, and add a 301 for pages, terms and edge cases.
- How to change permalinks in WordPress without losing SEOChange a WordPress slug or your whole permalink structure safely: record old URLs, 301 each one in one hop, update internal links, watch Search Console.
- How to change the author base and author slug in WordPressChange /author/ in WordPress author archive URLs to another word, edit an author's slug so it is not the login name, and redirect the old addresses.
- How to change the category and tag base in WordPressReplace /category/ and /tag/ in WordPress archive URLs with your own word under Settings, Permalinks, then redirect the old addresses with one server rule.
- How to choose which category appears in a WordPress post URLWith %category% permalinks, WordPress puts the lowest-ID category in a post's URL. Pick the right one with a primary category, and redirect the old address.
- How to create a Google News sitemap in WordPressSet up a Google News sitemap in WordPress: switch it on, match the publication name, choose which posts count as news, and check the 48-hour window.
- How to create a video sitemap in WordPressCreate a WordPress video sitemap for posts with embedded or self-hosted videos: switch it on, let the scan run, and fix videos that are missing.
- How to disable pingbacks and trackbacks in WordPressTurn off WordPress pingbacks and trackbacks for new and existing posts, stop self-pings between your own posts, and remove the X-Pingback header.
- How to edit robots.txt in WordPressEdit your WordPress robots.txt without FTP, write rules that do not block CSS or your whole site, and test the live file before crawlers read it.
- How to exclude a page from the WordPress XML sitemapRemove one page or post from the WordPress XML sitemap: set it to noindex so it drops out, or exclude it by ID with a filter while it stays indexable.
- How to find every noindexed page in WordPressList every WordPress post and page that carries noindex, work out which setting or header put it there, and catch pages hidden by accident.
- How to fix 404 errors in WordPressFind the 404 errors that matter in WordPress through Search Console and a site audit, then redirect, relink or deliberately leave each one dead.
- How to fix comment-page-1 URLs in WordPressWordPress comment pagination creates /comment-page-2/ copies of a post. Turn paging off or keep it and point every copy at the post with a canonical.
- How to fix duplicate content in WordPressFind where WordPress creates duplicate URLs, from www and http variants to archives and cloned posts, and fix each with a redirect, canonical or noindex.
- How to fix mixed content warnings in WordPressFind every http:// asset on an https WordPress site, replace it in the database with WP-CLI, fix theme and widget leftovers, and confirm the console is clean.
- How to fix redirect chains in WordPressFind redirect chains in WordPress with curl, work out which rule causes each hop, and point every old URL straight at its final destination in one step.
- How to hide text from Google snippets in WordPressKeep one passage, or a whole page, out of Google's search snippets in WordPress with data-nosnippet, max-snippet or nosnippet, and check the result.
- How to move WordPress to a new domain without losing SEOMove a WordPress site to a new domain: copy the site, replace URLs safely, add path-preserving 301s, use Search Console's Change of Address tool and monitor.
- How to noindex a custom post type in WordPressKeep every entry of one custom post type out of Google: one switch on the Robots screen or a wp_robots filter, plus the archive page and the sitemap.
- How to noindex a page in WordPressKeep a WordPress page out of Google with a noindex robots meta tag, per page or for a whole post type, and avoid the robots.txt mistake that stops it working.
- How to noindex PDF files in WordPressPDFs cannot carry a robots meta tag. Keep them out of Google with an X-Robots-Tag header in Apache or nginx, then check the header with curl.
- How to noindex tag and category archives in WordPressDecide which WordPress tag and category archives deserve indexing, noindex the thin ones in one setting, and keep the archives that earn traffic.
- How to noindex WordPress search result pagesWordPress already marks its internal search results noindex. Check that your site does, decide whether to block ?s= in robots.txt, and handle spam searches.
- How to redirect a whole folder of URLs in WordPressRedirect every URL under one path in WordPress: a Starts With rule when they all go to one page, or a server pattern rule when each keeps its own slug.
- How to redirect attachment pages in WordPressStop WordPress media attachment pages from being indexed as thin content: turn them off, redirect them to the file or parent post, and clean up links.
- How to redirect HTTP to HTTPS in WordPressMove a WordPress site to HTTPS properly: switch both site URLs, add one server-level 301 from http to https, and confirm every variant lands in one hop.
- How to remove a duplicate title tag from a WordPress pageTwo title elements in one page's head come from an old theme header.php, title-tag support and plugins overlapping. Find which prints each and remove one.
- How to remove author pages from the WordPress sitemapThe core WordPress sitemap lists an author archive for every user with posts. Remove the users sitemap with one filter, or replace it with a sitemap without it.
- How to remove the category base from WordPress URLsRemove /category/ from WordPress category URLs with one switch, keep old links working with 301 redirects, and avoid clashes with pages that share a slug.
- How to return a 410 Gone status in WordPressSend 410 Gone for WordPress URLs you removed on purpose, with a short PHP snippet or an Apache or nginx rule, and know when a plain 404 is enough.
- How to set a canonical URL for a WordPress post or pageSee which canonical WordPress prints by default, point one post's canonical at another URL when it is a true duplicate, and verify the tag in the source.
- How to set up 301 redirects in WordPressCreate a 301 redirect in WordPress from the dashboard or at the server, test it with curl, and avoid the homepage and chain mistakes that waste the redirect.
- How to set up hreflang tags in WordPressAdd correct hreflang tags to a multilingual WordPress site: pick a setup, use the right language codes, make tags reciprocal, add x-default, check the output.
- How to set up WordPress maintenance mode without hurting SEOTake a WordPress site offline safely: answer with 503 and Retry-After instead of a 200 "coming soon" page, keep it short, and check the status with curl.
- How to stop WordPress redirecting 404s to guessed URLsWordPress redirects a mistyped or deleted URL to any post whose slug starts the same way. Switch the guessing off, or make it exact, with one filter.
Content 14
- How to add a description to WordPress category pagesWrite intro text for a WordPress category, make your theme display it above the posts, and set its meta description so the archive reads like a real page.
- How to add anchor links to headings in WordPressGive a WordPress heading an HTML anchor, link to it from the same page or another one, fix the sticky-header offset, and keep anchors stable over time.
- How to add nofollow, sponsored or ugc to links in WordPressMark one WordPress link as nofollow or sponsored in the editor or in HTML, apply nofollow to all external links with one switch, and check the rel value.
- How to bulk add alt text in WordPressClear a backlog of images with no alt text in WordPress: write the important ones by hand, generate the rest in bulk with AI, and review before you save.
- How to create an HTML sitemap page in WordPressBuild a visitor-facing sitemap page in WordPress with the HTML Sitemap block or shortcode, choose what it lists, link it in the footer, or build one by hand.
- How to edit SEO titles and descriptions from the WordPress Posts listChange a post's SEO title, meta description, focus keyword and indexing from Quick Edit on the Posts screen, and clear a backlog without opening each post.
- How to find and fix orphan pages in WordPressFind WordPress pages that nothing links to, decide which deserve links and which should go, and add internal links that give them context and crawl paths.
- How to fix keyword cannibalization in WordPressFind WordPress posts competing for the same query, confirm the overlap in Search Console, then merge, re-angle or re-link them so one page ranks.
- How to merge two WordPress categories without losing SEOMerge duplicate WordPress categories step by step: move the posts with Bulk Edit, delete the spare category and 301 its archive to the one you keep.
- How to prune thin content in WordPress without losing trafficFind thin WordPress posts, decide for each one whether to improve, merge, noindex or delete it, and clean up redirects and links so nothing of value is lost.
- How to refresh old WordPress posts for SEOPick old posts worth updating with Search Console data, rewrite what has gone stale, keep the URL, and change the date only when the content really changed.
- How to set an SEO title that differs from the post title in WordPressGive a WordPress post one title for the page heading and another for search results: the SEO title field, Quick Edit, or a custom field with a filter.
- How to show excerpts instead of full posts in the WordPress RSS feedSwitch the WordPress RSS feed from full text to excerpts under Settings, Reading, control what the excerpt says, and add a link back to each post.
- How to show the last updated date on WordPress postsShow a "last updated" date on WordPress posts in a block theme or a classic theme, keep dateModified in your schema honest, and avoid fake freshness.
Performance 2
- How to improve Core Web Vitals in WordPressFind which WordPress templates fail Core Web Vitals, then fix LCP, INP and CLS in order, using field data from Search Console to confirm the result.
- How to reduce TTFB in WordPressMeasure time to first byte in WordPress, then cut it with page caching, an object cache, newer PHP and fewer slow plugins, testing each change as you go.
WooCommerce 2
- How to optimize WooCommerce category pages for SEOTurn WooCommerce product categories into pages that rank: write descriptions, set titles, keep filter and sort URLs out of the index and handle pagination.
- How to optimize WooCommerce product pages for SEOOptimize WooCommerce product pages for search: title templates, original descriptions, image alt text, one clean Product schema and a sensible plan for stock.
Local 1
AI search 3
- How to add an llms.txt file to WordPressPublish an llms.txt file on WordPress without FTP: what to write in it, how to serve it at /llms.txt, how to check it, and what it can and cannot do.
- How to block AI crawlers in robots.txtBlock GPTBot, ClaudeBot, CCBot and other AI crawlers in robots.txt while staying in Google Search, and see which bots train models and which fetch for search.
- How to optimize your WordPress content for Google AI OverviewsWhat gets a page cited in Google AI Overviews, what Google says about it, and the WordPress changes that make your pages easier to pull an answer from.