Time: 15-30 minutes Prerequisites: Provider website access for data, pricing, and SVG icons
src/data/providers/{slug}.jsonsrc/content/pages/vpn/{slug}.mdpublic/images/providers/node scripts/translate-provider-json.mjs --execute --slug {slug}npm run buildSpeedLab, ProviderGrid, and LogoScroll update automatically.
File: src/data/providers/{slug}.json
The slug is the URL-safe name: nordvpn, expressvpn, ipvanish.
{
"slug": "https://www.vpn.com/vpn/{slug}/",
"tagline": "One-line description",
"website": "https://provider.com",
"offer_link_1": "/out?partner={slug}",
"servers": "5,000+",
"countries": "60+",
"users": 0,
"devices": 5,
"guarantee": "30-day money-back guarantee",
"plan_features": ["Kill switch included", "24/7 support"],
"logo_svg_brand": "/images/providers/{slug}-logo-brand.svg",
"logo_svg_dynamic": "/images/providers/{slug}-logo-neutral.svg",
"icon_svg_brand": "/images/providers/{slug}-icon-brand.svg",
"icon_svg_dynamic": "/images/providers/{slug}-icon-neutral.svg",
"speedlab": {
"rank": 11,
"throughput": "Not tested",
"latency": "N/A",
"packet_loss": "N/A",
"stability": "N/A",
"regular_price": "$10.00/mo",
"best_price": "$3.00/mo",
"best_price_duration": "2-year plan"
},
"rating": {
"overall": 75,
"stars": 3.8,
"categories": [
{
"id": "trust",
"label": "Trust & Value",
"score": 20,
"max": 30,
"criteria": [
{ "label": "User Sat.", "score": 7, "max": 10, "value": "3.8/5.0", "value_source": "" },
{ "label": "Value", "score": 6, "max": 10, "value": "$3.00/mo", "value_source": "" },
{ "label": "Money-Back", "score": 4, "max": 5, "value": "30 days", "value_source": "" },
{ "label": "Support", "score": 3, "max": 5, "value": "Email", "value_source": "" }
]
},
{
"id": "performance",
"label": "VPN Performance",
"score": 55,
"max": 70,
"criteria": [
{ "label": "Speed", "score": 10, "max": 15, "value": "500 Mbps", "value_source": "speedlab" },
{ "label": "Servers", "score": 8, "max": 10, "value": "5,000+", "value_source": "" },
{ "label": "Devices", "score": 8, "max": 10, "value": "5", "value_source": "" },
{ "label": "Connections", "score": 8, "max": 10, "value": "5", "value_source": "" },
{ "label": "Protocol", "score": 8, "max": 10, "value": "WireGuard", "value_source": "" },
{ "label": "Streaming", "score": 7, "max": 10, "value": "6+ Services", "value_source": "" },
{ "label": "Security", "score": 4, "max": 5, "value": "Audited", "value_source": "" }
]
}
]
},
"schema": {
"name": "Provider Name",
"applicationCategory": "VPN",
"operatingSystem": "Windows, macOS, iOS, Android, Linux",
"offers": {
"price": "36.00",
"priceCurrency": "USD",
"priceValidUntil": "2026-12-31",
"@type": "Offer"
},
"review": {
"reviewRating": { "ratingValue": "3.8", "bestRating": "5", "worstRating": "1", "@type": "Rating" },
"datePublished": "2026-04-29",
"dateModified": "2026-04-29",
"reviewBody": "Short review summary used in JSON-LD.",
"author": { "@type": "Organization", "name": "VPN.com", "url": "https://www.vpn.com" },
"publisher": { "@type": "Organization", "name": "VPN.com", "url": "https://www.vpn.com" },
"@type": "Review"
},
"@context": "https://schema.org",
"@type": "SoftwareApplication"
},
"plans": [
{
"name": "Standard",
"duration": "VPN only",
"good_for": "Users who need basic VPN protection",
"link": "https://provider.com",
"pricing": [
{ "period": "Monthly", "price": "$10.00" },
{ "period": "1-year", "price": "$48.00", "discount": "60%" },
{ "period": "2-year", "price": "$72.00", "discount": "70%" }
],
"features": ["All servers included", "Kill switch", "24/7 support"]
}
],
"meta_description": "Provider Name review: tested for speed, security, and streaming.",
"pricing_intro": "Provider Name offers monthly and annual plans.",
"verdict_top_tier": "Provider Name delivers strong performance for everyday browsing, streaming, and privacy.",
"verdict_solid": "Solid choice for users who prioritize value and simplicity.",
"review_sections": [
{
"heading": "Security & Privacy",
"content": "<h4><strong>Encryption & Protocols</strong></h4><ul><li><strong>Encryption:</strong> AES-256</li><li><strong>Protocols:</strong> WireGuard, OpenVPN</li></ul>"
},
{
"heading": "Streaming Performance",
"content": "<h4><strong>Platforms Unblocked</strong></h4><ul><li>Netflix</li><li>Amazon Prime Video</li></ul>"
},
{
"heading": "Ease of Use",
"content": "<h4><strong>Setup & Interface</strong></h4><p>Simple one-click connect. Available on all major platforms.</p>"
}
]
}
| Field | Description |
|---|---|
schema.name | Display name (e.g. "NordVPN") |
tagline | One-line description shown in hero |
website | Provider's official URL |
offer_link_1 | Affiliate link via /out?partner={slug} |
servers | Count with suffix ("8,900+") |
countries | Count with suffix ("129+") |
devices | Simultaneous connection limit |
guarantee | Money-back guarantee text |
plan_features | Features shared across all plans |
speedlab | Speed data. Use "Not tested" if untested |
rating | Overall (0-100), stars (0-5), 2 categories |
plans | At least 1 plan with pricing tiers |
review_sections | 3 sections: Security, Streaming, Ease of Use |
schema | JSON-LD structured data |
verdict_top_tier | Editorial verdict sentence |
meta_description | SEO meta description |
Overall = Trust & Value (max 30) + VPN Performance (max 70)
| Criterion | Max | Scoring |
|---|---|---|
| User Satisfaction | 10 | Aggregate review scores |
| Value | 10 | Price-to-feature vs competitors |
| Money-Back | 5 | 30 days = 4-5, 7 days = 2-3, none = 0 |
| Support | 5 | 24/7 live = 5, email = 3, none = 1 |
| Speed | 15 | 700+ Mbps = 15, 500+ = 10, 300+ = 7 |
| Servers | 10 | 8000+ = 10, 3000+ = 8, 1000+ = 6 |
| Devices | 10 | Unlimited = 10, 10 = 10, 5 = 8 |
| Connections | 10 | Protocol flexibility and reliability |
| Protocol | 10 | WireGuard = 10, OpenVPN = 7, proprietary = 5 |
| Streaming | 10 | 8+ platforms = 8-10, 4+ = 6, 1-3 = 4 |
| Security | 5 | Audited = 5, no-logs claimed = 3, unknown = 1 |
File: src/content/pages/vpn/{slug}.md
---
title: "Provider Name Review: Speed, Pricing & Features"
description: "Read our Provider Name review with speed tests, security analysis, and pricing."
date: 2026-04-29
updated: 2026-04-29
template: provider
parent: vpn
focusKeyword: "provider name review"
draft: false
---
**"VPN.com's editors select and review products independently. If you buy through our affiliate links, we may earn commissions, which support our testing."**
## Provider Name History
## Provider Name Features And Benefits
## Provider Name Plans And Pricing
## Is Provider Name Worth It?
## Final Verdict
template: provider — triggers the Provider layoutparent: vpn — places it under the VPN hub.md filename must match the JSON slug exactlyPlace 4 files in public/images/providers/:
| File | Usage |
|---|---|
{slug}-icon-brand.svg | Small icon, brand colors |
{slug}-icon-neutral.svg | Small icon, neutral/gray (dark mode) |
{slug}-logo-brand.svg | Full logo, brand colors (logo scroll) |
{slug}-logo-neutral.svg | Full logo, neutral/gray (dark mode) |
Requirements: SVG only, viewBox set, no embedded rasters, clean markup (no editor metadata). Source from provider's press kit or website.
npm run build
Auto-updates: SpeedLab table, ProviderGrid, LogoScroll, provider page at /vpn/{slug}/, sitemap.
Verify: provider page renders, Speed Lab shows the provider, logo appears in scroll.
node scripts/translate-provider-json.mjs --execute --slug {slug}
Creates 9 JSON files at src/data/providers/i18n/{lang}/{slug}.json. Missing fields fall back to English. Without overlays, translated provider pages display English provider text.
bash scripts/deploy.sh
src/data/providers.ts — auto-discovers all JSON filessrc/components/SpeedLab.astro, ProviderGrid.astro, LogoScroll.astro — all read from provider datasrc/pages/[...slug].astro — catch-all routeOnly edit src/components/pages/HomePage.astro if changing the hardcoded top-3 provider slugs.
node scripts/fetch-provider.mjs --slug ipvanish --url https://ipvanish.com
Crawls the provider's website and generates a draft JSON. Review before committing.