Commit a65df6f
Add individual tire pages with SEO (2.0 Pillar 2, Phase 2A)
Give every tire a server-rendered, indexable URL at /tires/{slug}/ so
tires can rank on their own instead of being trapped inside the catalog
shortcode. Content (specs, price, Roamer efficiency, owner reviews) is
in the initial HTML — no JS required for crawlers.
- Schema: add a `slug` column (migration 17), auto-generated from
brand+model+size on insert/update with collision suffixing, and
backfilled for existing rows. New get_tire_by_slug / sync_tire_slug /
backfill_slugs helpers. slug appended to the frontend row arrays.
- Routing: new RTG_Tire_Page mirrors the RTG_Tire_Review standalone
pattern (rewrite rule, template_redirect render, security headers).
Unknown slug -> real 404; legacy /tires/{tire_id}/ -> 301 canonical.
- Structured data: factor the per-tire Product builder out of
RTG_Schema into reusable build_product_item / build_single_product,
so the page emits a dedicated Product node (not just the catalog
ItemList) plus BreadcrumbList. build_description in RTG_Meta made
public/static for reuse.
- Template: frontend/templates/tire-page.php renders title/meta/
canonical/OG, breadcrumb, hero, full spec sheet (efficiency omitted
per its discontinuation), Roamer block, and server-rendered reviews.
- Cards: tire titles now link to /tires/{slug}/ (tirePageUrl localized,
subdirectory-safe); .tire-card-model-link styling added.
Build regenerated; 83/83 JS tests pass. Remaining SEO work (sitemap,
?tire= canonical consolidation, admin slug setting, on-page click
tracking) tracked in ROADMAP-2.0.md.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>1 parent e0958fc commit a65df6f
13 files changed
Lines changed: 803 additions & 144 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
7 | 12 | | |
8 | 13 | | |
9 | 14 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
886 | 886 | | |
887 | 887 | | |
888 | 888 | | |
| 889 | + | |
| 890 | + | |
| 891 | + | |
| 892 | + | |
| 893 | + | |
| 894 | + | |
| 895 | + | |
889 | 896 | | |
890 | 897 | | |
891 | 898 | | |
| |||
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
206 | 206 | | |
207 | 207 | | |
208 | 208 | | |
209 | | - | |
| 209 | + | |
210 | 210 | | |
211 | 211 | | |
212 | 212 | | |
| |||
345 | 345 | | |
346 | 346 | | |
347 | 347 | | |
348 | | - | |
| 348 | + | |
| 349 | + | |
| 350 | + | |
| 351 | + | |
| 352 | + | |
| 353 | + | |
| 354 | + | |
| 355 | + | |
| 356 | + | |
| 357 | + | |
| 358 | + | |
| 359 | + | |
349 | 360 | | |
350 | 361 | | |
351 | 362 | | |
| |||
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
0 commit comments