Max Heart Rate (Age Based)
Karvonen (Includes Resting HR)
Zone
Target Range (BPM)
Focus
Understanding Heart Rate Zones for Cycling
Training with heart rate zones is the most effective way for cyclists to improve endurance, speed, and recovery. By monitoring your Beats Per Minute (BPM), you can ensure you are riding at the correct intensity for your specific goals—whether that's burning fat on a long base ride or increasing your power output for hill climbs.
The Methods Explained
Our calculator uses two primary methods to determine your cycling zones:
Max Heart Rate Method: This uses the standard formula (220 – Age) to estimate your maximum capacity. It is a great starting point for beginners.
Karvonen Method: This is more advanced as it factors in your Heart Rate Reserve (HRR). By including your resting heart rate, it provides a more personalized scale that reflects your current cardiovascular fitness levels.
What Each Cycling Zone Means
Zone 1: Active Recovery (50-60%) Used for recovery rides after a hard race or interval session. It promotes blood flow without adding fatigue.
Zone 2: Endurance (60-70%) The "Base" zone. This is where you build aerobic capacity and train your body to burn fat efficiently as a fuel source. Most of your weekly mileage should be here.
Zone 3: Tempo (70-80%) A moderate intensity where talking becomes difficult. It builds aerobic power and is great for sustaining speed over long distances.
Zone 4: Lactate Threshold (80-90%) The "Sweet Spot" and Threshold zone. This improves your ability to clear lactic acid and sustain high-power efforts for longer durations.
Zone 5: VO2 Max (90-100%) Maximum effort. Used for short intervals and sprinting. This increases your top-end speed and aerobic ceiling.
Example Calculation
If a 40-year-old cyclist has a resting heart rate of 60 BPM and uses the Karvonen method:
Estimated Max HR: 220 – 40 = 180 BPM
Heart Rate Reserve (HRR): 180 – 60 = 120 BPM
Zone 2 Lower Limit: (120 x 0.60) + 60 = 132 BPM
Zone 2 Upper Limit: (120 x 0.70) + 60 = 144 BPM
function calculateCyclingZones() {
var age = document.getElementById('userAge').value;
var rhr = document.getElementById('restingHR').value;
var method = document.getElementById('calcMethod').value;
var resultsTable = document.getElementById('hrResults');
var resultsBody = document.getElementById('resultsBody');
if (age === "" || age <= 0) {
alert("Please enter a valid age.");
return;
}
if (method === "karvonen" && (rhr === "" || rhr <= 0)) {
alert("Please enter your Resting Heart Rate for the Karvonen method.");
return;
}
var mhr = 220 – age;
var resting = parseFloat(rhr) || 0;
var hrr = mhr – resting;
var zones = [
{ name: "Zone 1: Recovery", min: 0.50, max: 0.60, focus: "Recovery & Blood Flow", class: "zone-1" },
{ name: "Zone 2: Endurance", min: 0.60, max: 0.70, focus: "Aerobic Base & Fat Burn", class: "zone-2" },
{ name: "Zone 3: Tempo", min: 0.70, max: 0.80, focus: "Aerobic Power", class: "zone-3" },
{ name: "Zone 4: Threshold", min: 0.80, max: 0.90, focus: "Lactate Threshold", class: "zone-4" },
{ name: "Zone 5: VO2 Max", min: 0.90, max: 1.00, focus: "Max Speed & Power", class: "zone-5" }
];
var html = "";
for (var i = 0; i < zones.length; i++) {
var lower, upper;
if (method === "karvonen") {
lower = Math.round((hrr * zones[i].min) + resting);
upper = Math.round((hrr * zones[i].max) + resting);
} else {
lower = Math.round(mhr * zones[i].min);
upper = Math.round(mhr * zones[i].max);
}
html += "