Ciao. Attualmente stiamo ricevendo questo messaggio nella nostra Google Search Console. Non sono del tutto sicuro di cosa significhi. Potrei avere maggiori chiarimenti su questo problema? Esiste una soluzione? Inoltre, vorrei menzionare che abbiamo provato a utilizzare diversi temi per la piattaforma, ma lo stesso errore persiste.
I dati strutturati aiutano a fornire ai motori di ricerca più contesto, essenzialmente.
La Ricerca Google non trova un campo urlfacoltativo in quell’argomento.
Puoi vedere su validator.schema.org che è perfettamente valido senza avvisi.
Non c’è nulla di cui preoccuparsi.
Detto questo, se la Ricerca Google evidenziasse questo campo, sarebbe un motivo valido per aggiungerlo in Discourse.
Come spiegato sopra da @Arkshine, non si tratta di un bug ma piuttosto di un suggerimento di Google per aggiungere un campo opzionale nello schema. Ci darò un’occhiata.
La prima cosa da notare è che il link che hai mostrato indica che il link non ha lo schema del forum di discussione. Quel link ha solo lo schema “Breadcrumbs”, nessuno schema “Discussion Forum” affatto. Ciò accade perché stai testando il link in modalità “smartphone” e non in modalità “desktop”.
Vorrei sottolineare che ritengo sia un bug importante in Discourse il fatto che lo schema non venga visualizzato in modalità smartphone. Google non saprebbe segnalarlo (perché Google segnala solo errori nello schema che sono presenti), ma il crawling e l’indicizzazione da smartphone sono il predefinito per Google da anni, quindi è importante che qualsiasi schema appaia sia in modalità smartphone sia in modalità desktop.
Questo sta accadendo perché il primo post non è incluso dalla seconda pagina in poi nella vista del crawler. @sam dovremmo includere il primo post in tutte le pagine nella vista del crawler per risolvere i problemi dello schema?
L’altra opzione sarebbe sostituire lo schema microdata con JSON-LD (che Google raccomanda). Questo disaccoppierebbe i dati renderizzati dai dati strutturati e funzionerebbe anche su dispositivi mobili (come Dan ha sottolineato sopra).
Stiamo già utilizzando lo schema JSON-LD nel plugin solved.
A differenza della nostra preferenza generale per i dati strutturati, raccomandiamo di fornire il markup DiscussionForumPosting in Microdata (o RDFa) se possibile. Questo evita di dover duplicare grandi blocchi di testo all’interno del markup. Tuttavia, questa è solo una raccomandazione e JSON-LD è ancora pienamente supportato.
Questo intero tag di link dovrebbe essere definito solo per post.is_first_post - non c’è bisogno di ripeterlo con lo stesso URL identico per ogni elemento Comment.
Su meta.discourse.org le virgolette sono attualmente corrotte: \u003clink itemprop=\u0026#39;mainEntityOfPage\u0026#39; href=\"…\"\u003e
Vedi Schema Markup Validator
Sì, lo stiamo facendo ora secondo il commit recente ma anche dopo averlo aggiunto ci mancano alcuni campi obbligatori (author, datePublished, text) per le pagine successive (?page=2).
Ottima osservazione! Corretto in questo PR:
Oh sì. Questo è stato confermato anche da @rrlevering qui:
Quindi immagino che dovremo migliorare lo schema microdata assicurandoci di non finire per duplicare contenuti nelle pagine successive.
Grazie per la correzione della proprietà mainEntityOfPage.
E buona scoperta sulla tag meta vs. tag link <link itemprop='url' content='<%= @topic_view.absolute_url %>'>
Ancora meglio: <link itemprop='url' href='<%= @topic_view.absolute_url %>'>
Vedi:
– Questo link è vecchio, ma YouTube usa ancora oggi <link itemprop='url' href='…'>. –
“Per fornire un URL in HTML5, […] [per il tag link] usa l’attributo href”
“Se usi un URL come valore dell’attributo content di un elemento meta, questo rappresenterà una stringa (che sembra un URL), non un URL.”
→ “Questo non è richiesto se stai rappresentando un post su un’altra pagina (con un url esterno) come nelle pagine successive dei forum o nelle pagine di categoria del forum.” ←
Proprietà consigliate
url
[…]
Nota speciale su: url
“L’URL canonico della discussione. Nei thread multipagina, imposta questa proprietà sull’URL della prima pagina. Per una singola discussione, questo è solitamente l’URL corrente.”
Quindi concludo:
Non dobbiamo aggiungere text di nuovo su pagina=2+ (FATTO)
Dobbiamo aggiungere la proprietà opzionale url - specialmente a pagina=2+ (FATTO)
Necessità di ulteriori indagini:
Queste “proprietà richieste” author, author.name e datePublished sono davvero richieste su pagina=2+ o possiamo farne a meno di ripeterle?
→ validator.schema.org non si lamenta di proprietà mancanti su pagina=2+. (FATTO)
→ Aspetta e controlla “Console di ricerca Google → Report: Miglioramenti → Forum di discussione” per nuovi dati live dopo che queste correzioni già implementate saranno attive per un po’ di tempo. (DA FARE)
Validatore generale: https://validator.schema.org/
Questo controlla la conformità dei dati strutturati con le definizioni dello Schema e la conformità del markup con HTML/XML.
→ I requisiti controllati seguono lo Standard™ e sono piuttosto ampi e non specifici.
→ Raccomando di correggere ogni bug rilevato.
Console di ricerca Google
Report: Miglioramenti → Forum di discussione: https://search.google.com/search-console/r/discussion-forum?hl=en
Questo fornisce feedback diretto sulle informazioni elaborate dal crawler di Google.
→ Questi report sono in qualche modo fatti concreti vincolanti per il SEO di Google: Se Google annuncia che qualcosa non va, Google pensa anche che non vada bene, anche se non è così.
→ Se qualcosa viene segnalato come “non valido” o “da migliorare”, raccomando di pensare prima a una correzione. E se non ci sono effetti collaterali noti, implementa sempre una correzione.
Google: Test dei risultati multimediali
https://search.google.com/test/rich-results?hl=en
Questo fornisce solo feedback simulato e non è il crawler di Google.
La mia opinione: strumento di marketing di Google per dire ai proprietari di siti “Fate qualcosa riguardo ai vostri dati strutturati!”.
→ Questo strumento è in qualche modo trascurato da Google e non è sempre aggiornato con le ultime raccomandazioni tecniche fornite da Google stessa.
→ Rich Results Test non fornisce sempre lo stesso risultato di Google Search Console – in caso di dubbio: Fidati meglio di Google Search Console.
Ecco un pseudocodice per il controllo corrente visualizzato in Search Console. Penso che aiuterà molto in questi thread. Potrei inviarti ShEx o SHACL ma quelli sono molto meno leggibili dall’uomo.
if not (IsDeletedContent() OR IsExternalContent())
then if not ("text" OR "articleBody" OR "sharedContent" OR "image" or "video")
then report(OneOfThreeRequired("text", "image", "video"))
if not ("author")
then Report(Required("author"))
if not("datePublished")
then Report(Required("datePublished")
L’idea è che se il DiscussionForumPosting/OP ha il suo contenuto nella pagina corrente, dovrebbe esserci un campo di contenuto di qualche tipo.
Se il DiscussionForumPosting fa riferimento a contenuti su una pagina diversa (come nella pagina originale di contenuti multipagina), può avere solo uno stub che contiene qualsiasi cosa (come il titolo dell’argomento dell’OP) e quindi fare riferimento all’URL della prima pagina. Questo è il controllo IsExternalContent(), che verifica semplicemente se url != page URL.
Il secondo esempio nella nostra documentazione doveva modellare esattamente questo caso (la 14a pagina fa riferimento a un post stub dalla prima pagina).
author e date sono attualmente richiesti in ogni caso nelle nostre regole di convalida. Questo serve principalmente a evitare un passaggio aggiuntivo per trovare questi dati. Potresti almeno vedere quanto sarebbe utile conoscere la data dell’OP per capire quanto è obsoleto il commento. Puoi semplicemente inserire elementi meta con quei dati? Non ero preoccupato per questi campi tanto quanto per il riempimento della pagina con dati ridondanti.
Ha ancora senso aggiungere l’URL dell’author mentre il suo percorso è bloccato dal nostro robots.txt predefinito? Dovremmo rimuovere il blocco da robots.txt ora che promuoviamo tali URL?