A modern visualization of how Wise creates millions of interconnected currency conversion pages
This visualization demonstrates how Wise creates pages for every currency pair combination.
| USD | EUR | GBP | JPY | AUD | CAD | INR | CHF | |
|---|---|---|---|---|---|---|---|---|
| USD | N/A | USD/EUR | USD/GBP | USD/JPY | USD/AUD | USD/CAD | USD/INR | USD/CHF |
| EUR | EUR/USD | N/A | EUR/GBP | EUR/JPY | EUR/AUD | EUR/CAD | EUR/INR | EUR/CHF |
| GBP | GBP/USD | GBP/EUR | N/A | GBP/JPY | GBP/AUD | GBP/CAD | GBP/INR | GBP/CHF |
| JPY | JPY/USD | JPY/EUR | JPY/GBP | N/A | JPY/AUD | JPY/CAD | JPY/INR | JPY/CHF |
| AUD | AUD/USD | AUD/EUR | AUD/GBP | AUD/JPY | N/A | AUD/CAD | AUD/INR | AUD/CHF |
28,900
~170 currencies × ~170 currencies
1.1+ Million
28,900 pairs × 40+ locales
8.4+ Million
Including amount variations
Billions
50-100+ links per page
This diagram shows how Wise structures its internal linking system hierarchically.
Each page follows a consistent URL pattern:
/{locale}/currency-converter/{source}-to-{target}-rate
URL parameters create more variations:
?amount=1000&period=30days
• Top-down navigation hierarchy
• Horizontal linking between related pairs
• Cross-locale linking for international SEO
• Comprehensive site architecture
• No orphaned pages
• Proper internationalization with hreflang
• Crawlable link structure
This visualization shows how currency pages are interconnected, focusing on USD as the central currency.
• ● Currency nodes (large)
• ● Locale nodes (small)
• Solid lines: Direct connections
• Dashed lines: Secondary connections
• Click any currency to make it the central node
• Click any locale to view that country's version
• This visualization shows 8 currencies
• Wise supports ~170 currencies
• The full network has millions of nodes
This diagram shows how Wise strategically places links within each currency converter page.
• Primary navigation links
• Currency pair direct links
• Related currency links
• Amount variation links
• 50-100+ internal links per page
• Each link follows consistent patterns
• Links prioritized by relevance
• High-priority links above the fold
• Related currencies grouped together
• Contextual links near relevant content
• Proper anchor text for context
• Appropriate hreflang attributes
• Clean URL structure
• No extraneous parameters
How Wise implements its massive internal linking structure programmatically.
// Example of how Wise might generate internal links programmatically
function generateCurrencyLinks(sourceCurrency, targetCurrency, locale) {
// The core data for link generation
const topCurrencies = ['USD', 'EUR', 'GBP', 'JPY', 'AUD', 'CAD', 'INR', 'CHF'];
const amounts = [1, 5, 10, 20, 50, 100, 250, 500, 1000, 2000, 5000, 10000];
const locales = ['us', 'gb', 'eu', 'jp', 'in', 'au', 'ca', ...]; // 40+ locales
// Collection to store generated links
const links = [];
// 1. Direct currency pair link
links.push(`/${locale}/currency-converter/${sourceCurrency.toLowerCase()}-to-${targetCurrency.toLowerCase()}-rate`);
// 2. Reverse pair link
links.push(`/${locale}/currency-converter/${targetCurrency.toLowerCase()}-to-${sourceCurrency.toLowerCase()}-rate`);
// 3. Links to source currency paired with other top currencies
topCurrencies.forEach(currency => {
if (currency !== sourceCurrency && currency !== targetCurrency) {
links.push(`/${locale}/currency-converter/${sourceCurrency.toLowerCase()}-to-${currency.toLowerCase()}-rate`);
}
});
// 4. Links to target currency paired with other top currencies
topCurrencies.forEach(currency => {
if (currency !== sourceCurrency && currency !== targetCurrency) {
links.push(`/${locale}/currency-converter/${targetCurrency.toLowerCase()}-to-${currency.toLowerCase()}-rate`);
}
});
// 5. Amount variation links
amounts.forEach(amount => {
links.push(`/${locale}/currency-converter/${sourceCurrency.toLowerCase()}-to-${targetCurrency.toLowerCase()}-rate?amount=${amount}`);
});
// 6. Links to same pair in other locales
locales.forEach(otherLocale => {
if (otherLocale !== locale) {
links.push(`/${otherLocale}/currency-converter/${sourceCurrency.toLowerCase()}-to-${targetCurrency.toLowerCase()}-rate`);
}
});
return links;
}
// This function would generate dozens of links for a single currency pair
// When applied across 170+ currencies, 40+ locales, and multiple amount variations,
// it creates millions of interconnected pages
| code | name | is_major |
|---|---|---|
| USD | US Dollar | true |
| EUR | Euro | true |
| GBP | British Pound | true |
| code | name | language |
|---|---|---|
| us | United States | en-US |
| gb | United Kingdom | en-GB |
| fr | France | fr |
| from_currency | to_currency | rate | last_updated |
|---|---|---|---|
| USD | EUR | 0.922 | 2025-03-10 07:00:00 |
| GBP | USD | 1.292 | 2025-03-10 07:00:00 |
• Single template system
• Database-driven content
• RESTful API-based exchange rates
• CDN cacheable pages
• Aggressive caching
• Template-level optimization
• Link generation batching
• Lazy loading for secondary content
• Programmatic link creation
• Template variables for context
• Database-driven priorities
• JavaScript-enhanced interlinking
• Canonical URLs
• XML sitemaps
• hreflang annotations
• Proper 301 redirects
The most important insights about Wise's internal linking architecture