That breadcrumb trail above your post title? WordPress core did not put it there.
Something else did. A theme, an SEO plugin, WooCommerce, or a block sitting in your Single template.
Figuring out how to remove breadcrumbs in WordPress starts with identifying which one, because each source needs a different fix.
This guide covers all of them:
- Toggles in Yoast SEO, Rank Math, Astra, and Kadence
removeactioncode for Genesis and WooCommerce- Block deletion in the Site Editor
- CSS hiding, and why it leaves your BreadcrumbList schema untouched
You will also learn how to verify the removal actually worked after a cache purge, and what your site gives up when the trail disappears.
What Are Breadcrumbs in WordPress
Breadcrumbs in WordPress are a secondary navigation trail that shows a page’s position inside the site hierarchy, usually rendered as Home > Category > Post Title. Every breadcrumb trail has two layers: the visible links and the BreadcrumbList schema attached underneath them.
Those two layers get removed separately. Killing the visual trail with CSS leaves the structured data intact, and Google keeps reading it.
The 3 breadcrumb types you will run into:
- Hierarchy-based: reflects parent and child relationships (Home > Shoes > Running Shoes)
- Attribute-based: built from taxonomy terms, common on filtered WooCommerce archives
- History-based: mirrors the visitor’s click path, rare on WordPress and mostly a page builder feature
The wider concept of how breadcrumb trails work across the web predates WordPress by about a decade. Their adoption is not marginal.
HTTP Archive’s 2024 Web Almanac counted 4.8 million WebPage to BreadcrumbList relationships across 16.9 million sites analyzed.
Schema.org and Google’s joint 2026 usage data placed BreadcrumbList in the group of 12 schema types deployed on 10 million or more domains, largely because CMS platforms and SEO plugins generate it automatically rather than publishers hand-coding it.
Default WordPress core ships zero breadcrumb functions. No thebreadcrumbs() exists in core. Something else on your install is generating that trail, which is why removal starts with identification.
What Generates Breadcrumbs on a WordPress Site
5 sources generate breadcrumbs on a WordPress site: SEO plugins, theme templates, page builder modules, WooCommerce, and block theme template parts. Each source uses a different removal method, and two sources running at once produce a duplicate breadcrumb trail on the same page.
| Source | Output type | Typical hook or location |
|---|---|---|
| SEO plugin | PHP function or shortcode | Theme template call or plugin setting |
| Classic theme | PHP hooked function | astra_primary_content_top, generate_before_content |
| WooCommerce | PHP hooked function | woocommerce_before_main_content |
| Block theme | HTML block markup | Single or Product template in the Site Editor |
| Page builder | Widget or module | Theme Builder single template |
Genesis Framework hooks its trail through genesisbeforeloop and runs on 102,590 US sites according to BuiltWith’s theme distribution data.
Check sources in this order: SEO plugin first (highest install base), then the theme’s theme options screen, then WooCommerce, then the builder template.
Duplicate trails happen constantly on stores. WooCommerce outputs one breadcrumb, Yoast outputs a second, and the store owner sees two stacked trails with slightly different separators.
How to Identify Which Source Outputs the Breadcrumbs
Identify the breadcrumb source by right-clicking the trail and selecting Inspect, then reading the wrapper class on the container element. Each plugin and theme stamps its own class name, which maps directly to the software generating the markup.
| Wrapper class | Source |
|---|---|
.yoast-breadcrumbs, #breadcrumbs | Yoast SEO |
.rank-math-breadcrumb | Rank Math |
.aioseo-breadcrumbs | All in One SEO |
.woocommerce-breadcrumb | WooCommerce |
.ast-breadcrumbs | Astra |
.breadcrumbs, .inside-breadcrumbs | GeneratePress |
Class name inconclusive? Run the deactivation test on a staging copy, never live.
Deactivate the SEO plugin, reload, check. Still there? Switch to Twenty Twenty-Four, reload, check again. The step where the trail disappears names your culprit.
One catch worth knowing: Chrome DevTools shows the rendered DOM, not the raw source. Use Ctrl+U to view page source when you need to confirm what PHP actually printed versus what JavaScript injected afterward.
Run the URL through Google’s Rich Results Test as well. Invisible BreadcrumbList markup shows up there even when no trail renders on screen, which happens on sites where someone already applied a CSS fix.
How to Remove Breadcrumbs Added by an SEO Plugin
SEO plugins generate breadcrumbs on the majority of WordPress sites, and all 4 major plugins include a single toggle that disables the feature. Yoast SEO alone runs on more than 13 million active installations, making it the first place to check.
| Plugin | Setting path | Active installs* |
|---|---|---|
| Yoast SEO | Yoast SEO → Settings → Advanced → Breadcrumbs | 13M+ (Peligent, 2026) |
| Rank Math | Rank Math → General Settings → Breadcrumbs | 2M+ (PluginTheme, 2026) |
| All in One SEO | AIOSEO → General Settings → Breadcrumbs | 3M+ (AIOSEO) |
| SEOPress | SEOPress → Breadcrumbs | 300,000+ (WPMarmite) |
Removing Yoast SEO Breadcrumbs
Toggle path: Yoast SEO > Settings > Advanced > Breadcrumbs, then switch Enable breadcrumbs to Off.
Toggling off stops Yoast from generating anything. It does not remove the yoastbreadcrumb() call your theme developer hardcoded into single.php or header.php, and that leftover call frequently prints an empty div with padding still applied.
Force the output off at the filter level instead:
addfilter( 'wpseobreadcrumboutput', 'returnfalse' );
Yoast, now owned by Newfold Digital, powers roughly 22 million sites according to wpcoupons data, so this is the single highest-probability source on any given install.
Removing Rank Math Breadcrumbs
Rank Math > General Settings > Breadcrumbs, uncheck Enable Breadcrumbs Function, save.
Rank Math also injects a [rankmathbreadcrumb] shortcode option that some theme authors paste directly into template files or a widget area. Disabling the module leaves that shortcode rendering as literal text on the page.
- Search your theme for
rankmaththebreadcrumbs - Check Widgets and any Custom HTML block for the shortcode string
Filter-level kill switch: addfilter( 'rankmath/frontend/breadcrumb/html', 'returnemptystring' );
Removing All in One SEO Breadcrumbs
AIOSEO ships breadcrumbs enabled by default on fresh installs, unlike Yoast.
Go to All in One SEO > General Settings > Breadcrumbs and disable the Breadcrumbs toggle. The Display Breadcrumbs switch controls the front-end trail, while a separate schema control governs the markup Google reads.
Both need switching off if you want the element gone from search results as well as from the page.
Removing SEOPress Breadcrumbs
SEOPress keeps breadcrumbs in its own top-level menu rather than burying them under Advanced.
SEOPress > Breadcrumbs > toggle Enable Breadcrumbs off. Around 300,000 sites run SEOPress, so this source is less common than the other three, but the [seopressbreadcrumbs] shortcode behaves the same way as Rank Math’s when left behind in a template.
How to Remove Breadcrumbs Added by a Theme
Classic themes hook breadcrumbs into their own action hooks, and 5 of the most-installed themes include a native setting that disables the trail without code. Astra, GeneratePress, Kadence, Divi, and Genesis each expose the control in a different panel.
| Theme | Control location | US install share |
|---|---|---|
| Astra | Customizer → Breadcrumb → Position: None | 14.56% |
| Divi | Theme Builder template or Theme Options | 9.37% |
| GeneratePress | Elements or Layout meta box | 3.09% |
| Kadence | Customizer → Blog → Post Layout | 1.82% |
| Genesis Framework | remove_action in functions.php | 1.17% |
Install share figures come from BuiltWith’s WordPress theme usage distribution for the United States.
Astra
No-code route: Appearance > Customize > Breadcrumb > Breadcrumb Position, set to None.
Code route: addfilter( 'astrabreadcrumbtrailmarkup', 'returnemptystring' );
Per-page route: the Astra Settings meta box on any post or page carries a Disable Breadcrumb checkbox.
Brainstorm Force built Astra into the most-installed WordPress theme in the world, sitting on roughly 1.28 million US sites, which makes it the theme most likely to be responsible when the SEO plugin is not.
GeneratePress
GeneratePress does not print breadcrumbs by default. Tom Usborne’s theme stays deliberately minimal at roughly 30KB installed.
When a trail appears on GeneratePress, it comes from GenerateBlocks, a Page Hero element, or a hooked function added by whoever built the site.
Check Appearance > Elements first, then search the child theme for generatebeforecontent. Remove the hooked callback there rather than fighting it with CSS.
Kadence
Kadence puts breadcrumb control inside the post layout settings, not a dedicated panel.
- Customizer > Blog > Post Layout > Above Post Title Elements
- Drag Breadcrumbs out of the active element list
- Repeat under Page Layout, since posts and pages hold separate configurations
Individual pages carry their own override in the Kadence sidebar panel of the block editor. Sitewide removal requires both, or stray pages keep showing the trail.
Divi
Divi handles breadcrumbs through modules, not a global switch.
Open Divi > Theme Builder, edit the template attached to the affected post type, and delete the Post Title module’s breadcrumb toggle or the standalone breadcrumb module. Elegant Themes ships breadcrumbs off by default in the base theme, so a visible trail on Divi almost always traces back to a Theme Builder template or a child theme override.
Divi runs on 822,205 US sites per BuiltWith, second only to Astra and Hello Elementor.
Genesis Framework
Genesis exposes no toggle. Removal happens through removeaction in the child theme.
removeaction( 'genesisbeforeloop', 'genesisdobreadcrumbs' );
StudioPress built Genesis around hooks rather than settings panels, which is exactly why the framework stayed popular with developers and why editing functions.php the right way matters more here than on any other theme.
Elementor Theme Builder
Elementor sites keep breadcrumbs in a widget placed on a Single or Archive template.
Templates > Theme Builder > Single, then delete the Breadcrumbs widget from the layout and update. Elementor also offers a Yoast Breadcrumbs widget that pulls from the SEO plugin, so disabling Yoast breaks the widget rather than hiding it cleanly.
Deleting the widget is the correct fix. Setting it to hidden leaves the container in the DOM.
How to Remove Breadcrumbs in a Block Theme With the Site Editor
Block themes store templates as HTML files instead of PHP, so breadcrumb removal happens visually in Appearance > Editor. Open the affected template, click the breadcrumb block, and delete it. No functions.php edit and no Customizer panel exist in a block theme.
The WordPress.org repository now hosts more than 1,180 block themes with 2.7 million active installations, and block editor usage across all WordPress sites reached roughly 60% in 2025, up from 37% in 2020.
Full Site Editing adoption grew 145% during 2025, which means this method applies to a rapidly expanding share of installs.
The steps:
- Appearance > Editor > Templates
- Select Single Post, Page, or Product depending on where the trail appears
- Click the breadcrumb block, press Delete, then Save
Template versus template part matters here. A breadcrumb sitting inside the Header template part appears on every page of the site, and editing the Single template will not touch it.
Broke the layout? Appearance > Editor > Templates > the three-dot menu carries Clear customizations, which reverts that template to the theme’s original HTML file.
Twenty Twenty-Four and Twenty Twenty-Five ship no breadcrumb block at all. A trail on either of those default themes comes from a plugin, full stop.
How to Remove WooCommerce Breadcrumbs
WooCommerce breadcrumbs get removed with a single removeaction call that must match the original hook priority of 20. The core plugin attaches its trail to woocommercebeforemaincontent, and a priority mismatch causes the removal to fail silently with no error message.
removeaction( 'woocommercebeforemaincontent', 'woocommercebreadcrumb', 20 );
Drop that inside a child theme functions.php or a site-specific plugin. Wrap it in init if your theme loads WooCommerce templates unusually early.
Priority is the part people get wrong. Omit the 20 and WordPress defaults to 10, finds nothing registered at that priority, and removes nothing while throwing no warning.
WooCommerce powers over 5 million active installations and roughly 4.5 million live stores according to Store Leads, with DataProt reporting that 93.7% of WordPress ecommerce sites run it. Automattic acquired the plugin in 2015 and has kept the breadcrumb hook signature stable since.
Editing instead of removing
Full removal is not always what a store needs.
The woocommercebreadcrumbdefaults filter changes the delimiter, wrapper tags, or the Home text without deleting the trail:
delimitercontrols the separator characterwrapbeforeandwrapaftercontrol the container markuphomesets or empties the first crumb label
Template-specific behavior
The shop page, single product pages, and product category archives all pull from the same hook, so one removeaction clears all three at once.
Conditional removal needs isproduct(), isshop(), or isproductcategory() wrapped around the call.
Storefront is the exception. Automattic’s own theme, running on 37,235 US sites, routes the trail through storefrontbreadcrumb instead, so the standard WooCommerce removal leaves it untouched.
Purge your cache after any of these edits. SQ Magazine’s 2025 data shows 82.4% of WordPress sites run at least one caching plugin, and a stale cached page is the most common reason a correct removal looks like it failed.
How to Remove Breadcrumbs With PHP Code
PHP removal uses removeaction() to unhook the breadcrumb function, or a filter that returns an empty value. The call goes in a child theme functions.php file or a snippet plugin, and it must match the original hook name, callback name, and priority exactly.
| Source | Code |
|---|---|
| Yoast SEO | add_filter( 'wpseo_breadcrumb_output', '__return_false' ); |
| Rank Math | add_filter( 'rank_math/frontend/breadcrumb/html', '__return_empty_string' ); |
| Genesis | remove_action( 'genesis_before_loop', 'genesis_do_breadcrumbs' ); |
| Astra | add_filter( 'astra_breadcrumb_trail_markup', '__return_empty_string' ); |
Never put this in the parent theme. The next theme update overwrites the file and the trail comes back with no explanation.
The parent versus child distinction is the same reason core WordPress files stay off limits for customization work. Snippet plugins sidestep the problem entirely.
WPCode passed 3 million active installations with a 4.9-star rating, and Code Snippets holds over 1 million, according to ZeroToWP’s 2026 plugin testing.
Elementor’s 2026 developer survey data reports 70% of intermediate WordPress users now prefer snippet plugins over editing functions.php directly, mostly to avoid update wipeouts.
Why snippet plugins win for non-developers:
- Built-in syntax validation catches the missing semicolon before it runs
- Individual snippets toggle on and off like mini-plugins during troubleshooting
- The code survives a full theme change
Broke the site anyway? A fatal error triggers WordPress recovery mode, which emails the admin address a login link that loads the dashboard with the broken code disabled.
No email arriving? Connect over FTP or your host’s file manager, open the child theme functions.php, delete the last block you added, save.
How to Hide Breadcrumbs With CSS
CSS hides breadcrumbs visually without removing them from the page. Adding display: none to the wrapper class in Appearance > Customize > Additional CSS takes 15 seconds and leaves the HTML, the internal links, and the BreadcrumbList schema fully intact in the source.
.yoast-breadcrumbs { display: none; }
Swap the class for whichever wrapper your inspection turned up.
What CSS does and does not do:
- Hides: the visible trail, immediately, across every page matching the selector
- Keeps: the markup in the DOM, the schema in the source, the crawlable links intact
- Breaks: nothing, which is the entire appeal
Google confirmed in its January 2025 Search Central update that breadcrumb markup still feeds desktop results and the Search Console rich result report, so hidden-but-present markup keeps working exactly as before.
Use display: none, not visibility: hidden. The second one hides the element while reserving its box, leaving a blank gap where the trail used to sit.
Leftover spacing after the trail disappears usually comes from the parent container’s padding rather than the breadcrumb itself. Zero out the wrapper’s margin-bottom and the gap closes.
CSS earns its place on page builder templates where no hook is accessible, and as a same-day fix while you sort out the proper removal. Anyone learning how CSS controls presentation on the web hits this distinction quickly: presentation and structure are separate layers, and hiding one never deletes the other.
How to Remove Breadcrumbs on Specific Pages Only
Conditional removal wraps the removeaction call inside a WordPress conditional tag so the breadcrumb disappears on chosen templates and stays everywhere else. Body class selectors achieve the same result in CSS when code access is limited or a fast fix is needed.
| Target | Conditional tag | CSS body class |
|---|---|---|
| Homepage | is_front_page() | .home |
| One page | is_page(42) | .page-id-42 |
| All blog posts | is_singular( 'post' ) | .single-post |
| Product categories | is_product_category() | .tax-product_cat |
Sample pattern: if ( ispage(42) ) { removeaction( 'woocommercebeforemaincontent', 'woocommercebreadcrumb', 20 ); }
Hook that into templateredirect so the conditional evaluates after the query runs. Conditionals fire too early inside a bare functions.php and return false on everything.
No-code alternatives per theme:
- Astra: Astra Settings meta box, Disable Breadcrumb checkbox
- Kadence: Kadence panel in the block editor sidebar
- OceanWP: Page Settings meta box, Breadcrumbs dropdown set to Disable
- Elementor: Display Conditions on the Single template
Checkout and thank-you pages are the two most common conditional targets on WooCommerce stores, since any upward navigation during payment pulls buyers out of the funnel.
Standalone landing pages built for a single conversion are the other usual candidate. Baymard Institute research found 36% of ecommerce sites fail to show full category paths on mobile anyway, so partial removal is closer to industry norm than an exception.
Mobile-only hiding works through a media query rather than a conditional tag, since the distinction is viewport width, not template. Media queries handle breakpoint-specific rules cleanly here.
How to Remove Breadcrumb Structured Data From Search Results
Breadcrumb structured data lives separately from the visible trail and requires its own removal. Yoast uses the wpseoschemabreadcrumb filter, Rank Math exposes a schema toggle in its settings, and CSS-based hiding removes nothing from the markup Google reads.
Google’s January 23, 2025 update stopped showing breadcrumbs on mobile search results in every language and region, replacing the path with the domain alone. Desktop results still display the full trail.
Remove the BreadcrumbList schema and desktop listings show the raw URL string instead of the readable path.
Removal by plugin:
- Yoast:
addfilter( 'wpseoschemabreadcrumb', 'returnfalse' ); - Rank Math: Rank Math > Titles & Meta, disable the breadcrumb schema output
- AIOSEO: the schema switch sits beside the display switch under Breadcrumbs
Confirm the result in Google’s Rich Results Test. A clean run returns no BreadcrumbList item at all rather than a warning.
Search Console’s breadcrumb rich result report survived the mobile change, per Google’s own announcement from product manager Caitlin Dorsey, so that report remains the second verification point.
SERP display lags the code change. Google’s documentation puts recrawling anywhere from a few days to a few weeks, and independent testing by CrawlWP measured 1 to 7 days for updated pages to reflect edits.
How to Verify Breadcrumbs Are Fully Removed
Verification requires a cache purge, an incognito window, and a view-source check across every template type. A correct removal that still shows the old trail is nearly always a caching artifact rather than a failed edit.
SQ Magazine’s 2025 market data reports 82.4% of WordPress sites run at least one caching plugin, which makes stale cache the single most likely explanation.
Purge in this order:
- Plugin cache (WP Rocket, LiteSpeed Cache, W3 Total Cache)
- Host-level cache (SiteGround, Kinsta, WP Engine all run their own layer)
- Cloudflare or your CDN
- Browser, via an incognito window
LiteSpeed Cache alone sits on more than 6 million active installs, so a server-level purge is required on a large share of sites even after the plugin cache clears.
View source, not inspect. Chrome DevTools renders the live DOM after JavaScript executes, while Ctrl+U shows what the server actually sent. Only the second one proves the PHP stopped running.
Check 5 template types separately: single post, page, category archive, product page, and 404. A removeaction tied to one hook clears one context and leaves the others untouched.
Themes with a separate mobile header deserve their own pass. Divi and OceanWP both build distinct mobile layouts, and a breadcrumb removed from the desktop template survives happily in the mobile one.
What Removing Breadcrumbs Changes for Navigation and Rankings
Removing breadcrumbs deletes 2 to 4 internal links per page and eliminates a crawl path to parent categories. Sites with flat architecture lose almost nothing. Deep ecommerce catalogs lose a documented discovery route to product and category pages.
Every crumb in the trail is a real internal link passing equity upward. Search Engine Land’s breadcrumb guide notes that reducing structural depth through these links raises the odds deep pages get discovered and prioritized, which matters most on large inventories.
| Site type | Impact of breadcrumb removal |
|---|---|
| Flat site (under 50 pages) | Negligible; the main navigation typically covers the same paths |
| Blog with two category levels | Minor; category links are removed from post pages |
| Store with 10,000+ SKUs | Significant; crawl depth to product pages may increase |
| Duplicate breadcrumb trail from two sources | Positive; removing one trail eliminates duplicate markup |
Desktop SERP listings switch from the readable Home > Category > Product path to the URL string once BreadcrumbList disappears.
Mobile listings show no difference at all after Google’s 2025 change, which removes one of the older arguments for keeping the trail.
On-page behavior shifts too. Breadcrumb links give visitors a one-tap route sideways instead of the browser back button, and losing them pushes more traffic back to search. That tradeoff sits at the center of usability decisions in web design, where a removed shortcut always costs something.
Removal is the right call when:
- Two sources output duplicate trails and one has to go
- The site runs flat, with every page one click from the homepage
- The trail pushes the headline and hero content below the fold on mobile
- The page is a single-conversion funnel step with no sideways exit by design
Sitebulb’s 2026 analysis makes the counterpoint bluntly: most SEOs add breadcrumbs as an audit checkbox without understanding the structural work they do for internal linking and crawlability.
Compensate after removal by strengthening other paths. Category links inside post content, related-product modules, and a clear primary menu all carry the same equity, and adding internal links inside WordPress content replaces most of what the trail was contributing.
The Baymard Institute position is worth holding onto: a badly implemented trail is often worse than no trail. Removal is not a mistake by default, and site navigation works as a system rather than a checklist of required components.
FAQ on How To Remove Breadcrumbs In WordPress
Why do breadcrumbs still show after I disabled the SEO plugin?
Your theme is generating a second trail. Disabling Yoast SEO stops Yoast output only, so check the theme’s Customizer panel and the woocommercebeforemaincontent hook next. Two sources produce two independent breadcrumb trails.
Does removing breadcrumbs hurt SEO?
Removal deletes 2 to 4 internal links per page and one crawl path to parent categories. Flat sites lose almost nothing. Large product catalogs lose a real discovery route, so compensate with category links inside content.
Can I remove breadcrumbs without touching any code?
Yes. Astra, Kadence, Divi, and every major SEO plugin ship a toggle. Block themes handle it visually through Appearance > Editor. Only Genesis Framework and WooCommerce require a removeaction call.
Why are two breadcrumb trails showing on the same page?
WooCommerce and your SEO plugin are both firing. Stores hit this constantly. Disable one source rather than both, since keeping a single clean trail preserves the BreadcrumbList schema without duplicating markup.
Where is the breadcrumb setting in Yoast SEO?
Yoast SEO > Settings > Advanced > Breadcrumbs, then switch Enable breadcrumbs to Off. Older versions bury it under SEO > Search Appearance > Breadcrumbs, so check both paths depending on your plugin version.
Will hiding breadcrumbs with CSS remove them from Google?
No. display: none hides the trail visually while the markup and schema stay in the page source. Google keeps reading BreadcrumbList and keeps showing the path in desktop results.
How do I remove breadcrumbs from product pages only?
Wrap the removal in a conditional tag. Use isproduct() around the removeaction call and hook it to templateredirect, which fires after the query resolves and the conditional returns accurate values.
Why is there an empty gap where the breadcrumbs used to be?
The parent container keeps its padding. Zero out the wrapper’s margin-bottom and padding in Additional CSS, or check whether visibility: hidden was used instead of display: none.
Do I need a child theme to remove breadcrumbs?
For PHP edits, yes. Parent theme changes vanish on the next update. A snippet plugin like WPCode works just as well and survives theme switches entirely, which is why most non-developers pick it.
How long until Google stops showing the breadcrumb path?
Between 1 and 7 days for most updated pages, sometimes several weeks. Request indexing through the URL Inspection tool to speed it up, then confirm with the Rich Results Test.
Conclusion
How to remove breadcrumbs in WordPress comes down to one habit: identify the wrapper class before you change anything.
Guessing costs more time than inspecting does.
Test on a staging copy, not live. Every method here (a Customizer toggle, a hook priority match, a deleted block) behaves differently once caching, a page builder, or a separate mobile header enters the picture.
Then verify properly. View page source rather than the rendered DOM, check the Rich Results Test for leftover structured data, and walk through your single, archive, and product templates one at a time.
One last thought. If the trail only bothers you on two pages, use conditional tags and keep the internal linking everywhere else.
Half-measures are fine here.


