Seasonal Forecasting: Preparing for Cyclical Demand Patterns
Seasonal forecasting models predict when demand will rise and fall based on recurring calendar patterns. Unlike general traffic or volume forecasting,...
- Seasonal forecasting models predict when demand will rise and fall based on recurring calendar patterns.
- Test both additive and multiplicative decomposition and select the lower residual variance model Verify that the model captures at least yearly...
- Seasonal forecasting is the difference between riding the demand wave and getting crushed by it.
Seasonal forecasting models predict when demand will rise and fall based on recurring calendar patterns. Unlike general traffic or volume forecasting, seasonal models explicitly account for yearly, quarterly, monthly, and weekly cycles. For ecommerce sites, travel platforms, and any business...
The Importance of Seasonality in SEO
Seasonal forecasting models predict when demand will rise and fall based on recurring calendar patterns. Unlike general traffic or volume forecasting, seasonal models explicitly account for yearly, quarterly, monthly, and weekly cycles. For ecommerce sites, travel platforms, and any business with cyclical demand, getting seasonality wrong means millions in missed revenue.
Google's search data reveals that over 60% of queries have measurable seasonal components. The amplitude varies from subtle (10-20% swings for evergreen B2B terms) to extreme (10x spikes for holiday retail). A 2025 analysis by Search Engine Land found that pages optimized for seasonal intent four to six weeks before peak demand saw a 34% higher click-through rate than pages published during the peak period (Search Engine Land, 2025).
Building a Seasonal Model
Multiplicative vs. Additive Decomposition
The first decision is whether your data demands a multiplicative or additive decomposition. Multiplicative models work when seasonal amplitude scales with the trend (e.g., higher baseline months produce proportionally larger peaks). Additive models work when seasonal swings are constant in absolute terms. The seasonal_decompose function from statsmodels supports both.
from statsmodels.tsa.seasonal import seasonal_decompose
import pandas as pd
# Load three years of monthly data
data = pd.read_csv('monthly_sessions.csv', index_col='date', parse_dates=True)
# Test both models and compare residual variance
mult_decomp = seasonal_decompose(data['sessions'], model='multiplicative', period=12)
add_decomp = seasonal_decompose(data['sessions'], model='additive', period=12)
# Lower residual variance in the holdout period indicates better fit
mult_residual_var = mult_decomp.resid.var()
add_residual_var = add_decomp.resid.var()
model_type = 'multiplicative' if mult_residual_var < add_residual_var else 'additive'
Capturing Multiple Seasonalities
Web data typically has multiple seasonal cycles: daily, weekly, monthly, and yearly. A model that only captures yearly seasonality will miss the weekly pattern that causes 30% variance in daily traffic. Facebook's Prophet library handles this natively and has become the standard tool for multi-seasonality forecasting in SEO contexts.
from prophet import Prophet
import pandas as pd
# Prepare data for Prophet
df = pd.DataFrame({
'ds': data.index,
'y': data['sessions'].values
})
model = Prophet(
yearly_seasonality=True,
weekly_seasonality=True,
daily_seasonality=False, # Rarely needed for aggregate traffic
seasonality_mode='multiplicative',
seasonality_prior_scale=10.0 # Controls flexibility of seasonal components
)
# Add monthly seasonality as a custom component
model.add_seasonality(name='monthly', period=30.5, fourier_order=5)
# Add known holiday effects
model.add_country_holidays(country_name='US')
model.fit(df)
future = model.make_future_dataframe(periods=180)
forecast = model.predict(future)
# Extract seasonal components
seasonal_components = ['yearly', 'weekly', 'monthly', 'holidays']
for component in seasonal_components:
col = f'{component}_lower' if component in forecast.columns else component
SEMrush's 2025 benchmarking study found that Prophet-based seasonal models outperformed SARIMA by an average of 18% on MAPE for ecommerce datasets, with the gap widening for sites with multiple seasonal cycles (SEMrush State of Search, 2025).
Handling Anomalous Seasonal Events
COVID-Style Disruptions
Standard seasonal models assume that past patterns repeat. Major external shocks break that assumption. For 2025 forecasting, the post-COVID normalization period (2022-2024) provides a cleaner baseline than pre-COVID data. A Google Research paper on search trend modeling recommends using changepoint detection to identify structural breaks and either excluding or downweighting pre-break data (Google AI, 2025).
from prophet import Prophet
from prophet.diagnostics import cross_validation
# Detect changepoints automatically
model = Prophet(changepoint_prior_scale=0.05)
model.fit(df)
# Visualize changepoints to identify structural breaks
changepoints = model.changepoints
print(f"Detected {len(changepoints)} changepoints in the time series")
Promotional Calendars
For ecommerce sites, promotional events (Black Friday, Cyber Monday, Prime Day) create massive outliers that distort seasonal decomposition. The recommended approach is to treat these as pulse interventions rather than seasonal components. Ahrefs documented a case where a site's Black Friday traffic spikes were contaminating its weekly seasonality component, causing the model to predict a 40% weekly spike every Friday (Ahrefs Blog, 2025).
Audit Checklist
- [ ] Test both additive and multiplicative decomposition and select the lower residual variance model
- [ ] Verify that the model captures at least yearly, quarterly, and weekly seasonal cycles
- [ ] Implement holiday and promotional event flags as separate regressors, not embedded seasonality
- [ ] Run changepoint detection to identify structural breaks in the historical window
- [ ] Validate seasonal forecasts against at least two years of holdout data
- [ ] Set calendar-based alerts for known seasonal ramp-up periods (content production lead times)
- [ ] Document the seasonal factor ranges (min/max multipliers) for every significant traffic source
Closing
Seasonal forecasting is the difference between riding the demand wave and getting crushed by it. A well-calibrated seasonal model tells you not just how much traffic to expect, but when to start producing content to intercept it. Audit your seasonal forecasting pipeline against the checklist above and ensure you are working with the calendar, not against it.