Lliçons de SEO després de corregir el nostre propi lloc
Vam dedicar uns quants dies a llegir el nostre propi lloc com ho faria un motor de cerca, i vam trobar sis coses que valia la pena arreglar. Cada pàgina declarava dos blocs de FAQ, Google feia servir com a miniatura un halo decoratiu de fons en lloc de la nostra targeta per compartir, un grup de pàgines de plantilla s'estaven posicionant per cerques que no responien, i una secció nova del lloc estava bloquejada pel nostre propi edge a staging. Res d'això no era dramàtic. Tot plegat, però, ens estava costant visibilitat sense fer-ne soroll.
El lloc en un paràgraf
mythex.ai és una aplicació d'una sola pàgina que preprenderitzem en el moment de compilar: un script recorre totes les rutes, escriu un fitxer HTML estàtic per a cadascuna i injecta el títol, la descripció i les dades estructurades de la pàgina (el bloc JSON-LD que indica als motors de cerca de què tracta una pàgina; vegeu què són les dades estructurades). Gran part del que segueix viu en aquest pas de prerenderització, perquè és l'HTML que un rastrejador llegeix de debò.
1. Cada pàgina afirmava ser la pàgina de les FAQ
Símptoma. La nostra plantilla HTML incloïa un bloc FAQPage per a tot el lloc a les dades estructurades, amb la URL apuntant a /faq. Després, la prerenderització hi afegia el FAQPage propi de cada pàgina. Així, cada pàgina del lloc n'enviava dos, i la nostra política de privadesa deia a Google que era la pàgina de les FAQ.
Per què importa. Google espera com a màxim un FAQPage per pàgina. Un segon que apunta a un altre lloc és el tipus de cosa que fa que el marcatge d'una pàgina perdi valor, no només que s'ignori.
Solució. El bloc global ha desaparegut. El marcatge de FAQ de cada pàgina ara surt d'un sol lloc, inclosa la mateixa /faq, que el construeix a partir de la llista completa de preguntes. Les pàgines sense FAQ ara no declaren cap, que és la resposta honesta. I la prerenderització falla la compilació si alguna pàgina torna a tenir més d'un FAQPage. Una regla que només viu a la memòria d'algú es trenca; una regla que la compilació fa complir, no.
2. Google feia servir una imatge equivocada per a nosaltres
Símptoma. Als resultats de cerca, la miniatura de Mythex era el halo que pulsa suaument darrere de la capçalera de la pàgina d'inici (una imatge de fons decorativa), en lloc de la nostra targeta per compartir.
Per què va passar. Mai no vam dir a Google quina imatge representava cada pàgina, i ell en va triar una qualsevol.
Solució. Dues cares del mateix problema:
- Digues quina imatge és de la pàgina. La pàgina d'inici ara té un node
WebPageamb unprimaryImageOfPageque apunta a la targeta per compartir, i les dades estructurades de cada pàgina preprenderitzada porten la seva pròpia imatge (la imatge per compartir de la pàgina, o la predeterminada). - Amaga la decoració. Les imatges de fons ara estan prohibides a
robots.txti es serveixen amb una capçaleranoindex, noimageindex, de manera que queden fora de la cerca d'imatges i de les miniatures.
3. Els motors de cerca només coneixien el nostre logo
El nostre marcatge Organization tenia un nom, un logo i alguns enllaços a xarxes socials: marca, res més. Els motors de cerca construeixen el panell de coneixement d'una empresa a partir de dades de tipus registre, així que hi vam afegir les que consten a la nostra llicència comercial: raó social, data de fundació, fundador i adreça registrada. Vam deixar deliberadament fora el número de telèfon.
4. Les pàgines de plantilla responien una altra pregunta
Símptoma. La Search Console mostrava tres pàgines de plantilla que acumulaven impressions i cap clic. Una es posicionava per «content strategist portfolio» i variants, una altra per «best italian restaurant website design», i una tercera per un grup al voltant de «agile board». La meitat d'aquestes cerques incloïa la paraula «free». Les posicions anaven de la vint-i-cinquena fins a la cinquantena.
Per què. Cada pàgina responia una pregunta diferent de la que es feia. Algú que volia veure com és un bon disseny per a un restaurant italià arribava a una pàgina que li venia un constructor.
Solució. Cadascuna de les tres té ara una secció escrita per a la cerca i no per al producte, un títol i una descripció amb les paraules que la gent escriu, i preguntes freqüents que valen el marcatge que ja emetien.
El mateix commit va arreglar un problema més discret. El bloc de «plantilles relacionades» agafava les quatre primeres plantilles d'una categoria, de manera que totes les plantilles de portafolis apuntaven als mateixos quatre portafolis, i la resta de la categoria no tenia cap enllaç intern. El vam substituir per un anell ordenat per subcategoria: ara cada pàgina de plantilla rep exactament quatre enllaços d'entrada i quatre de sortida. L'HTML preprenderitzat també imprimeix ara aquests enllaços; abans només existien després que s'executés JavaScript, cosa que un rastrejador pot no fer mai.
5. Avisar Bing de les pàgines noves en el moment del desplegament
Google ignora IndexNow, un protocol per avisar els motors de cerca quan canvia una URL. Bing, Yandex i Seznam sí que l'usen, i l'índex de Bing és el que llegeix la cerca de ChatGPT. Un constructor d'aplicacions amb IA que els assistents d'IA no poden trobar és un tipus de fracàs molt particular.
L'enfocament obvi, enviar tot el sitemap a cada desplegament, és la manera com una clau acaba limitada, i la majoria de desplegaments no canvien res que interessi a un motor de cerca. Per això, un script compara el sitemap que el lloc serveix ara amb el que acaba de compilar-se i només envia la diferència.
Dos detalls van fer que funcionés:
- Fes la instantània abans de desplegar. La línia base s'ha de capturar abans que la nova compilació arribi a producció. Després, el sitemap «en viu» ja és el nou i totes les diferències surten buides.
- Només pàgines noves, de moment. El nostre sitemap no té dates
lastmod, així que l'script anuncia les pàgines noves però no les reescriptures. Posar a cada URL la data de compilació marcaria tot el lloc com a canviat a cada desplegament: exactament el correu brossa que volíem evitar.
Només s'executa en desplegaments de producció i mai no fa fallar la compilació: quan s'executa, el lloc ja està en línia, i un avís a un motor de cerca no val la pena un desplegament en vermell.
6. El nostre propi edge deia «no trobat»
Quan vam llançar les pàgines /ai (més sobre aquestes a una pàgina de destinació per a cada tipus de negoci), staging mostrava «Not found» per a totes, mentre el host estàtic les servia bé.
El servei que hi ha davant dels nostres hosts de màrqueting només reenvia una llista permesa de rutes; qualsevol altra cosa rep un 404 directe. /ai era nova i no hi era a la llista. Hi vam afegir /ai i /ai/*, amb una prova que comprova que passen. És un error petit, però exactament el tipus que fa que una secció nova sigui invisible per als rastrejadors sense que ningú ho noti.
Què ens hem endut
- Llegeix l'HTML que llegeix un rastrejador. La majoria d'aquests problemes eren invisibles en un navegador i evidents en el fitxer preprenderitzat.
- Converteix les regles de SEO en comprovacions de compilació. «Un FAQPage per pàgina» ara es fa complir, no es recorda.
- Digues als motors de cerca què vols dir. Si no dius quina imatge o quins fets et representen, ells ho endevinaran.
- La Search Console et diu quina pregunta feia la gent. Impressions sense clics solen voler dir que la pàgina responia una altra pregunta.
- Envia les diferències, no tot. Avisar només del que ha canviat et manté dins dels límits de freqüència.
Si fas el mateix per a un lloc que has construït, les nostres guies sobre SEO per a webs creades amb IA i com configurar la Google Search Console cobreixen les bases.