Quick Answer: For programmatic city pages, use a self-referencing canonical on every indexable URL unless that page is truly a duplicate or near-duplicate of another page. If a city page has unique local content, unique intent, and is meant to rank independently, canonicalizing it to a parent template or another city page will usually suppress its ability to compete in search.
The best practice for canonical tags on programmatic city pages is to align the canonical URL with the page’s actual search purpose and content uniqueness. Each city page should generally point to itself when it contains distinct copy, local signals, services, testimonials, FAQs, and structured data that justify separate indexing; this tells search engines the page is the preferred version and preserves its ranking potential. Only consolidate with a canonical to another URL when the pages are materially duplicative, generated from the same template with minimal differentiation, or when you intentionally want search engines to treat multiple city variants as one primary page. For large-scale local programs, avoid cross-canonicalizing every city page to a single “service area” page, because that often neutralizes local relevance and can reduce visibility across the entire geo set. Instead, pair self-canonicals with indexable unique content, consistent internal linking, and strict control over parameterized or filtered duplicates.