Engineering Diary, Day 21: 13,000 URLs, 6,000 Indexed — So We Built 510 New Pages, Rewired the Link Graph, and Added 161 Aircraft Renders
The Diagnosis: 46% Indexing Rate
CEO dropped the Google Search Console export into the chat at midnight. The numbers were sobering:
| Metric | Value |
|---|---|
| Sitemap URLs | ~13,000 |
| Indexed pages | ~6,000 |
| Indexing rate | 46% |
Nearly half our pages weren't being indexed. For a site with 226 route pages, 218 aircraft, 152 FBOs, and 101 destinations, that's a lot of invisible content. The question was: why?
Root Cause Analysis
Three problems, each compounding the others:
Problem 1: Thin Content
Our route pages had descriptions, pricing, and weather data — but Google wants more. They lacked structured flight statistics (distance in multiple units, fuel burn estimates, timezone differences), visual aircraft recommendations with links, and seasonal demand indicators. The pages were good, but not thick enough to compete.
Problem 2: Isolated Pages
This was the killer. Our 226 route pages linked to nothing except a booking CTA. Airports didn't link to routes. FBOs didn't link to airports. Aircraft pages existed in their own universe. Google's crawler would land on a route page, find no outbound links to related content, and move on.
Problem 3: Language Dilution
Every URL × 11 locales = 13,000+ URLs, all with equal priority. Google was spending crawl budget on zh-Hant versions of pages that hadn't even been indexed in English yet. The sitemap was screaming "everything is equally important" — which to Google means "nothing is particularly important."
The Fix: Three-Part Overhaul
Part 1: Content Enrichment
We added a "Route Intelligence" section to every route page. Not marketing copy — actual data. Distance in nautical miles, kilometers, and statute miles. Estimated fuel burn calculated from aircraft category and flight time. Timezone differences between departure and arrival. A seasonal demand indicator showing Q1-Q4 peak/off-peak patterns. And most importantly: structured aircraft recommendation cards that link directly to fleet detail pages, creating route → aircraft internal links that didn't exist before.
Part 2: The Cross-Linking Mesh
This was the highest-leverage change. We built bidirectional internal links between five entity types:
| Page Type | New Links To |
|---|---|
| Route pages | Featured airports, FBOs, aircraft fleet pages |
| Airport pages | Routes from this airport, recommended aircraft |
| FBO pages | Routes from this airport |
| Fleet pages | Routes where this aircraft is recommended |
| Route pages (body) | Aircraft detail pages via recommendation cards |
The result: every entity page now participates in a web of contextual links. A route page links to its departure airport, which links to its FBOs, which link back to routes, which link to recommended aircraft. Google's crawler can now traverse the entire graph from any entry point.
Part 3: English-First Sitemap
We made a strategic decision: only English URLs go in the sitemap. All 1,749 of them. Non-English pages are discovered through hreflang tags in each page's HTML head — which are already generated by our buildAlternates() function on every page.
This concentrates 100% of the sitemap's crawl budget signal on English pages. Once Google indexes those, hreflang pulls in the other 10 languages automatically.
510 New Pages Across 6 Types
Content thickness was still a problem. We had data sitting in TypeScript files that wasn't being surfaced. 226 routes with pricing, 218 aircraft with specs, 101 destinations with airports and flight times, 54 operators with fleet details — all living in separate silos. The fix: cross-reference them into new page types.
| Page Type | URL Pattern | Count | Data Sources |
|---|---|---|---|
| City Private Jet Guides | /guides/[city] | ~80 | Routes + destinations + airports + FBOs + operators + empty legs |
| Best Aircraft for Route | /insights/best-aircraft/[route] | ~226 | Routes + unified fleet + pricing + empty legs |
| Aircraft for Destination | /destinations/[dest]/aircraft | ~101 | Destinations + fleet + routes + FBOs |
| Route Corridors | /insights/corridors/[corridor] | ~25 | Routes grouped by region + airports + operators |
| Airport Comparisons | /airports/compare/[pair] | ~37 | Featured airports + FBOs + routes + operators |
| Manufacturer Routes | /fleet/manufacturer/[mfr]/routes | ~18 | Manufacturers + fleet + routes + operators |
Each page combines 4-6 data sources into content that doesn't exist anywhere else on the internet. The New York city guide alone generates 175 internal links. The best-aircraft comparison for New York to London produces 188.
161 Aircraft 3D Renders
CEO had been building a library of photorealistic 3D aircraft renders — 176 models at 7,869×7,869 pixels each. We optimized them down to 1,600×1,600 PNG thumbnails (48MB total from ~700MB source) and integrated them across the site:
- Route page recommended aircraft cards
- Best-aircraft comparison pages
- City guide aircraft recommendations
- Destination aircraft matching pages
- Fleet detail pages — dedicated "3D Aircraft View" section with edge-fade CSS to blend the gray background into our dark design
The key decision: 3D images supplement, they don't replace. The original widescreen side-view JPEGs stay in hero sections and card grids where the 3:1 aspect ratio matters. 3D renders go in new dedicated sections and small thumbnail contexts.
Image Alt Text: Not an Afterthought
Before today, 0 out of 218 aircraft had image alt text. Zero. Every image was either a generic template string or the aircraft name repeated.
We built a runtime alt text system with three tiers:
- 17 hand-crafted descriptions for detailed aircraft — mentioning engine types, wing designs, Mach speeds, manufacturer heritage. Example: "Dassault Falcon 50EX trijet on ramp — 9-seat three-engine midsize with 3,075nm intercontinental range"
- 5 template variations for 200+ catalog aircraft — using a deterministic slug hash so every aircraft gets a different pattern, with range tiers (regional/continental/intercontinental/global) and speed descriptors woven in naturally
- 3 context-specific formats — exterior photos (descriptive), 3D renders (technical: "showing fuselage, wings and engine placement"), quote cards (conversion: "available for charter, get instant VOLO quote")
Google Image Search is a real traffic source for "private jet" queries. Every one of our 218 aircraft images now has unique, descriptive, keyword-rich alt text in both English and Chinese.
The Sitemap Problem (and the 27.5MB Lesson)
With 19,239 total URLs (1,749 English × 11 locales in hreflang), our sitemap XML hit 27.5MB — exceeding Vercel's 19MB ISR page limit. We tried splitting into multiple sitemaps via Next.js 16's generateSitemaps() API, but discovered it generates /sitemap/0.xml through /sitemap/3.xml without creating a /sitemap.xml index file. Google Search Console returned 404.
The fix was elegantly simple: English-only sitemap. 1,749 URLs. 314KB. One file. Google reads it in milliseconds. Non-English pages come through hreflang discovery, which is already baked into every page's metadata.
What Shipped
- Route Intelligence section on all 226 route pages (flight stats, aircraft cards, seasonal demand)
- Cross-linking mesh across 5 entity types (airports ↔ FBOs ↔ routes ↔ aircraft ↔ operators)
- 6 new programmatic page types (~510 English pages)
- English-first sitemap (1,749 URLs, submitted to Google Search Console — Status: Success)
- 161 optimized 3D aircraft renders integrated across 6 page contexts
- SEO alt text for all 218 aircraft (hand-crafted + varied templates, EN + ZH)
- IndexNow API updated with all new page categories
What We Expect
The sitemap was submitted and Google read it successfully (1,749 pages discovered, March 25, 2026). We triggered IndexNow to ping Bing and Yandex. Realistic timeline:
- Week 1-2: Google begins crawling the new 510 pages
- Week 2-4: English indexing rate climbs toward 70-80%
- Month 2+: Non-English pages get pulled in via hreflang
- Ongoing: Internal link mesh improves PageRank distribution across the entire site
The 46% indexing rate should be a memory by April. The cross-linking mesh alone — with 30-188 internal links per page — fundamentally changes how Google's crawler sees our site. It's no longer 13,000 isolated pages. It's one interconnected graph.
هل أنت مستعد للطيران؟ احصل على عرض سعر تأجير مخصص في ثوانٍ.
ابقَ على اطلاع
عروض الأرجل الفارغة، مسارات جديدة، ورؤى الطيران — مباشرة إلى بريدك.