Local SEO
Breadcrumbs, Canonicals and City Pages, Explained
October 1, 20266 min readCPR West Covina
A question we got this week, about our own site: the La Puente page lives at /cpr-certification-la-puente, but its breadcrumb reads Home, AHA Courses, Heartsaver First Aid CPR AED, La Puente. The two do not line up. Is that hurting the page?
No. But it is a good question, because the URL, the canonical tag and the breadcrumb look like three versions of the same thing, and they are not. Mixing them up is how city pages end up quietly broken.
Three things that look related and are not
- The URL is an address. Its only job is to be stable and readable. A flat slug like /cpr-certification-la-puente is fine, and changing it later costs you more than any structure you might gain.
- The canonical tag answers one question: when several URLs show the same content, which one is the real page. On a page with its own content it should simply point at itself.
- The breadcrumb shows where the page sits in your site, and it is a set of real links back up to the parent pages. Google's own documentation describes it as the page's position in the site hierarchy, not as a copy of the URL.
So a breadcrumb that does not mirror the URL is normal. Our La Puente page belongs under the Heartsaver course because that is the class it sells, and the trail says so.
What does matter: the visible trail and the breadcrumb structured data in the page source must say the same thing, and every page in the trail must load. A trail pointing at a page you deleted last year is a broken link with your logo on it.
The canonical mistake that erases city pages
In our experience the most damaging canonical error on training company sites is every city page pointing its canonical at the main course page or the homepage. It usually comes from a template. It tells Google that the city page is a copy and the other URL is the original, so Google indexes the original and drops the city page. You built twenty pages and asked for none of them to rank.
Open any city page, view the source, and search for canonical. It should be that page's own address. If it is not, fix that before anything else in this post.
What actually decided our rankings: links
In September we audited why our city pages were barely showing up. The answer was not breadcrumbs or canonicals. It was links.
Our homepage, menu and footer linked to four West Covina course pages and nothing else. The 44 city pages that existed at the time sat two clicks away from anywhere a visitor or a crawler starts. When we lined up how many internal links pointed at each page against how often Google showed it, the two moved together.
One example: our El Monte page had 20 impressions in 90 days, and 17 of them were for a town about 400 miles away. Google had indexed it and had no idea what it was for. Meanwhile the homepage ranked second for our main city term. The domain had the authority. It just never reached the city pages.
A page with nothing linking to it is not a page Google is ignoring. It is a page you told Google does not matter.
Need a hand
Want your city pages audited?
We check the canonical, the breadcrumb, the links in and how different each page really is, then fix what we find.
Book a 15-Minute CallHow we link city pages now
- One hub page, Cities We Serve, that lists all 28 cities and links to every city page. The menu, the footer and the homepage all link to it.
- One link to the hub in the footer, not every city. A footer listing every city on every page is the doorway pattern, and it grows worse each time you add a city.
- Each course page lists the nearby cities for that course. The Heartsaver page links to its city pages, which is how La Puente is reached from the class it sells.
- Each city page links back up through its breadcrumb, so authority flows both ways.
The check that keeps city pages honest
More links to a weak page do not help. The other half of the job is making sure every city page is actually about that city.
We run a script that removes the city name from each page and then compares the remaining text, five words at a time, against its sibling pages. A page that is the same template with the town swapped out scores high, because once the town is removed the pages are identical. Our gate fails any pair above 0.5.
For calibration: the city pages that already rank for us score below 0.1. When we first ran it, four of our pages scored above 0.8. We rewrote them around the real local employers, hospitals and drive, and every city page passes today.
Passing is not the same as good. When we ran it again for this post, a handful of our older city pages scored between 0.43 and 0.499, just under the line. They are allowed through, but they are nowhere near the pages that rank. That list is our next rewrite, and it is the most useful thing the check produces: not a pass or fail, a ranked list of which pages to fix first.
A ten minute audit for your own site
- 01Open three city pages and check the canonical in the source points at the page itself.
- 02Click every link in each breadcrumb. Each one should load a real page.
- 03Count how many pages a visitor can land on that link to each city page. If the answer is one sitemap, that is your problem.
- 04Read two city pages side by side with the town names covered. If you cannot tell them apart, neither can Google.
Troubleshooting
Questions we get asked
Does my breadcrumb have to match my URL?
Should my city pages use the main course page as their canonical?
Should I list every city I serve in the footer?
How different do city pages need to be?
Need a hand
Tell us what your training company is stuck on
Fifteen minutes, on a call, looking at your real account or your real site. We will tell you what we would do first, including when the answer is nothing yet.
We run CPR West Covina: 4.9 from 300+ Google and Yelp reviews.