Skip to content
WP Visibility

Schema and search appearance guide

Fix WordPress Breadcrumb Schema That Shows the Wrong Hierarchy

Decide the path a reader should see, trace the wrong trail to its category, parent page, or competing component, and make the visible breadcrumbs and the markup agree.

Published

On this page

When breadcrumb markup shows the wrong hierarchy, first decide which path a reader should see, then find what produced the wrong one. In WordPress, check three causes first: a post in several categories, a page with no parent set, or two components printing different trails. Fix that source, then check that the visible trail and the BreadcrumbList markup show the same path on every template.

Choose the path readers should see

Google’s breadcrumb documentation, checked September 27, 2026, says: “We recommend providing breadcrumbs that represent a typical user path to a page, instead of mirroring the URL structure.” So the question is not what the URL says but how a reader would get there.

For a fictional business, garden.example, a post on pruning tomatoes might sit in both the Vegetables and Summer Tasks categories. An illustrative decision: most readers browse by plant, so the path is Home, Vegetables, Pruning Tomatoes. Write that decision down for each section of the site before changing anything. Otherwise you will fix one post and create the same argument on the next.

The same documentation also says that if there are several ways to reach a page, “you can specify multiple breadcrumb trails for a single page.” That is a markup option, but a single clear trail is easier to keep consistent with what readers see.

Where a wrong trail starts. Several categories: The tool picked a category you did not intend. Missing parent: Page or category has no parent set. Two components: Theme trail and plugin markup disagree.
Three places a wrong WordPress breadcrumb path can start. Fix the source, then compare the visible trail and the markup.

Find where the wrong path comes from

Symptom Likely source Where to look
A post shows the wrong category The post has several categories and the tool picked another The post’s Categories panel
A post shows “Uncategorized” No category was chosen, so WordPress used the default Categories panel; Settings, Writing
A page shows Home, then the page, with nothing between No parent page set The page’s Parent setting
A category shows no parent The category has no parent category Posts, Categories
The visible trail and the markup differ Two components: the theme’s trail and a plugin’s markup View source and the theme settings
Two BreadcrumbList blocks with different paths Two plugins, or theme Microdata plus plugin JSON-LD The structured data inventory

The last two rows need an inventory of what the page prints. The schema_inventory.py script in the structured data audit lists every top-level JSON-LD object, including any top-level BreadcrumbList; one nested inside another object’s properties will not appear. Also search the page source for itemtype or typeof next to BreadcrumbList, which is how Microdata and RDFa trails from themes appear.

Compare the visible trail with the markup

Open a post signed out. Write down the visible trail. Then find the BreadcrumbList in the page source and write down each ListItem’s position and name. They should match item for item. Google’s documentation says each item needs a position and a name, and every item except the last needs an item URL; the last one may omit it.

Know which component owns each part. In WP Visibility 2.10.3, the Schema module, on by default, prints a BreadcrumbList on every page except search results and the 404 page, whether or not you show a visible trail, and even with the Breadcrumbs module off. The visible trail only appears where you place the [wpvis_breadcrumbs] shortcode, which works while the Breadcrumbs module is on (the default), and both are built from the same trail, so they normally match. Add a visible breadcrumb trail covers placement. Google’s structured data general guidelines, checked September 27, 2026, say not to mark up content that is not visible to readers, so pair the markup with a visible trail on each template.

That design has one more consequence to check. If your theme prints its own visible trail with a different rule for choosing the category, readers see one path while the markup describes another. Either replace the theme’s trail with the shortcode, or remove WP Visibility’s breadcrumb markup so the theme owns both the trail and the markup. Turning off WP Visibility’s Breadcrumbs module does not remove its markup. Turning off the Schema module does, along with all of WP Visibility’s other JSON-LD; to remove only the breadcrumb, a developer can return an empty value from the wpvis_schema_piece_breadcrumb filter. WordPress 7.0 also added a core Breadcrumbs block, according to its developer note, checked September 27, 2026; the WP Visibility doc advises using one visible trail or the other, not both.

Fix the hierarchy at its source

Work through the causes you found:

  1. Several categories. WP Visibility’s trail uses the first category WordPress returns for the post, and 2.10.3 has no primary category picker. The dependable fix is to keep each post in one category and use tags for secondary groupings. If you need several categories and a chosen trail, a developer can adjust the items through the wpvis_breadcrumbs filter. If you use a different breadcrumb tool, check its own documentation for how it chooses a category.
  2. Uncategorized. Choose a real category for the post, and change the Default Post Category under Settings, Writing so new posts do not land there. WordPress assigns that default to any post saved without a category, according to its Writing settings documentation, checked September 27, 2026.
  3. Pages. Set the page’s Parent in the editor’s settings sidebar (WordPress documentation, checked September 27, 2026). The trail then lists the parent pages. With pretty permalinks, a child page’s address includes its parent’s slug (get_page_uri() reference, checked September 27, 2026), so changing a parent changes the address. Check redirects for published pages before you move them.
  4. Nested categories. If Vegetables should sit under Garden Guides, set the parent category under Posts, Categories (Categories screen documentation, checked September 27, 2026). The trail follows the category’s parents.
  5. Competing components. Pick one owner for breadcrumbs. Turn off the other at its source, rather than hiding its output with CSS. A trail hidden with CSS is still in the HTML, and hiding a visible trail does not remove any markup.

After each change, clear any page cache, reload the post signed out, and compare the visible trail and the markup again.

Validate the paths across templates

A fix for posts can leave other templates wrong. Check one URL of each type:

Template Expected trail (illustrative)
Post Home, Garden Guides, Vegetables, Pruning Tomatoes
Page Home, Services, Garden Design
Child page Home, Services, Garden Design, Small Gardens
Category Home, Garden Guides, Vegetables
Tag Home, the tag name
Custom post type entry Home, the archive if it has one, its term or parent entries, the entry

Run each URL through the Rich Results Test and check that it detects the breadcrumbs with no errors. The breadcrumb documentation says the feature “is available on desktop in all regions and languages where Google Search is available,” so look for breadcrumbs in desktop search results, not on a phone. Valid markup makes a page eligible; Google does not guarantee a breadcrumb will be shown, as its structured data general guidelines, checked September 27, 2026, state.

If your trails reflect a site structure you are unhappy with, that is a navigation problem rather than a markup problem. The WordPress SEO field guide covers site structure; a topic hub can give a group of posts a clearer home.

  • The intended path written down for each section of the site.
  • The wrong path traced to categories, parent pages, or a competing component.
  • One component owns breadcrumbs; the visible trail and the markup match item for item.
  • Posts in one category where possible; the default category is not Uncategorized.
  • Parent pages and parent categories set; redirects checked for moved pages.
  • One URL per template validated in the Rich Results Test.

Read next

WordPress SEO with your own assistant.

WP Visibility is $99 a year for unlimited sites, client sites included, with a 30-day refund. Use its SEO tools in WordPress or connect a supported assistant. Read how proposal review and permissions work.