Google lamenta un'interazione lenta a Next Paint (INP) sui siti Discourse

Ciao, prima di tutto vorrei dire che non sono uno che insegue la SEO o si sforza di adattarsi alle richieste preferenze di Google su come dovrebbe apparire e funzionare il mio sito. Ma vale la pena sapere che Google mi ha appena inviato un’email riguardo alla necessità del mio sito di migliorare la loro nuova “metrica Core Web Vital” che presto inizierà a incidere molto sulle loro classifiche:

Ecco il report su Discourse Meta, che è un po’ peggio del mio sito per INP (372 ms contro 208 ms):

Dato che Discourse è fondamentalmente un’app web Javascript, immagino che non sarà facile migliorare quelle metriche. Ma d’altra parte, Google sembra basare la sua classifica sulla versione senza Javascript che i suoi crawler web stanno vedendo, nonostante affermi di emulare un telefono Moto G Power…

…quindi non credo o non mi interessa troppo di ciò che i loro algoritmi e le loro classifiche determinano. Ma vale la pena avvisare gli sviluppatori e gli amministratori di siti per esserne consapevoli.

6 Mi Piace

Ciao @rahim123 - migliorare l’INP è una delle motivazioni per passare dall’animazione di navigazione della pagina di Discourse da uno “spinner” a pagina intera a uno slider. Abbiamo distribuito tale modifica solo su Meta la scorsa settimana, quindi è un po’ presto perché la modifica venga visualizzata nei dati del sondaggio sui Core Web Vitals di Google.

Ma stai certo che terremo d’occhio i dati e valuteremo ulteriori modifiche, se necessario.

12 Mi Piace

Grazie mille per la risposta. Lieto di sapere che sei al corrente di questa situazione.

Ho utilizzato il tester URL live di Google https://pagespeed.web.dev, quindi non dovrebbe essere già incluso nel ranking? E poiché Google vede la versione senza Javascript, non sono sicuro di come tenga conto dello spinner rispetto allo slider? L’INP non ha a che fare con la navigazione da una pagina all’altra all’interno dello stesso sito web? In tal caso, non capisco davvero come valuti quella metrica per un singolo URL. Mi scuso per la mia ignoranza, sono tutt’altro che un esperto di queste minuzie relative all’architettura delle pagine e ai capricci più recenti di Google.

1 Mi Piace

Sì, ‘pagespeed insights’ e il crawler di ricerca di Google recuperano la versione HTML di base di Discourse. Quindi, sfortunatamente, questi strumenti on-demand non sono molto utili per noi.

Per il ranking di ricerca, Google utilizza dati reali raccolti dagli utenti di Chrome su desktop e Android. Rendono tali dati disponibili pubblicamente su Overview of CrUX  |  Chrome UX Report  |  Chrome for Developers. Sfortunatamente, c’è un ritardo di 1-2 mesi tra la raccolta e la pubblicazione, motivo per cui dobbiamo aspettare un po’ prima di poter vedere l’impatto reale di questo nuovo cursore di caricamento.

Per vedere i dati di Google per il tuo sito (o per Meta), vai qui e inserisci il dominio: https://developer.chrome.com/docs/crux/dashboard/. Una volta caricato il report, c’è una scheda per INP sul lato sinistro. Se non ricordo male, Google si concentra sui dati ‘mobile’ per il ranking di ricerca, quindi dovrai utilizzare il filtro del dispositivo per approfondire.

Dati mobile per Meta:

L’obiettivo è ottenere almeno il 75% di ‘buono’, il che significa che il valore P75 INP che Google utilizza per il ranking di ricerca è inferiore a 200 ms.

9 Mi Piace

Wow, non ne avevo mai sentito parlare. Grazie mille per la spiegazione!

3 Mi Piace

Come punto dati, ho utilizzato esclusivamente il componente tema discourse-loading-slider da quando il mio sito è online. Sono ancora nella zona “necessita miglioramenti”

In particolare, sembra che le pagine a cui accedono principalmente account anonimi provenienti da Google abbiano le prestazioni peggiori. Potrebbe essere specifico del mio forum, ma ho pensato che valesse la pena condividerlo.

4 Mi Piace

David, sembra un enorme miglioramento percepito, anche se sono affezionato al vecchio spinner :wink: Puoi ricordarmi qual è stato il cambiamento tecnico di alto livello nell’approccio che facilita quel miglioramento? È stato documentato da qualche parte?

Il miglioramento dell’INP?

Con il vecchio spinner, la sequenza era:

  1. Fare clic sul link
  2. Ember smonta tutto il DOM e pulisce i componenti dal vecchio percorso
  3. Lo spinner viene visualizzato sullo schermo
  4. Una volta risolta la richiesta di rete, viene visualizzato il nuovo percorso nel DOM

Con lo slider, saltiamo il passaggio 2. Lo slider viene visualizzato immediatamente, senza dover attendere il costoso processo di smontaggio.

Qui dovrei chiarire: la motivazione principale per cui abbiamo modificato l’impostazione predefinita è il miglioramento dell’UX. Anche il miglioramento della metrica INP è positivo, ma non è il motivo principale del cambiamento.

5 Mi Piace

Sì, è la percezione che conta di più e non rimuovere i contenuti troppo presto è un bel tocco. Ottimo lavoro!

1 Mi Piace

È molto importante notare che l’INP influenzerà il posizionamento del sito solo a marzo 2024, quindi i miglioramenti su cui stiamo lavorando oggi avranno tempo per essere perfezionati prima che inizi a influire su Google.

7 Mi Piace

Sono anche io piuttosto affezionato al vecchio. È possibile avere un componente tematico (o forse un’impostazione utente) per il vecchio spinner?

3 Mi Piace

C’è un’impostazione a livello di sistema per tornare indietro: indicatore di caricamento pagina

Vero, ma ad alcuni piace il nuovo e preferirei non toccare le loro impostazioni.

Inoltre, se ricordo bene, quella opzione verrà rimossa presto.

2 Mi Piace

Oh, pensavo lo avessero aggiunto di recente?

Vero, ma guarda questo:

4 Mi Piace

Per i dati del tuo dominio come meta.discourse.org c’è sempre un report recente in Google Search Console nascosto in ‘Esperienza’ –\u003e ‘Metriche principali del web’ –\u003e ‘Mobile (Apri report)’ e scorri fino a ‘Problema INP: più lungo di 200 ms (mobile)’

Modifica: Questo rientra maggiormente nella scala di bassa probabilità/alto impatto. INP tiene conto solo di p75.

L’INP potrebbe essere influenzato dalle procedure di post-?cooking? (= miglioramento delle funzionalità tramite JS al caricamento) del core di Matomo o dei plugin che eseguono ‘pesanti’ attività JS con un lungo ‘render blocking time’.

Soprattutto quando l’utente passa a un altro thread, ci sono circa 10-20 post “cucinati” contemporaneamente.

Qui è sempre bene suddividere i compiti per i singoli post in setTimeout() separati per consentire al browser di eseguire il rendering tra i singoli compiti e non attendere il completamento dell’intero processo.

Ad esempio, qualcosa del genere:

var initializeSliderSlickItem = function (item) {
  /* esegui l'inizializzazione effettiva qui */
  var $this = $(item);
  […];
};

$('.slider-slick').each(function () {
  var item = this;
  setTimeout(initializeSliderSlickItem, 0, item);
});

Sei sicuro? Passando da un argomento all’altro, il prossimo dipinto sarà il caricatore in cima alla pagina, che inizia subito.

1 Mi Piace
Modifica: Questo rientra nella scala di bassa probabilità/alto impatto. INP tiene conto solo di p75.

… e dopo inizia la cottura. Se l’utente fa clic su qualcosa mentre è in corso un’attività di cottura di Discourse, Google misura INP come tempo fino al prossimo paint. Il prossimo paint potrebbe apparire al più presto al termine dell’attività di cottura in corso.

Vedi web.dev: INP: Cos’è un’interazione

“La vita di un’interazione. Si verifica un ritardo di input fino all’inizio dell’esecuzione dei gestori di eventi, che può essere causato da fattori quali lunghe attività sul thread principale [ad es. “cottura”]. Vengono quindi eseguiti i gestori di eventi dell’interazione e si verifica un ritardo prima che venga presentato il frame successivo.”


Google tiene conto del tempo di blocco del paint più lungo se ci sono più eventi di blocco “durante l’intero ciclo di vita della pagina”. Ciclo di vita come:

  1. Il thread URL “A” si apre
  2. Viene mostrato il puntatore
  3. Cottura dei post nel thread “A”
  4. Clic 1: l’utente fa clic sul link al thread “B”
  5. Viene mostrato il puntatore
  6. Caricamento del thread “B”
  7. Cottura dei post nel thread “B”
  8. Clic 2: l’utente fa clic sul link al thread “C” mentre il thread “B” è ancora in cottura
  9. L’azione di cottura in corso sul thread “B” termina (-- conta nell’INP per il Clic 2)
  10. Viene mostrato il puntatore
  11. Caricamento del thread “C”
  12. Cottura dei post nel thread “C”

Anche web.dev: INP: Cos’è un’interazione

“L’INP viene calcolato quando l’utente lascia la pagina, con il risultato di un singolo valore rappresentativo della reattività complessiva della pagina durante l’intero ciclo di vita della pagina.”

Fortunatamente, l’uso del p75 della metrica significa che nessuno deve davvero preoccuparsi di questo scenario che hai descritto, e chiaramente non è rappresentativo delle normali interazioni con Discourse.

2 Mi Piace