91³Ô¹ÏÍø

Watch CBS News

Boston Marathon 2026 weather forecast better for runners than spectators. Map shows conditions along the route.

The 130th Boston Marathon will be run on Monday, April 20 and the weather forecast for the 2026 race is decidedly better for runners than spectators.

We have literally seen and felt it all when it comes to the weather on Marathon Monday. We've had driving rain, frigid temperatures, sweltering heat and snow squalls. Here's a look at some of that history.

history-copy.jpg
WBZ-TV graphic CBS Boston

We now expect there to be more clouds than sunshine and some scattered showers along the route as well. 

There will not be any heavy or driving rain, but there could be enough to get the runners and roads a bit wet.

Some good news, with this slight change in the forecast, the winds look less gusty and impactful. 

forecast-copy.jpg
WBZ-TV graphic CBS Boston

Boston Marathon route weather forecast 

Conditions will not vary much along the course. Many times, we have a warm tailwind through about Newton, and then runners hit a cooling seabreeze head on as they close in on Boston. This will not be the case this year.

Temperatures will slowly climb from the mid-40's at the start line in Hopkinton at 9 a.m. to about 50 degrees by early to mid-afternoon at the finish line in Boston.

wx3.jpg
WBZ-TV graphic CBS Boston

Skies will be mostly cloudy, again with a chance of some rain showers or sprinkles.

Winds will be steady from start to finish between 5 and 15 miles per hour out of the northwest (blowing across the runners from left to right). 

There's also a baseball game at Fenway Park Monday morning. The Red Sox will face the Detroit Tigers at 11:10 a.m.

Temperatures will range from the mid-to-upper 40s between the late morning and mid-afternoon with a chance of a few showers.

View CBS News In
CBS News App Open
Chrome Safari Continue
const link = doc.createElement('link'); link.rel = 'stylesheet'; link.href = '/fly/fly/bundles/cbsnewscontent/css/cmp-banner.min.css?v=296763317a51cab90faa73f1bb146d5c'; doc.head.appendChild(link); doc.body.innerHTML = CONSENT_MESSAGE; } else { el.insertAdjacentHTML('afterend', CONSENT_MESSAGE); } }); } function hidePrivacyMessage() { // Remove from the main document document.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); // Remove from inside any iframes document.querySelectorAll('iframe').forEach(iframe => { const doc = iframe.contentDocument || iframe.contentWindow.document; doc.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); }); } function activateGatedScripts() { // Handle both new format (cmp-gated-script) and old OneTrust/Ketch format (optanon-category-4) const gatedScripts = Array.from(document.querySelectorAll('script.cmp-gated-script, script.optanon-category-4')); // Activate scripts sequentially with a small delay to avoid timing issues let delay = 0; gatedScripts.forEach(function(placeholder, index) { setTimeout(function() { // Skip if already processed if (placeholder.hasAttribute('data-cmp-processed')) { return; } placeholder.setAttribute('data-cmp-processed', 'true'); const newScript = document.createElement('script'); newScript.type = 'text/javascript'; // Try new format first (data-cmp-src), then fall back to old format (data-src) const src = placeholder.getAttribute('data-cmp-src') || placeholder.getAttribute('data-src'); if (src) { newScript.src = src; } else if (placeholder.textContent) { // Inline script - just copy the content newScript.textContent = placeholder.textContent; } // Handle new format attributes (data-cmp-attrs) - for both inline and external scripts const attrs = placeholder.getAttribute('data-cmp-attrs'); if (attrs) { const tempDiv = document.createElement('div'); tempDiv.innerHTML = '
<\/div>'; const tempAttrs = tempDiv.firstChild.attributes; for (let i = 0; i < tempAttrs.length; i++) { // For external scripts, allow defer/async. For inline scripts, skip them (not valid) if (src || (tempAttrs[i].name !== 'async' && tempAttrs[i].name !== 'defer')) { newScript.setAttribute(tempAttrs[i].name, tempAttrs[i].value); } } } // Copy other attributes from old OneTrust format for (let i = 0; i < placeholder.attributes.length; i++) { const attr = placeholder.attributes[i]; // Skip attributes we've already handled or don't want to copy if (!['class', 'data-src', 'data-type', 'data-cmp-src', 'data-cmp-attrs', 'data-cmp-processed', 'type', 'async', 'defer', 'src'].includes(attr.name)) { newScript.setAttribute(attr.name, attr.value); } } placeholder.parentNode.replaceChild(newScript, placeholder); // If external script, manually trigger window.onload handlers after it loads // This handles widgets that use window.onload for initialization if (src) { newScript.addEventListener('load', function() { // If page already loaded and script set a new onload handler, trigger it if (document.readyState === 'complete' && window.onload) { const originalOnload = window.onload; window.onload = null; // Clear temporarily to prevent loops originalOnload(); // Execute the handler } }); } }, delay); delay += 500; // 500ms delay between each script to allow full loading }); } cbsoptanon.onScriptsReady(function(cmp) { cmp.ot.targetingAllowed(function(allowed) { if (!allowed) { showPrivacyMessage(); } else { activateGatedScripts(); } }); cmp.ot.awaitInitialConsent(function(consent_model) { cmp.ot.addOnConsentChangedHandler(function() { cmp.ot.targetingAllowed(function(allowed) { if (allowed) { hidePrivacyMessage(); activateGatedScripts(); } else { showPrivacyMessage(); } }); }); }); });