How to Calculate Heart Rate Zones for Running

Heart Rate Zone Calculator for Running

Optimize your training intensity using the Karvonen Formula

If you have performed a stress test, enter your actual maximum HR here.

Your Personalized Training Zones

Zone Intensity Range (BPM) Primary Benefit

Note: Calculations are based on Heart Rate Reserve (HRR) using the Karvonen Formula.

How to Calculate Heart Rate Zones for Running

Understanding your heart rate zones is the most effective way to ensure your running sessions are actually achieving their intended purpose. Whether you are training for your first 5K or aiming for a Boston Marathon qualifying time, training at the correct intensity prevents overtraining and optimizes aerobic development.

The Karvonen Formula Explained

This calculator uses the Karvonen Formula, which is widely considered more accurate than simply taking a percentage of your maximum heart rate. It incorporates your Heart Rate Reserve (HRR), which is the difference between your maximum heart rate and your resting heart rate. This accounts for your current fitness level.

Target HR = ((Max HR − Resting HR) × % Intensity) + Resting HR

Detailed Breakdown of Running Zones

Zone 1: Very Light (50% – 60% HRR)

Best for recovery and warming up. This level feels extremely easy and you should be able to hold a full conversation without any effort.

Zone 2: Light (60% – 70% HRR)

The "Base Building" zone. Most of your weekly mileage should be in this zone. It improves fat metabolism and builds mitochondrial density. This is "Conversational Pace."

Zone 3: Moderate (70% – 80% HRR)

Often called "Aerobic Power" or "Tempo." This improves blood circulation and makes your heart more efficient. You can still speak, but only in short sentences.

Zone 4: Hard (80% – 90% HRR)

Threshold training. This is where your body learns to handle lactic acid more effectively. It feels "comfortably hard" and is essential for improving speed endurance.

Zone 5: Maximum (90% – 100% HRR)

VO2 Max and sprint intervals. This is all-out effort. It improves maximum speed and anaerobic capacity but should only be performed in short bursts.

Running Performance Example

A 40-year-old runner with a resting heart rate of 60 bpm would have an estimated Max HR of 180. Their Heart Rate Reserve (HRR) is 120 bpm (180 – 60). To find the bottom of Zone 2 (60%):

  • 120 (HRR) x 0.60 = 72
  • 72 + 60 (Resting HR) = 132 BPM
function calculateHRZones() { var age = parseFloat(document.getElementById('age').value); var rhr = parseFloat(document.getElementById('rhr').value); var mhrOverride = parseFloat(document.getElementById('mhr_override').value); var resultsDiv = document.getElementById('hr-results'); var tableBody = document.getElementById('zones-body'); if (!age || age 110) { alert("Please enter a valid age."); return; } if (!rhr || rhr 150) { alert("Please enter a valid resting heart rate."); return; } var mhr = mhrOverride ? mhrOverride : (220 – age); var hrr = mhr – rhr; if (hrr <= 0) { alert("Max Heart Rate must be higher than Resting Heart Rate. Please check your inputs."); return; } var zones = [ { name: "Zone 1 (Recovery)", intensity: "50-60%", low: 0.50, high: 0.60, benefit: "Recovery & Warm-up", color: "#e8f5e9" }, { name: "Zone 2 (Aerobic)", intensity: "60-70%", low: 0.60, high: 0.70, benefit: "Endurance & Fat Burn", color: "#fffde7" }, { name: "Zone 3 (Tempo)", intensity: "70-80%", low: 0.70, high: 0.80, benefit: "Aerobic Capacity", color: "#fff3e0" }, { name: "Zone 4 (Threshold)", intensity: "80-90%", low: 0.80, high: 0.90, benefit: "Lactate Threshold", color: "#ffebee" }, { name: "Zone 5 (VO2 Max)", intensity: "90-100%", low: 0.90, high: 1.00, benefit: "Sprint & Peak Power", color: "#f3e5f5" } ]; var html = ""; for (var i = 0; i < zones.length; i++) { var lowBpm = Math.round((hrr * zones[i].low) + rhr); var highBpm = Math.round((hrr * zones[i].high) + rhr); html += ""; html += "" + zones[i].name + ""; html += "" + zones[i].intensity + ""; html += "" + lowBpm + " – " + highBpm + " BPM"; html += "" + zones[i].benefit + ""; html += ""; } tableBody.innerHTML = html; resultsDiv.style.display = "block"; resultsDiv.scrollIntoView({ behavior: 'smooth', block: 'nearest' }); }

Leave a Comment