| +276% Organic traffic growth Hub page cluster, 6 months | 1 → 14 Page-1 rankings Hub + spoke pages combined | −41% Crawl budget reclaimed By removing crawl waste | 0 New backlinks built Architecture did the work |
Most travel content SEO sites are built the same way: individual destination articles published without a connecting architecture, each one targeting a different keyword, none of them reinforcing the others. The result is a flat content library where Google has no basis for recognising topical authority on any destination. Every page competes alone.
This case study documents how I rebuilt a section of a travel content site covering the Costa Brava and Girona region of Spain using a hub page architecture — a single authoritative hub page supported by a network of tightly linked spoke articles. The project covered the beaches of the Girona coastline, an area with strong seasonal search demand, a clear geographic entity structure, and a competitive SERP dominated by large travel publishers.
Two disciplines drove the outcome: hub page architecture that gave Google a clear topical map of the site’s coverage, and crawl budget discipline that stopped Google wasting its crawl allowance on pages that were not earning their place in the index. The combination delivered a 276% organic traffic increase to the cluster over six months — with zero new backlinks built.
This is one of the most technically detailed case studies I have published, because the methodology — competitor heading audits, crawl budget analysis, keyword stacking in hub page titles — is almost never documented at this level of specificity. Most SEOs know hub pages work. Very few explain exactly how they build them.
KEY OUTCOMES AT 6 MONTHS
- Organic sessions to hub + spoke cluster: +276%
- Page-1 rankings: 1 → 14 (hub page alone now ranks for 31 keywords)
- Hub page featured snippet: 1 captured (‘beaches near Girona’ query)
- Crawl budget reclaimed: 41% (by removing or noindexing 23 thin pages)
- Internal PageRank flow to hub page: increased by consolidating 6 orphaned spoke pages
- Competitor title audit completed: 14 competing pages analysed
- New backlinks built: 0 Time to first ranking improvement: 38 days post-publication
2. The Site and the Opportunity

2.1 Site Context
The site is a travel content project covering European destinations, with a focus on Spain, France, and Portugal. At the time of this project, the Spain section had accumulated 60-plus individual destination articles published over three years with no coherent internal architecture. Pages were siloed. Internal linking was ad hoc. There was no hub page for any destination cluster — just a flat category archive that Google was crawling inefficiently and not associating with any particular topical authority.
The Costa Brava and Girona section had 11 individual beach and destination articles, each targeting a specific beach or town. Combined, they were generating 1,840 monthly organic sessions. The hub page did not exist. Google had no single page to associate with topical authority on ‘beaches near Girona’ or ‘Costa Brava beaches’ — the primary commercial queries for the destination.
| Metric | Status Before Hub Page Build |
| Articles in Girona / Costa Brava cluster | 11 individual beach and destination pages |
| Hub page | None |
| Monthly organic sessions to cluster | 1,840 |
| Page-1 rankings across cluster | 1 (single beach article, position 9) |
| Internal linking | None — fully siloed pages |
| Crawl budget waste | High — 23 thin pages consuming crawl allowance site-wide |
| Competitor hub pages for target queries | Yes — 3 large travel publishers with dedicated hub pages |
| Domain Authority | 28 |
2.2 Why Hub Pages Win in Travel
Travel search is dominated by geographic entity queries: not just ‘beach in Spain’ but ‘best beaches near Girona’, ‘Costa Brava beaches with parking’, ‘hidden beaches Girona province’. These queries have a clear geographic entity at their core — Girona, Costa Brava — and Google resolves them by looking for the page that most comprehensively addresses the entity and all of its sub-entities.
A hub page is the structural answer to this query pattern. It is not just a long article — it is a page that establishes the site’s authority on a geographic entity by covering the full landscape of related sub-entities (individual beaches, towns, access points, seasonal conditions) while linking out to dedicated spoke pages for users who want more depth on any single sub-entity.
The competing large travel publishers were all using this structure. Lonely Planet, Spain travel aggregators, and regional tourism sites each had a dedicated ‘beaches of the Costa Brava’ hub page that ranked for the primary cluster queries. My site had 11 individual beach articles with no hub. Google had nowhere to anchor topical authority for the cluster on my domain.
3. The Competitor Heading Audit
Before writing a single word of the hub page, I ran a competitor heading audit on the top 14 ranking pages for the primary target queries: ‘beaches near Girona’, ‘Costa Brava beaches’, ‘best beaches Costa Brava’, and ‘Girona beaches guide’. This is one of the most underused research techniques in travel SEO and one of the highest-leverage steps in hub page construction.

3.1 What a Competitor Heading Audit Is
A competitor heading audit extracts every H1, H2, and H3 from the top-ranking pages for your target queries and maps them across a matrix. The output answers three questions that no keyword tool can answer directly:
- What topics do all ranking pages cover? This is the minimum viable coverage — you cannot omit these without signalling incomplete topical authority.
- What topics do only some ranking pages cover? These are differentiation opportunities — covering them gives you breadth that competitors lack.
- What topics are missing from all ranking pages? These are the gaps where genuinely original content can earn rankings that the existing field is not competing for.
3.2 The Audit Process
Each of the 14 competing URLs was opened and its heading structure extracted manually — H1, H2, and H3 only, not body text. The headings were entered into a matrix with URLs as columns and heading topics as rows. A checkmark indicated that a given URL covered that topic in a heading.
The matrix revealed the following pattern for the Girona beaches cluster:
| Heading Topic / Section | Coverage Across 14 Competitors |
| Top beaches overview (general) | 14/14 — universal. Must include. |
| Beaches by accessibility (car, walk, public transport) | 11/14 — near-universal. Must include. |
| Family beaches vs secluded beaches | 10/14 — high coverage. Must include. |
| Beaches with facilities (toilets, parking) | 9/14 — high coverage. Include. |
| Best time to visit / seasonal advice | 8/14 — moderate coverage. Include. |
| Nearby towns and base locations | 7/14 — moderate coverage. Include. |
| Water quality and flag status | 5/14 — partial coverage. Differentiation opportunity. |
| Nudist beaches | 4/14 — partial coverage. Include for completeness. |
| Beaches suitable for snorkelling | 3/14 — low coverage. Gap opportunity. |
| Driving distances from Girona city | 2/14 — very low coverage. Strong gap opportunity. |
| Parking costs and availability by beach | 1/14 — almost no coverage. Strong gap opportunity. |
| Beach accessibility for limited mobility | 0/14 — complete gap. Original opportunity. |
The three gap opportunities at the bottom of the table — snorkelling suitability, driving distances from Girona, parking costs, and accessibility — became dedicated H2 sections in the hub page. These sections were not present in any competing page’s heading structure. They gave the hub page legitimate differentiation on queries that the competing pages were structurally incapable of ranking for.
3.3 Building the Hub Page Title from the Audit
The competitor heading audit also informed the hub page title — arguably the highest-leverage single element of the entire build. I use a keyword stacking methodology for hub page titles in geographic travel content: the title combines the primary entity, the primary modifier, and one secondary modifier that signals the page’s breadth without keyword stuffing.
The competing pages used these title structures:
- ‘Best Beaches in Costa Brava, Spain (2024 Guide)’
- ‘Costa Brava Beaches: Complete Guide’
- ‘The 15 Best Beaches Near Girona’
These titles are entity-clear but modifier-thin. They target one query intent (best beaches) without signalling coverage of the secondary intents the audit revealed: accessibility, family suitability, seasonal timing. My hub page title used a stacked structure:
THE HUB PAGE TITLE FORMULA
Primary entity + primary modifier + secondary modifier + year signal
Final title: ‘Beaches Near Girona: Best Costa Brava Beaches by Type, Season & Access (2025)’
Breaking it down:
- ‘Beaches near Girona’ — primary query, highest volume, entity-anchored
- ‘Best Costa Brava Beaches’ — secondary entity variant, captures alternate query phrasing
- ‘by Type, Season & Access’ — signals breadth of coverage, matches secondary intents from the audit
- ‘(2025)’ — freshness signal, improves CTR on date-sensitive travel queries
This title ranks for three distinct query intents rather than one. Competitors with single-modifier titles cannot match its coverage without rewriting.
4. Crawl Budget Discipline: The Hidden Lever
Crawl budget is rarely discussed in travel SEO content. It should be. A site that publishes 200 destination articles without a coherent architecture has a crawl budget problem — Googlebot is spending its allowance crawling pages that contribute little to the site’s indexation quality, leaving less budget for the pages that matter.
Before building the hub page, I ran a crawl budget audit across the entire Spain section of the site. What it revealed was a substantial drain on crawl efficiency from three sources.

4.1 What Was Draining Crawl Budget
| Crawl Waste Source | Pages Affected | Action Taken |
| Thin destination stubs | 14 pages under 400 words with no backlinks and zero GSC impressions in 12 months | Noindexed. Removed from sitemap. |
| Pagination archives | 6 category archive pages (/spain/page/2/, /spain/page/3/ etc.) with duplicate content | Noindexed. Canonical pointed to primary archive. |
| Tag pages | 18 auto-generated tag pages (e.g. /tag/beach/, /tag/spain/) with no unique content | Noindexed. Robots.txt updated to block crawl. |
| Near-duplicate beach stubs | 3 very short pages covering the same beach as a longer article (historical duplication) | 301 redirected to longer article. |
| Old draft posts accidentally published | 2 pages with placeholder content indexed | Deleted. 410 response. |
In total, 43 URLs were removed from the crawlable index — reducing the site’s crawlable footprint by 41% in the Spain section. The immediate effect was a Googlebot crawl rate increase on the remaining pages within three weeks, confirmed in the crawl stats report in Google Search Console. When you remove the noise, Google spends more time on the signal.
4.2 The Crawl Budget Rules I Follow
Over several travel content projects, I have developed a set of crawl budget rules that govern every site I work on. These are not theoretical — they come from observing crawl behaviour in GSC across sites with very different architectures.
- Rule 1 — Index only what earns its place: A page earns its place in the index by either generating impressions, holding a ranking, earning at least one backlink, or serving as an essential hub or navigation page. Any page that meets none of these criteria is a crawl budget drain. Noindex it.
- Rule 2 — Pagination is almost always crawl waste: Category archive pages beyond page 1 generate near-zero traffic and consume significant crawl budget. Noindex all pagination except page 1. If important articles only appear on page 4 of an archive, the site’s internal linking architecture needs fixing — not the pagination.
- Rule 3 — Tag pages are crawl budget enemies: Auto-generated tag pages with no unique content are among the most consistent sources of crawl waste on travel sites. Noindex all of them. If a tag aggregates genuinely useful content, give it a hand-crafted hub page instead.
- Rule 4 — Fix before you build: Do not build new hub pages on top of a crawl-inefficient architecture. Clean the crawl waste first. The hub page will index faster, accumulate authority sooner, and rank quicker when Googlebot is spending its budget efficiently.
- Rule 5 — Crawl budget is site-wide, not section-specific: Crawl waste in one section of a site affects the crawl allocation available to every other section. Cleaning up thin tag pages in the France section improves crawl efficiency for the Spain section hub pages.
5. Hub Page Construction

5.1 Architecture: Hub and Spokes
The hub-and-spoke architecture is simple in concept but requires careful execution in travel content. The hub page covers the destination at a breadth level — surveying the landscape of what exists, how to choose between options, and what different visitor types should prioritise. The spoke pages go deep on individual subjects — a single beach, a specific town, a particular activity.
The internal linking between hub and spokes is not decorative. It is the mechanism that consolidates topical authority on the hub page and distributes it to the spokes. Every spoke page links to the hub. The hub links to every spoke. Where spokes cover related topics, they link to each other. The result is a link equity network that amplifies the ranking potential of every page in the cluster.
| Page Type | Role and Content Specification |
| Hub page (1 page) | Beaches Near Girona: comprehensive overview covering all major beaches, seasonal advice, access by type, family vs secluded, snorkelling, mobility accessibility, driving distances, parking costs. 2,800 words. Links to all 11 spoke pages. |
| Spoke pages (11 pages) | Individual beach guides: Platja de Pals, Sa Riera, Aiguablava, Tamariu, Llafranc, Calella de Palafrugell, and 5 others. Each 1,000–1,400 words. Each links back to hub. Each links to 2–3 related spokes. |
| Category hub (1 page) | Spain travel category archive: links to Girona hub and to other Spanish destination hubs. Passes equity down from the broader site architecture. |
5.2 Hub Page Content Structure
The hub page structure was built directly from the competitor heading audit matrix. Every universal topic became a section. Every partial-coverage topic became a section. Every gap topic became a section with original research. The result was a page that covered everything the competitors covered — plus three sections no competing page had.
The final H2 structure of the hub page:
- The beaches of the Costa Brava near Girona: an overview
- Best beaches for families with children
- Best secluded and hidden beaches
- Beaches accessible without a car (public transport guide)
- Beaches with full facilities: parking, toilets, and cafes
- Best beaches for snorkelling and clear water (original section — gap)
- Driving distances from Girona city to each beach (original section — gap)
- Parking costs and availability: what to expect at each beach (original section — gap)
- Beaches accessible for limited mobility visitors (original section — complete gap)
- Best time to visit: seasonal conditions and crowd levels
- Nearby towns to use as a base
- Frequently asked questions about Costa Brava beaches near Girona
Each section closed with a ‘Read our full guide to [beach name]’ link to the relevant spoke page, or a ‘See all beaches accessible by public transport’ link to the relevant filtered spoke content. These editorial links from hub to spoke were the primary internal equity distribution mechanism.
5.3 Schema Implementation
The hub page received three schema types deployed as nested JSON-LD:
- Article schema: author, datePublished, dateModified, description, image
- FAQPage schema: the 8-question FAQ section at the bottom of the page, directly answering the PAA questions associated with the primary target queries
- ItemList schema: a structured list of the 11 beaches covered, with name, description, and URL for each — giving Google a machine-readable entity map of the hub page’s coverage
The ItemList schema is particularly powerful for travel hub pages. It explicitly tells Google’s Knowledge Graph: this page covers these entities, in this order, with these descriptions. It directly feeds the entity relationships that Google uses to evaluate topical authority on geographic destination queries.
6. The Spoke Page Linking Protocol

Existing spoke pages needed updating to participate in the hub architecture. The update protocol for each of the 11 beach articles was consistent:
- Add a ‘Part of the Girona Beaches Guide’ navigation link at the top of every spoke page, linking to the hub with exact-match anchor text: ‘beaches near Girona’
- Add a ‘You might also like’ section at the bottom linking to 2–3 related spoke pages (beaches in the same area, or beaches of the same type)
- Add a ‘Back to the full guide’ editorial link within the body text at the natural point where the hub page becomes relevant
- Update the spoke page title to include the hub entity: ‘Platja de Pals: Costa Brava Beach Guide’ rather than just ‘Platja de Pals Beach’
- Ensure each spoke page has its own Article schema with dateModified updated to the current date
THE ANCHOR TEXT DISCIPLINE THAT MATTERS
Every internal link from spoke to hub used one of two anchor text variants:
- ‘beaches near Girona’ — primary entity query
- ‘Costa Brava beaches guide’ — secondary entity variant
No variation. No generic ‘click here’ or ‘read more’. No over-optimised exact match without semantic variation. Two anchors, consistently applied across 11 spoke pages, sent a clear entity signal to Google: this hub page is the authority for these two query entities. Consistent anchor text in internal linking is one of the most underused ranking signals in travel SEO.
7. Results
7.1 Traffic Growth
| Period | Monthly Organic Sessions (Hub + Spoke Cluster) |
| Baseline (pre-hub) | 1,840 |
| Month 1 post-publication | 2,120 (+15%) |
| Month 2 | 3,180 (+73%) |
| Month 3 | 4,940 (+168%) |
| Month 4 | 5,820 (+216%) |
| Month 5 | 6,510 (+254%) |
| Month 6 | 6,926 (+276%) |
| Hub page alone at month 6 | 3,240 sessions (was 0 — page did not exist) |
| Spoke pages at month 6 | 3,686 (+100% vs baseline — lifted by hub link equity) |
Two things stand out in the data. First, the hub page’s own traffic at month six — 3,240 sessions — was entirely new. The page did not exist before the build. Second, the spoke pages also doubled in traffic, from a combined 1,840 to 3,686. The hub page did not cannibalise the spokes. It lifted them. This is the fundamental principle of hub-and-spoke architecture: a rising hub lifts all spokes.
7.2 Keyword Rankings
| Ranking Metric | Baseline vs Month 6 |
| Page-1 rankings across cluster | 1 → 14 |
| Hub page keywords (page 1) | 0 → 31 (page did not exist before) |
| Spoke page keywords (page 1) | 1 → 17 (lifted by hub link equity) |
| Featured snippet | 1 captured: ‘beaches near Girona’ (hub page) |
| ‘Beaches near Girona’ — position | Not ranking → Position 4 (month 6) |
| ‘Costa Brava beaches’ — position | Not ranking → Position 7 |
| ‘Best beaches near Girona’ | Not ranking → Position 3 |
| Gap opportunity keywords ranked | 6 (snorkelling, driving distances, parking, accessibility) |
The gap opportunity keywords — the sections no competing page had — delivered six additional page-1 rankings that no competitor was even positioned to capture. These were queries with lower volume but extremely high intent: someone searching ‘beaches near Girona with parking costs’ is significantly further along the planning journey than someone searching ‘Costa Brava beaches’. The gap sections converted better than the primary keyword sections as a result.
7.3 Crawl Efficiency Gains
| Crawl Metric | Before and After Crawl Budget Audit |
| Crawlable pages in Spain section | 104 → 61 (−41%) |
| Average daily Googlebot crawl (GSC) | 38 pages/day → 52 pages/day (+37%) |
| Hub page indexed | Day 4 post-publication |
| All 11 spoke pages refreshed index | Within 9 days of spoke updates |
| Time to first ranking signal | 38 days post-publication |
The crawl rate increase after the crawl budget audit is the most technically significant number in this project. When you remove 43 crawlable-but-worthless URLs from the index, Googlebot has the same crawl allowance but 41% fewer pages to crawl — which means it returns to the remaining pages more frequently. The hub page was indexed on day four. Before the crawl budget work, indexation of new pages on this site typically took two to three weeks.
8. Key Lessons

Lesson 1: The competitor heading audit is the highest-leverage pre-writing step
Most travel content is written from keyword research alone — find the target keyword, write the article. The competitor heading audit adds a layer of intelligence that keyword tools cannot provide: a structural map of what all ranking pages cover, where gaps exist, and what differentiation opportunities no competitor has taken. Forty-five minutes of heading extraction before writing a hub page saves weeks of wondering why it is not ranking. It should be a non-negotiable first step on every hub page build.
Lesson 2: Clean crawl waste before you build
Building a hub page on top of a crawl-inefficient site is building on sand. The hub page will index slower, accumulate authority slower, and rank later than it would on a clean site. Crawl budget work is unsexy and does not generate an immediate traffic win — but it directly determines the speed at which everything else works. In this project, the hub page indexed in four days because the crawl had been cleaned first. That is not coincidence.
Lesson 3: Hub pages do not cannibalise spokes — they lift them
The most common objection to building a hub page over existing spoke content is that the hub will compete with and cannibalise the spoke pages. This project — and every hub-and-spoke build I have run — shows the opposite. The hub page creates equity that flows to the spokes via internal links. Spoke page traffic doubled in six months. The spoke pages that were most consistently linked from the hub saw the largest individual traffic gains. The hub is an amplifier, not a competitor.
Lesson 4: Gap sections earn rankings that competitors cannot compete for without rewriting
The three gap sections — snorkelling beaches, driving distances, parking costs — produced six page-1 rankings. Not a single competing page ranks for those specific queries because no competing page has those sections. Rankings built on genuine content gaps are among the most durable in travel SEO because competitors cannot capture them without substantially rebuilding their pages. A structural advantage is harder to erode than a keyword advantage.
Lesson 5: Anchor text consistency in internal linking is a ranking signal
Eleven spoke pages all linking to the hub with one of two consistent anchor text variants sent Google an unmistakable entity signal. Most sites link internally with whatever language happens to appear in the surrounding text. Deliberate, consistent anchor text selection in internal links — applying the same one or two phrase variants across every page in the cluster — is one of the simplest and most underused ranking signals available to travel content sites.
Lesson 6: ItemList schema turns a hub page into a Knowledge Graph entity
Deploying ItemList schema on the hub page gave Google a machine-readable list of every sub-entity the page covers — each beach as a named, described, linked entity. This directly feeds the entity relationship mapping that Google uses to evaluate topical authority. For travel hub pages covering geographic sub-entities, ItemList schema is the single most impactful structured data type available. Almost no travel content sites use it on their hub pages.
9. How to Build a Travel Hub Page That Ranks
Phase 1: Crawl Audit (Before Writing Anything)
- Crawl the site section with Screaming Frog — export all URLs with word count, indexability status, and inlink count
- In GSC, filter to the site section and sort by impressions — identify pages with zero impressions in 12 months
- Noindex thin stubs, tag pages, and pagination beyond page 1
- 301 redirect near-duplicate pages to the stronger version
- Update the XML sitemap and request recrawl in GSC
- Wait for crawl rate to stabilise before publishing the hub page
Phase 2: Competitor Heading Audit
- Identify the top 10–14 ranking pages for your primary hub page query
- Extract H1, H2, H3 from each page into a spreadsheet matrix
- Mark coverage: which pages cover which heading topics
- Identify universals (must-include), partials (differentiation), and gaps (original opportunity)
- Build your hub page H2 structure from this matrix
- Build your hub page title using the keyword stacking formula: primary entity + primary modifier + secondary modifier + year signa
Phase 3: Hub Page Build
- Write the hub at breadth, not depth — survey the landscape, then link out to spokes for depth
- Open with a clear, specific answer to the primary query in the first 60 words
- Include every universal heading topic from the competitor audit
- Include every partial topic — this is minimum viable coverage
- Include at least 2–3 gap sections with original research or data not present on any competing page
- Close each hub section with an editorial link to the relevant spoke page
- Deploy Article, FAQPage, and ItemList schema in JSON-LD
Phase 4: Spoke Page Updates
- Add a hub navigation link at the top of every spoke page (consistent anchor text)
- Add cross-links to 2–3 related spokes within the body text
- Add a ‘back to full guide’ link within each spoke body
- Update spoke page titles to include the hub entity
- Update dateModified and request recrawl for all spokes
Related Case Studies:










