On-Page SEO
watchvault.us · Titles, meta descriptions, headings, internal linking, OG/Twitter
On-page is the lowest-scoring category and the highest-leverage to fix — the gaps are mechanical and uniformly distributed across the site. Title-tag truncation is the single biggest CTR-leak: 24 of 24 sampled product pages (and the homepage) end mid-word at exactly 70 characters, the Shopify hardcap. Seven pages have no <H1>. Nine have no meta description. Twelve have throwaway titles under 25 characters. <H3> usage is essentially zero across the site, killing passage-level citability.
Title Tags
24 of 100 sampled pages have titles at exactly 70 characters, almost all truncated mid-word. Examples below; full inventory in evidence/summary.txt.
| Length | Title (as rendered) | URL |
|---|---|---|
| 70 | "Houston Luxury Watch Buyers | Sell Your Rolex | Buy Used Luxury Watche" | / |
| 70 | "Breitling Avenger II Seawolf BlackSteel Limited Edition Yellow Dial 45" | /products/…m17331 |
| 70 | "Cartier Santos 100 XL Chronograph Silver Dial Automatic Steel W20090X8" | /products/…2740 |
| 70 | "Rolex Submariner No Date 41mm Black Dial Stainless Steel Oyster 124060" | /products/…124061 |
| 70 | "Rolex GMT-Master II Red Blue Pepsi Jubilee Bracelet Steel 40MM 126710B" | /products/…126710blro |
| 70 | "Omega Speedmaster Reduced Black Dial 39mm Stainless Steel Automatic 35" | /products/…3510-50 |
| 70 | "TAG Heuer Carrera Chronograph Automatic 44MM Green Dial Stainless Stee" | /products/…cbn2a1n |
| 70 | "Tudor Black Bay 41 Heritage Black Dial Stainless Steel Automatic 79540" | /products/tudor-black-bay-41…79540 |
12 pages with under-25-character generic titles
| Length | Title | URL |
|---|---|---|
| 12 | 15k+ Watches | /collections/15k-watches |
| 13 | 0-5K Products | /collections/0-5k-products |
| 14 | 5k-10k Watches | /collections/5k-10k-products |
| 15 | 10k-15k Watches | /collections/10k-15k-products |
| 12 | New About-us | /pages/new-about-us |
| 13 | Refund policy | /policies/refund-policy |
| 14 | Privacy policy | /policies/privacy-policy |
| 15 | Shipping policy | /policies/shipping-policy |
| 16 | Terms of service | /policies/terms-of-service |
| 16 | Watch Vault News | /blogs/news |
| 16 | Product Warranty | /pages/product-warranty |
| 14 | Search Results | /pages/search-results-page |
Meta Descriptions
Pages with no meta description
| /collections/0-5k-products |
| /collections/5k-10k-products |
| /collections/10k-15k-products |
| /collections/15k-watches |
| /pages/new-about-us |
| /policies/privacy-policy |
| /policies/refund-policy |
| /policies/shipping-policy |
| /policies/terms-of-service |
Heading Structure
Pages with no <H1>
| https://watchvault.us/ — homepage (0 H1, 25 H2) |
| /pages/about-us (0 H1, 10 H2) |
| /pages/get-best-price-rolex-luxury-watches |
| /pages/new-about-us |
| /pages/product-warranty |
| /pages/search-results-page |
| /pages/watchvault_reviews |
Open Graph & Twitter Cards
Homepage emits 10 OG tags and 3 Twitter tags (Shopify default). Other page types follow the same pattern; product pages emit product-specific OG correctly.
- og:site_name
- og:url
- og:title
- og:type
- og:description
- og:image + image:secure_url + image:width + image:height
- og:image is a 1204×630 PNG with transparent background — works but a JPG/WebP would be smaller
- twitter:title
- twitter:description
- twitter:card: summary_large_image
- twitter:image missing — falls back to OG image (works), but explicit declaration is safer
Internal Linking
- Homepage: 540 anchor tags total; only 81 internal href + 2 external. ~457 are href="#", javascript:, or no href — mostly accordion / dropdown / slideshow controls that should be <button>, not <a href="#">. Cosmetic but clutters semantic crawl.
- Collections: 200–400 internal links each (each product card = 1 link)
- Products: 100–250 internal links each (related products grid + nav)
- No visible breadcrumbs in the rendered template — despite BreadcrumbList JSON-LD being emitted. Visible breadcrumbs help users and improve dwell-time.
- Product handle slugs are clean (/products/<brand>-<model>-<spec>-<ref>)
Hreflang / International
- Zero hreflang tags. Site is US-only (content-language: en-US). Acceptable as-is.
Action Items
Why: Current title "Houston Luxury Watch Buyers | Sell Your Rolex | Buy Used Luxury Watche" ends mid-word. Visible in every SERP impression.
How: Shopify admin → Online Store → Preferences → Homepage title. Replace with one of:
- Houston Luxury Watch Buyer & Seller | Watch Vault (49 chars)
- Watch Vault | Sell Your Rolex in Houston, TX (44 chars)
- Pre-Owned Rolex & Luxury Watches | Houston | Watch Vault (56 chars)
Acceptance: Title in HTML matches the chosen string and is ≤ 60 chars displayed.
<H1> to homepageS · 30 minWhy: Homepage has zero <H1> tags (25 H2s, no H1).
How: Theme edit in sections/dynamic-slideshow.liquid or homepage hero. Wrap hero text block in <h1>Watch Vault — Houston Luxury Watch Buyer & Seller</h1>. Hide visually via CSS if branding requires only the wordmark.
Acceptance: curl https://watchvault.us/ | grep -c '<h1' returns ≥ 1.
All 24 sampled product pages have titles truncated mid-word at 70 chars. Sitewide CTR damage on 1,629 PDPs.
Change SEO title pattern from default {{ product.title }} | {{ shop.name }} to: {{ brand }} {{ short_model_name }} {{ ref_number }} | Watch Vault
- Rolex GMT-Master II 126710BLRO Pepsi | Watch Vault (52 chars)
- Cartier Santos 100 XL Chronograph 2740 | Watch Vault (53 chars)
Either via per-product seo_title metafield or theme template that emits SEO title from vendor + model metafield + reference number.
Acceptance: No product page has title at exactly 70 chars; ≥ 95 % of product titles are 35–58 chars.
Build templated pattern in product template:
(Cap at 155 chars; truncate gracefully.)
Acceptance: No product page has meta description > 160 chars; CTR uplift visible in GSC after 4 weeks.
7 pages without <H1>: /pages/about-us, /pages/get-best-price-rolex-luxury-watches, /pages/product-warranty, /pages/search-results-page, /pages/watchvault_reviews, /pages/new-about-us (kill via C1), homepage (covered by C3).
Acceptance: All non-deleted pages have exactly 1 H1.
Missing meta descriptions: 4 price-band collections (/collections/0-5k-products, 5k-10k, 10k-15k, 15k-watches), 4 policies (Privacy, Refund, Shipping, Terms), and /pages/new-about-us (covered by C1).
Use a templated pattern that pulls collection title + price band + product count.
BreadcrumbList JSON-LD exists but no rendered breadcrumb on collections / products. UX + dwell-time benefit.
Acceptance: Visible breadcrumb appears above the H1 on all collection and product pages.
Current og:image is a 1204×630 PNG with transparent background — works but PNG is heavier than JPG/WebP for photographic content. Add explicit twitter:image while you're in there.
Cross-references: Author bylines + passage-level citability are filed under Content Quality (M3, M-PASSAGE).