# VapeHub — Collection & Product Page Internal Link Gameplan

**Date:** 1 May 2026
**Author:** Matt (Searchflex)
**Asana task:** [Collection and product internal link gameplan → vapourcore as inspiration](https://app.asana.com/0/1212991834359822/1214056801247561)
**Inspiration:** vapourcore.com

---

## TL;DR

Vapourcore wins on internal linking with **four repeatable modules** that every collection and product page surfaces. VapeHub currently has **almost none of them** on collections, and only a thin "More like this" carousel on PDPs. We have the URL inventory to fill the gaps tomorrow:

- **56 brand pages** (`/brand/<slug>/`)
- **~30 real category pages** (puff-count, fill-type, e-liquid sub-types, pouches, kits)
- **~38 guide / review articles** at root level (Hayati, Elux, Lost Mary, IVG, Crystal Pro Max, MTL/DTL, "first vape", etc.)

This doc specifies four modules, where they live on each template, and which URL pool each one draws from. Build the data layer once; the templates reuse it.

---

## What vapourcore does (the four modules)

Reverse-engineered from `vapourcore.com/` and `/collections/disposable-vapes`.

### Module A — "Shop by sub-category" pill row
A horizontal row of 5–10 chip-style links **above the product grid**. Pills are sibling categories (e.g. on `/collections/disposable-vapes`: Pre-filled Pod Vape Kits → Refillable Pod Vape Kits → Advanced Vape Kits → Heated Tobacco → Nicotine Pouches).

Plain-text anchors, big tap targets, no images. Cheap to build, huge equity-flow benefit.

### Module B — "Shop by brand" grid
A 6×N grid of brand logos with brand names underneath, all linking to brand collections. ~30 brands shown with a "View all brands" link at the end. Sits below the product grid on category pages and on the homepage.

### Module C — Related guides / articles
A 4-up content card row at the **bottom of the collection page**. Cards mix: buying guides, alternative-product roundups, brand deep-dives, comparisons. Drives the blog ↔ commerce loop.

### Module D — "More from [brand]" + breadcrumb on PDPs
On product pages: breadcrumb (Home → Brand-collection → Sub-collection → Product), a single "More from [Brand]" pill, a related-products carousel pulled from the same sub-collection (not random), plus contextual links inline ("Read our guide", "New to vaping?").

---

## What VapeHub has now — gap analysis

Audited: vapehub.co.uk homepage, /pod-kits/ (the `/disposable-vapes/` redirect target), and a representative PDP (`/hayati-pro-ultra-plus-25000/`).

| Module | Homepage | Collection (e.g. /pod-kits/) | PDP (e.g. /hayati-pro-ultra-plus-25000/) |
|---|---|---|---|
| **A. Sub-category pill row** | ✅ has "Shop By Category" tile grid | ⚠️ 3 banner tiles only (Big Puff / Small Puff / Refillable) — not exhaustive | ❌ absent |
| **B. Brand grid** | ✅ 10-brand grid with "View All" | ❌ absent | ❌ absent (only footer "Top Brands") |
| **C. Related guides** | ❌ absent | ❌ absent (no SEO copy at all on /pod-kits/) | ❌ absent |
| **D. More from brand + breadcrumbs** | n/a | n/a | ⚠️ "More like this" carousel exists but breadcrumb is shallow ("BAN-PROOF BIG PUFFS"), no "More from Hayati" pill, no guide CTAs |

**Headline gaps:**
1. **Collections have no sibling-category links and no related content** — every category page is a dead-end after the product grid.
2. **PDPs have no brand pivot and no contextual guide links** — single weak carousel.
3. **Inline copy linking is inconsistent** — the Hayati Pro Ultra Plus 25000 page does it well (linking to `/brand/hayati/`, `/prefilled-pods/`, `/nic-salts/`); most other PDPs don't.

This compounds the post-migration metadata problems (see [audit report](https://docs.google.com/document/d/1nI_6bYxHRPfoXWJDQgWoGZo6hNGRBMSzyyfDRTima7o/edit)) — equity isn't flowing to brand and category hubs, so they can't pass strength back to PDPs.

---

## The four modules to build on VapeHub

### Module A — "Shop by sub-category" pill row

**Placement:** above the product grid on every collection page (and just below the H1 / hero).

**Source rule:** show the **direct siblings** of the current category in the category tree, capped at 10. Hide on the very top-level pages (Home).

**URL pool:** VapeHub's existing category set. Concrete examples:

| Current page | Pills to show |
|---|---|
| `/pod-kits/` | Prefilled Pod Kits · Refillable Pod Kits · Big Puff Vape Kits · Small Puff Prefilled Vape Kits · 6000 Puff · 10000 Puff · 15000 Puff · 30000 Puff · High Puff Count · Rechargeable |
| `/e-liquids/` | Nic Salts · Shortfills · 50/50 E-Liquids · 100ml E-Liquids · Aqua Salts · Crystal Clear Nic Salts · Bar Juice 5000 · Doozy Mix Salts · Elux Legend Nic Salts · Crystal Prime Nic Salts |
| `/prefilled-pods/` | Hayati Pro Max Plus Pods · Hayati Pro Ultra Plus 25k Pods · Lost Mary BM6000 Refill · Elf Bar 600 Pods · Aspire Gotek X Pods · IVG Pro 12 Pods · Aura Bar 10k Pods · Crystal Pro Switch 30k Pods · Fumot T9000 Pro Max Pods · Ghost Pro 8000 Pods |
| `/nicotine-pouches/` | Velo · Killa · Snu · (other pouch brand sub-categories) |

**Spec:** plain `<a>` tags styled as pills, monochrome, bold weight, no images. Order siblings by traffic (use GSC last 28d) so the highest-converting variants get the highest-CTR slot.

---

### Module B — "Shop by brand" grid

**Placement:** below the product grid on every collection page; also re-skinned for PDPs ("Shop by brand" rail).

**Source rule:** show the top 18–24 brand pages, plus a "View all brands" link to `/brands/`. On a category page, prioritise brands that **have stock in the current category** (e.g. on `/nic-salts/` show e-liquid brands, not hardware brands).

**URL pool:** all 56 `/brand/<slug>/` pages. Cherry-pick the strongest (these already exist):

```
/brand/hayati/    /brand/elux/         /brand/elf-bar/    /brand/lost-mary/
/brand/ivg/       /brand/vaporesso/    /brand/aspire/     /brand/crystal-pro/
/brand/crystal-prime/ /brand/crystal-clear/ /brand/crystal-galaxy/ /brand/al-fakher/
/brand/bar-juice/ /brand/doozy-vape-co/ /brand/dr-frost/   /brand/feoba/
/brand/oxva/      /brand/aquavape/     /brand/dinner-lady/ /brand/double-drip/
/brand/aisu-by-zap/ /brand/bloody-mary/ /brand/pyne-pod/   /brand/vampire-vape/
```

**Spec:** logo + brand name, 4–6 across, each card is a single `<a>`. Lazy-load logos.

---

### Module C — Related guides + latest reviews

**Placement:**
- 4 cards at the bottom of every **collection** page, above footer.
- 3 cards at the bottom of every **product** page, above the "More like this" carousel.

**Source rule for collections:** match guides to the category by tag/keyword in slug. E.g. on `/pod-kits/` → show pod-kit / first-vape / MTL guides; on `/nic-salts/` → show nic-salt / e-liquid guides.

**Source rule for PDPs:** match guides to the **brand** of the current product first, then category-level fallback. E.g. on a Hayati Pro Ultra Plus 25000 PDP → show the Hayati-specific guides; on an Elux PDP → show Elux-specific.

**URL pool:** the 38 guide/review articles already live on the site. Tagged subset:

| Tag | URLs |
|---|---|
| **Hayati** | `/whats-the-hayati-twist-and-how-can-it-improve-your-life/`, `/hayati-twist-5000-review-does-it-live-up-to-the-hype/`, `/a-step-by-step-guide-to-using-the-hayati-pro-ultra/`, `/your-guide-to-vaping-starting-with-hayati-pro-ultra/`, `/explore-innovative-vaping-with-hayati-pro-max-and-hayati-twist/`, `/hayati-pro-ultra-25000-vape-care-guide/`, `/hayati-pro-max-plus-vape-review-what-makes-it-stand-out/`, `/whats-the-best-way-to-use-the-lost-mary-bm6000/`, `/which-is-the-best-hayati-pro-ultra-15000-flavour/`, `/how-to-use-hayati-pro-max-plus-pods/` |
| **Elux** | `/elux-liquids-the-ultimate-guide-to-premium-vape-juices/`, `/from-elux-disposables-came-elux-liquids-explore-the-journey-to-nic-salts/`, `/the-ultimate-nic-salt-e-liquid-experience-with-elux-a-comprehensive-guide/`, `/elux-liquid-vs-bar-juice-5000-ultimate-comparison/`, `/elux-firerose-4500-product-review/`, `/elux-legend-mini-product-review/` |
| **Crystal Pro Max** | `/analysing-the-safety-of-crystal-pro-max-vape/`, `/the-in-depth-review-of-crystal-pro-max-4000-by-hayati/`, `/crystal-pro-max-4000-product-review/` |
| **Lost Mary** | `/whats-the-best-way-to-use-the-lost-mary-bm6000/`, `/lost-mary-bm3500-product-review/`, `/lost-mary-bm600-product-review/` |
| **Elf Bar** | `/elf-bar-600-disposable-vape-a-comprehensive-look/`, `/how-to-spot-a-fake-elf-bar/` |
| **IVG** | `/ivg-smart-5500-disposable-vape-product-review/`, `/ivg-2400-review-the-ultimate-disposable-vape-experience/` |
| **Vaporesso / hardware** | `/extend-xros-5-mini-vape-kit-life-with-smart-tips/` |
| **Bar Juice** | `/a-comprehensive-review-of-bar-juice-nic-salt-e-liquids/` |
| **MTL / vaping basics** | `/mastering-mtl-a-comprehensive-guide-to-mouth-to-lung-vaping/`, `/choosing-your-first-vape-kit/`, `/comprehensive-guide-top-10-vital-tips-for-new-vapers-on-e-liquid/`, `/why-disposable-vapes-are-better-than-cigarettes-an-effective-guide/`, `/how-to-dispose-disposable-vapes/` |
| **Nic salts (general)** | `/elevate-your-vape-experience-with-the-best-nicotine-salts-of-2024/` |
| **Disposable ban** | `/disposable-vape-ban-in-2025-the-best-pod-vape-alternatives/` |

**⚠️ Pre-launch fixes — these guide URLs need cleanup before linking to them:**
- `/hayati-pro-ultra-15000-disposable-vape-a-comprehensive-review/` — title currently rendering as literal `%title%` (template bug)
- `/how-to-dispose-disposable-vapes/` — title showing as homepage title (Lost Mary | Vapehub) — wrong content rendering
- 7 review URLs have empty `<title>` — fill before promoting

**Spec:** card layout — featured image + title + 1-line excerpt + "Read more" button. Each card is a single `<a>`. Show "Updated [date]" if available.

---

### Module D — "More from [brand]" + smarter breadcrumbs (PDP only)

**Placement:** between product hero and "More like this" carousel.

**Components:**
1. **Breadcrumb** — `Home > [Brand] > [Sub-category] > [Product]`. Currently shallow on most PDPs.
2. **Single "More from [Brand]" pill** — links to `/brand/<slug>/`. Always present.
3. **Brand-tinted carousel** — the existing "More like this" should pull from the same brand's other products, not random products. Fall back to category siblings only if brand stock is thin.
4. **Inline copy links** — keep doing what `/hayati-pro-ultra-plus-25000/` does (linking to `/brand/hayati/`, `/prefilled-pods/`, `/nic-salts/` from the description). Roll out to **every PDP** via a copy-rule: every product description must link to its brand page, its category page, and one sibling category.

**Spec:** all four are template-level changes, not per-page work. Item 4 is content QA — flag PDPs missing inline links via crawl.

---

## Page-by-page placement matrix

| Module | Collection page | Brand page | PDP | Homepage |
|---|---|---|---|---|
| A. Sub-category pills | ✅ above grid | ✅ above grid (sub-collections of brand) | ⚠️ optional, below carousel | ✅ already present |
| B. Brand grid | ✅ below grid | ❌ skip | ⚠️ optional rail | ✅ already present |
| C. Related guides + reviews | ✅ bottom (4 cards) | ✅ bottom (4 cards, brand-filtered) | ✅ bottom (3 cards, brand-then-category) | ✅ already missing — add 4 cards above footer |
| D. More from brand + breadcrumb | n/a | n/a | ✅ template change | n/a |

---

## Worked examples

### Example 1: `/pod-kits/` (collection)

```
[H1: Pod Kits]
[Hero]

▶ Module A pills:
  [Prefilled Pod Kits] [Refillable Pod Kits] [Big Puff Vape Kits]
  [Small Puff Vape Kits] [6000 Puff] [10000 Puff] [15000 Puff]
  [30000 Puff] [High Puff Count] [Rechargeable Vapes]

[Product grid]

▶ Module B brand grid (24 brands, e-liquid/disposable-vape brands prioritised)

▶ Module C related guides (4 cards):
  • Choosing Your First Vape Kit
  • Disposable Vape Ban 2025 — Best Alternatives
  • Why Disposable Vapes are Better Than Cigarettes
  • Mastering MTL: A Comprehensive Guide

[Footer]
```

### Example 2: `/hayati-pro-ultra-plus-25000/` (PDP)

```
Breadcrumb: Home > Hayati > Big Puff Vape Kits > Hayati Pro Ultra Plus 25000

[Product hero]
  [More from Hayati →]   ← Module D pill

[Tabs / description]
  Inline links: brand page, category page, related pods page (✅ already done — keep)

▶ "More like this" — pulled from /brand/hayati/, not random   ← Module D fix

▶ Module C related guides (3 cards, Hayati-tagged):
  • Hayati Pro Ultra 25000 Vape Care Guide
  • Step-by-Step Guide to Using the Hayati Pro Ultra
  • Hayati Pro Max Plus Vape Review: What Makes It Stand Out?

[Footer]
```

### Example 3: `/brand/elux/` (brand collection)

```
[H1: Elux]

▶ Module A pills (Elux sub-collections):
  [Elux Legend Nic Salts] [Elux ENE Legend 15K Pods] [Elux Liquids]

[Product grid]

▶ Module C related guides (4 cards, Elux-tagged):
  • Elux Liquids: The Ultimate Guide
  • Elux vs Bar Juice 5000 — Showdown
  • From Elux Disposables to Nic Salts
  • Ultimate Nic Salt Experience with Elux

[Footer]
```

---

## Build order — fastest wins first

| # | Job | Effort | Impact |
|---|---|---|---|
| 1 | **Module A pill row on collections** — pure template change, sibling-category logic, no content needed | Low | High (every category gets sibling links + breadcrumbs of equity) |
| 2 | **Module D — "More from [Brand]" pill + brand-aware carousel on PDPs** | Low | High (immediate brand-page strength) |
| 3 | **Module C related guides on collections** — needs tagging logic (slug match), guide cards already exist as content | Medium | High (drives blog ↔ commerce loop) |
| 4 | **Module B brand grid on collections** — visual + brand stock filter | Medium | Medium (homepage already has it; collection-level adds depth) |
| 5 | **Pre-launch cleanup** — fix the broken titles on 8 guide URLs before they become inbound destinations | Low | Required (don't link to broken pages) |
| 6 | **Inline-link QA on PDPs** — crawl flag for PDPs missing brand/category inline links, content team backfill | Medium | Medium |

---

## Logic spec for the dev team (one-pager)

### Module A — sibling pills
```
INPUT: current category page
QUERY: parent_category_id of current category
OUTPUT: list of sibling categories (same parent), excluding self,
        sorted by GSC clicks last 28d desc, capped at 10
RENDER: pill component, plain anchor tags
FALLBACK: if no parent, show top-level categories
```

### Module B — brand grid
```
INPUT: current category page
QUERY: brands that have ≥3 in-stock SKUs in this category
OUTPUT: top 24 by SKU count, plus link to /brands/
RENDER: logo + name grid, single anchor per card
FALLBACK: if category-filtered list <12, fill from global top brands
```

### Module C — related guides (collection)
```
INPUT: current category slug
QUERY: blog posts where slug contains any of the category's
       keyword-tags (manual mapping — see tag table above)
OUTPUT: 4 most-recent matches
RENDER: card row
FALLBACK: 4 most-recent posts overall
```

### Module C — related guides (PDP)
```
INPUT: current product's brand
QUERY: blog posts tagged with brand
OUTPUT: 3 most-recent matches
FALLBACK: posts tagged with current product's primary category
SECONDARY FALLBACK: 3 most-recent posts overall
```

### Module D — brand pill + carousel
```
INPUT: current product
COMPONENT 1: link to /brand/<product.brand_slug>/, label "More from [Brand]"
COMPONENT 2 (carousel): products from same brand,
                        excluding current, sorted by popularity, top 10
FALLBACK: if brand has <6 in-stock, fill from current sub-category
```

---

## Open questions for Jack

1. **CMS:** is the blog tagged by brand/category in WP, or is matching going to need manual slug-keyword rules? (assumes the latter — cheaper to ship)
2. **Brand logos:** are we using existing logo SVGs from the homepage brand grid, or do they need re-cropping for collection pages?
3. **Stock filter on Module B:** are stock levels exposed in the category template, or only at PDP level? (affects build complexity)
4. **Pre-launch fixes:** can the broken-title guide URLs (8 of them) be fixed this sprint? They're a bigger problem than the linking gap and should land first.

---

## Appendix — full URL inventory

### Sub-category siblings (real categories, ≠ products)
```
/pod-kits/                /e-liquids/             /prefilled-pods/
/refillable-pods/         /nic-salts/             /nicotine-pouches/
/heated-tobacco/          /vape-kits/             /clearance/
/big-puff-vape-kits/      /small-puff-prefilled-vape-kits/
/prefilled-pod-kits/      /refillable-pod-kits/
/6000-puff-vapes/         /10000-puff-vapes/      /15000-puff-vapes/
/30000-puff-vapes/        /high-puff-count-vapes/
/rechargeable-vapes/      /50-50-e-liquids/       /100ml-e-liquids/
```

### Brand pages — 56 total under `/brand/`
Top-tier (use first in Module B): hayati, elux, elf-bar, lost-mary, ivg, vaporesso, aspire, crystal-pro, crystal-prime, crystal-clear, crystal-galaxy, al-fakher, bar-juice, doozy-vape-co, dr-frost, feoba, oxva, aquavape, dinner-lady, double-drip, aisu-by-zap, bloody-mary, pyne-pod, vampire-vape.

### Guide / review articles (Module C source pool) — 38 URLs
See "Module C" section above for full tagged list.

---

**Next step after sign-off:** ticket each module separately for the dev team using the four logic specs above. Ship Module A + D first (template-only, no content blockers).
