Come abbiamo costruito wp-rankings.com: 60.000 inserzioni e 16 milioni di righe su GeoDirectory

wp-rankings.com v2

La settimana scorsa, abbiamo messo wp-rankings.com live.

Traccia ogni plugin nel repository di WordPress.org: crescita, stime di installazione, classifiche, slancio, posizioni per keyword e confronti con i competitor.

Ecco su cosa si regge:

  • 60.000+ inserzioni
  • 40 campi personalizzati su ognuna di esse
  • 16,2 milioni di righe di dati storici alle sue spalle
  • 3.000 visitatori reali il giorno del lancio, la maggior parte nell'arco di poche ore
  • 10.000+ visitatori unici nei primi 5 giorni, ancora in beta
  • Punteggio Google PageSpeed di 92, prima ancora di aver fatto qualsiasi lavoro di ottimizzazione

Tutto su GeoDirectory.

La ricerca passa attraverso la nostra estensione Elasticsearch, un add-on di GeoDirectory che abbiamo creato per siti di questa scala. Più avanti spiegheremo perché ne avevamo bisogno.

Le persone ci chiedono continuamente fin dove scala GeoDirectory. Un tempo la risposta era "più lontano di quanto pensi, ed ecco alcuni siti dei nostri clienti." Ora c'è un sito pubblico che chiunque può andare a mettere sotto pressione.

Questo articolo racconta come è stato costruito.

Perché il sito esiste

WordPress.org mostrava un grafico della crescita delle installazioni attive su ogni pagina di plugin. A un certo punto lo hanno rimosso. Il ticket Trac che ne chiede il ripristino, #6511, è ancora aperto.

Quel grafico era l'unico modo per capire se un plugin stesse davvero crescendo.

Senza di esso, ti ritrovi con un numero in una fascia, "10.000+ installazioni attive", senza avere idea se siano 10.000 in rapida crescita o 19.000 in lenta emorragia.

Così, 4 anni fa, abbiamo iniziato a interrogare l'API dei plugin di WordPress.org ogni giorno, salvando i risultati, e abbiamo costruito wp-rankings V1.

Da allora non abbiamo saltato un giorno.

4 anni di snapshot giornalieri sull'intero repository. Questo è l'unico dato che non si può tornare a creare in seguito.

V2 è l'evoluzione di tutto ciò, con molte più statistiche, ed è il risultato di quando finalmente costruisci un front end di livello mondiale per i dati.

La struttura dei listing

Ogni plugin nel repository è un listing di GeoDirectory. Un gd_place post, con i suoi dati nella tabella di dettaglio di GeoDirectory, wp_geodir_gd_place_detail.

40 campi personalizzati su ciascuno. Installazioni attive, download, valutazione, numero di valutazioni, thread di supporto, thread risolti, versione, testato fino a, posizione su WordPress.org, più i valori che calcoliamo noi stessi e riscriviamo nel campo.

Questa è la parte che le persone sottovalutano.

I campi personalizzati di GeoDirectory sono uno schema reale, in una tabella reale, con tipi di colonna reali. I nostri tassi di crescita calcolati risiedono in colonne FLOAT.

Si indicizzano, si ordinano, si filtrano. Si comportano come colonne di database perché è esattamente quello che sono.

Se hai mai provato a ordinare un archivio WordPress per un valore di post meta su un sito di qualsiasi dimensione, sai perché questo è importante.

Il post meta è un archivio chiave-valore travestito da schema, e crolla esattamente nel momento in cui inizi a fare domande interessanti.

Tutto il resto in questo articolo dipende da questa singola decisione. Inserisci correttamente i tuoi dati nei campi personalizzati, e il resto diventa possibile.

Ricerca e ordinamento, e l'errore che abbiamo commesso

Se leggi una sola sezione di questo articolo, che sia questa.

Avevamo bisogno di un ordinamento per tendenza. Ordinare l'archivio per crescita a 7 giorni per vedere cosa si sta muovendo in questo momento.

Claude Code gestisce la maggior parte dell'implementazione su questo progetto, e la sua prima risposta è stata SQL personalizzato. JOIN personalizzati e un hook di ordinamento personalizzato agganciato alla query di GeoDirectory.

Sembrava ragionevole. Funzionava bene in locale.

Sul sito live, le performance sono crollate. Una ricerca che era rapida impiegava decine di secondi.

Lo abbiamo individuato immediatamente e abbiamo fatto buttare tutto via all'AI, chiedendole di rifarlo nel modo di GeoDirectory.

La correzione corretta era piccola. Aggiungere growth_7d come campo personalizzato di GeoDirectory, che ti fornisce una colonna FLOAT nella tabella di dettaglio. Calcola il valore in un job in background. Scrivilo nel campo.

Poi registra l'ordinamento con il sistema di sorting nativo di GeoDirectory e lascia che GeoDirectory lo ordini, esattamente come ordina qualsiasi altra cosa. growth_7d_desc. Fatto.

Di nuovo veloce. Su 60.000 listing.

Ecco la lezione, e va ben oltre questo progetto.

Gli strumenti di coding AI ricostruiranno la tua infrastruttura per impostazione predefinita. Dagli un problema di ordinamento, e si lancia sull'SQL perché lo ha visto un milione di volte in fase di addestramento.

Non sa che Stiofan ha passato anni a ottimizzare il layer di query di GeoDirectory per dataset di grandi dimensioni.

Non sa che tutto ciò che sta per costruire è già stato costruito, testato in produzione e rifinito nel corso di un decennio.

Produrrà con sicurezza una versione peggiore di un problema già risolto, e sarà anche molto soddisfatta di sé.

Quindi, se stai usando Claude o ChatGPT su un sito GeoDirectory, l'istruzione di gran lunga più preziosa che puoi dargli è questa:

Non aggirare l'infrastruttura nativa di ricerca, ordinamento e filtro di GeoDirectory. Estendila con campi personalizzati.

È a questo che servono i campi personalizzati. Questo è tutto il trucco.

Dove finisce GeoDirectory e dove inizia il nostro codice

Abbiamo 2 plugin personalizzati.

Il primo è lo scraper. Stiofan lo ha costruito 4 anni fa, e ha un solo compito: interrogare ogni giorno l'API dei plugin di WordPress.org e scrivere i dati trovati nelle inserzioni. È il motivo per cui il dataset esiste, e da allora gira silenziosamente senza sosta.

Il secondo è il plugin di analisi, nuovo per V2. Gestisce la tabella snapshot da 16,2 milioni di righe. Una riga per plugin per giorno: posizione in classifica, fascia di installazioni, installazioni stimate, tasso di crescita, stato di momentum.

Le serie temporali non sono il compito di una directory, e non chiederemmo mai a GeoDirectory di occuparsene. Quella tabella ha il proprio schema, i propri indici e i propri processi in background, e si trova completamente al di fuori di GeoDirectory.

Ma i risultati rientrano.

Il plugin di analisi elabora i propri dati autonomamente, poi scrive l'output nei campi personalizzati di GeoDirectory. Un tasso di crescita a 7 giorni viene calcolato da milioni di righe di dati storici e appare come un singolo FLOAT nell'inserzione.

Dal punto di vista di GeoDirectory, è semplicemente un altro campo. Lo ordina, lo filtra e lo visualizza come qualsiasi altro.

Calcolo fuori. Archiviazione dentro. Lascia fare le query a GeoDirectory.

Questa è l'architettura in 3 righe, ed è il motivo per cui il sito è veloce nonostante si appoggi su un dataset molto grande. La query sull'archivio non tocca mai i 16 milioni di righe. Legge un singolo numero calcolato ore prima.

La pagina della singola inserzione

Pagina di un singolo plugin su wp-rankings.com che mostra il grafico di crescita e la stima delle installazioni

La pagina del plugin è una dashboard. Scheda con le metriche, installazioni attive stimate con un indice di affidabilità, grafici di crescita su 30 giorni, 90 giorni, 1 anno e tutto il periodo, un classificatore di momentum, una proiezione al prossimo traguardo, statistiche su recensioni e supporto, posizionamento per parole chiave su WordPress.org e una scheda di confronto con fino a 3 competitor.

Sotto il cofano, è una normale pagina GeoDirectory per la singola inserzione con il tema Blockstrap predefinito. Nessun tema personalizzato.

La dashboard in sé è codice nostro. Chart.js, alimentato dai campi personalizzati. Un utente normale di Blockstrap non potrebbe costruirla a mano, ed è inutile fingere il contrario.

Ecco la cosa che vale la pena dire apertamente, però: non devono più costruirla a mano.

2 anni fa, una pagina come questa significava assumere uno sviluppatore per settimane.

Oggi, descrivi quello che vuoi e un'IA lo costruisce. Grafici, schede, tabelle di confronto e badge condizionali.

È diventato quasi banale ora, perché la parte difficile era già stata fatta. I dati erano nei campi personalizzati di GeoDirectory, strutturati, tipizzati e interrogabili.

L'IA è molto brava a costruire sopra uno strato dati ben strutturato. È molto cattiva a inventarne uno.

Dagli un campo personalizzato ben strutturato e chiedile un grafico di crescita, e lo avrai prima di pranzo. Lasciala progettare il tuo livello di query, e distruggerà allegramente il tuo sito, come abbiamo scoperto a nostre spese.

Quindi la divisione è semplice. GeoDirectory gestisce i dati e le query. L'IA costruisce tutto ciò che vuoi sopra.

Fallo in quest'ordine, e un sito di questo tipo è alla portata di una singola persona.

Gli archivi

Pagina dei trend su wp-rankings.com, plugin ordinati per crescita negli ultimi 7 giorni

È qui che tutto ciò che abbiamo descritto prima dà i suoi frutti.

La pagina dei trend mostra i plugin con almeno 10.000 installazioni attive, ordinati per velocità di crescita negli ultimi 7 giorni. Posizione in classifica, plugin, variazione nelle 24 ore, variazione a 7 giorni, percentuale di crescita e installazioni attive stimate.

Il tutto è un blocco Inserzioni di GeoDirectory.

Il blocco inserzioni nativo di GeoDirectory, ordinato tramite un'opzione di ordinamento di GeoDirectory, che legge i campi personalizzati di GeoDirectory. L'ordinamento per trend si trova nel sistema di ordinamento di GeoDirectory accanto a tutti gli altri, quindi funziona ovunque funzionino le inserzioni.

Non c'è nessun SQL personalizzato al suo interno.

La pagina delle statistiche vi rimanda direttamente.

Pagina delle statistiche su wp-rankings.com che mostra la distribuzione delle installazioni

Ogni fascia di installazioni su quella pagina è un link verso i trend con il filtro minimo già applicato, quindi "mostrami i plugin con oltre 100.000 installazioni che sono in movimento" è un solo clic.

Inserisci i dati nei campi personalizzati, registra l'ordinamento correttamente, e gli archivi si assemblano da soli con i componenti già inclusi in GeoDirectory.

Il flusso di rivendicazione

I proprietari dei plugin possono rivendicare la propria inserzione. Questa è la funzionalità nativa di rivendicazione di GeoDirectory, con la nostra logica di verifica aggiunta sopra.

Controlliamo il Plugin URI: dell'intestazione, quello nel file PHP principale, e verifichiamo che il richiedente controlli quel dominio.

Verifica via email, approvazione automatica al clic.

Circa 100 plugin sono stati rivendicati nella prima settimana.

Stesso schema di tutto il resto su questo sito.

GeoDirectory fornisce la funzionalità. Le tue regole di business si collocano sopra di essa.

Traffico, velocità e la questione Elasticsearch

Il lancio è stato guidato quasi interamente da X.

Il post si è diffuso ampiamente, alcune figure di rilievo nel mondo WordPress lo hanno condiviso, e il traffico è arrivato tutto in una volta.

3.000 utenti reali nel giorno del lancio. Non distribuiti uniformemente nelle 24 ore, ma concentrati in alcune di esse.

Una precisazione sulla misurazione, perché questo trae in inganno molti. Cloudflare ha riportato 72.000 utenti unici per quel periodo. I log del server indicavano circa 3.000 persone reali. Il resto erano bot.

Se stai riportando il traffico di una directory a un cliente, controlla i log del server prima di festeggiare.

Lo stack ha tenuto. GeoDirectory Cloud, Cloudflare davanti, caching con LiteSpeed.

Niente di straordinario.

Google PageSpeed gli assegna 92, e non abbiamo ancora iniziato a ottimizzare (lo faremo una volta terminata la beta).

Ora la parte onesta.

La ricerca su questo sito passa attraverso la nostra estensione Elasticsearch per GeoDirectory.

Con 60.000 inserzioni, 40 campi personalizzati e ordinamento su valori calcolati, la ricerca con ordinamento personalizzato stava diventando più lenta di quanto volessimo.

MySQL stava facendo più lavoro del necessario.

La maggior parte delle directory non si avvicinerà mai a quei numeri.

La ricerca nativa di GeoDirectory è veloce, e se gestisci qualche migliaio di inserzioni, è già la risposta giusta. Ve lo diremmo noi stessi.

wp-rankings si trova genuinamente all'estremo della curva, e l'estensione Elasticsearch è qualcosa che installiamo e configuriamo su build personalizzate per siti che hanno superato i limiti di MySQL.

La parte importante è che si aggancia al livello di ricerca di GeoDirectory.

Sostituisce il motore sottostante, e tutto ciò che sta sopra rimane nativo. GeoDirectory gestisce ancora ricerca, ordinamento e filtri.

Stesso principio di prima, dalla direzione opposta.

Lavora con l'infrastruttura di GeoDirectory, mai aggirala. L'uno scala il sito. L'altro lo rompe.

Il resto dello stack

UsersWP per account, login, registrazione e profili.

Blockstrap, più il Blockstrap page builder plugin, per i template e tutto ciò che riguarda il visivo.

Turnstile su login e registrazione, tramite AyeCode Connect.

GetPaid e UsersWP Membership per il livello premium se la domanda si rivelerà reale. Non l'abbiamo ancora costruito.

La domanda che non ci aspettavamo è quella della pubblicità.

Una mezza dozzina di persone ha già chiesto di sponsorizzare il sito, quindi il GeoDirectory Advertising add-on entra prossimamente, in modalità self-service, così gli sponsor possono acquistare i propri spazi pubblicitari senza che noi dobbiamo toccare nulla.

L'intero stack AyeCode, che fa quello per cui è stato costruito. Niente qui è un espediente.

Cosa dimostra tutto questo

"Fino a dove scala GeoDirectory?" era una domanda a cui rispondevamo con un'alzata di spalle e un elenco di siti clienti.

Ora c'è uno pubblico che puoi andare a mettere sotto pressione.

60.000 inserzioni. 40 campi personalizzati su ciascuna. 16 milioni di righe di storico alle loro spalle.

Un picco di traffico che metterebbe in ginocchio la maggior parte delle directory, assorbito senza un cedimento.

L'abbiamo costruito in due.

La maggior parte dell'implementazione è stata assistita dall'IA, e l'unica volta in cui abbiamo incontrato veri problemi è stata quando abbiamo lasciato che l'IA ridisegnasse l'impianto interno di GeoDirectory invece di usarlo.

Vai a vedere: wp-rankings.com

Se vuoi costruire qualcosa di simile, sai già su cosa gira.

Scopri il potere di GeoDirectory!

Avvia la tua attività online adesso

Iscriviti oggi!

Newsletter - Rimani aggiornato!

Ricevi le ultime notizie, consigli e contenuti esclusivi direttamente nella tua casella di posta.

Pubblicato da Paolo

Paolo Tajani, co-fondatore e responsabile marketing di AyeCode LTD, lavora insieme al suo socio in affari Stiofan per sviluppare importanti plugin WordPress come GeoDirectory, UsersWP e GetPaid. Avendo iniziato il suo percorso con WordPress nel 2008, Paolo ha unito le forze con Stiofan O'Connor nel 2011. Insieme, hanno avuto un ruolo fondamentale nella creazione e nel marketing di una serie di temi e plugin di successo, oggi utilizzati attivamente da oltre 100.000 siti web.

Caricamento in corso...
Offerta Sconto del 20%
Affrettati! Ottieni il tuo sconto del 20% prima che scada. Ottieni il 20% di sconto