Forecasting SEO: Prevedere il Traffico con Python e Prophet
3 min lettura

Forecasting SEO: Prevedere il Traffico con Python e Prophet


Il SEO è tradizionalmente una disciplina reattiva: ottimizziamo, aspettiamo, misuriamo. Ma nell’era data-driven del 2026, i board aziendali chiedono previsioni. “Quanto traffico avremo a Natale?”, “Il calo di ieri è stagionale o abbiamo rotto qualcosa?”. Rispondere a queste domande con “dipende” non è più sufficiente. Dobbiamo usare il Forecasting (previsione) e l’Anomaly Detection (rilevamento anomalie).

Per questo task, la libreria open-source Prophet (sviluppata originariamente da Meta) rimane uno standard industriale insuperato per la sua capacità di gestire la “sporcizia” e la stagionalità dei dati web reali.

Perché non basta una Media Mobile?

Molti SEO usano Excel per calcolare trend lineari o medie mobili. Questo approccio fallisce perché ignora la complessità del calendario:

  1. Doppia Stagionalità: Un e-commerce B2B ha pattern settimanali (crolla nel weekend) e annuali (crolla ad agosto).
  2. Festività Mobili: Pasqua, Black Friday e Carnevale non cadono sempre negli stessi giorni. Prophet ha calendari integrati per gestirlo.
  3. Cambiamenti Strutturali: Se il sito è migrato a HTTPs o ha cambiato dominio, la “baseline” cambia.

Workflow Python per l’Anomaly Detection

L’obiettivo è creare uno script che ogni mattina confronti il traffico reale di ieri con quello “atteso”. Se la differenza supera una certa soglia (Confidence Interval), scatta l’allarme.

Prerequisiti

  • Python 3.10+
  • Dati storici giornalieri (Sessioni Organiche o Click GSC) degli ultimi 24 mesi.

Il Codice

import pandas as pd
from prophet import Prophet
import matplotlib.pyplot as plt

# 1. Carica i dati (export GA4/GSC)
# Il formato deve essere: 'ds' (data YYYY-MM-DD) e 'y' (metrica da prevedere)
df = pd.read_csv('organic_traffic_history.csv')

# 2. Configurazione del Modello
# Abilitiamo stagionalità giornaliera, settimanale e annuale
m = Prophet(
    yearly_seasonality=True, 
    weekly_seasonality=True, 
    daily_seasonality=False,
    interval_width=0.95 # Confidenza al 95%
)

# Aggiungiamo festività italiane (cruciale per e-commerce locali)
m.add_country_holidays(country_name='IT')

# 3. Training
m.fit(df)

# 4. Previsione (30 giorni futuri)
future = m.make_future_dataframe(periods=30)
forecast = m.predict(future)

# 5. Rilevamento Anomalie (Logica Custom)
# Uniamo dati reali e previsioni
check_df = pd.merge(df, forecast[['ds', 'yhat_lower', 'yhat_upper']], on='ds')

# Se il valore reale è fuori dal "tunnel" di confidenza -> Anomalia
def detect_anomaly(row):
    if row['y'] < row['yhat_lower']:
        return "CRASH"
    if row['y'] > row['yhat_upper']:
        return "SPIKE"
    return "NORMAL"

check_df['status'] = check_df.apply(detect_anomaly, axis=1)

# Alerting
today_status = check_df.iloc[-1]['status']
if today_status == "CRASH":
    print("🚨 ALERT: Traffico sotto la soglia minima prevista!")

Operazionalizzare il Modello

Questo non deve rimanere un notebook Jupyter sul tuo PC.

  1. Cloud Function: Porta lo script su Google Cloud Functions o AWS Lambda.
  2. Scheduler: Fallo girare ogni mattina alle 09:00 (dopo che i dati di ieri sono consolidati).
  3. Slack Webhook: Invia il grafico della previsione vs reale direttamente nel canale #marketing-team.

Passare da “Ho l’impressione che il traffico sia calato” a “L’algoritmo rileva una deviazione di -3 sigmi dalla media prevista” cambia radicalmente la percezione della professionalità SEO in azienda.

Potrebbe interessarti anche