Melhorias no esquema do fórum de discussão

Olá. Estamos recebendo esta mensagem em nosso Google Search Console. Não tenho certeza do que isso significa. Poderia me dar mais clareza sobre este problema? Existe uma solução? Além disso, gostaria de mencionar que tentamos usar vários temas para a plataforma, mas o mesmo erro persiste.

1 curtida

Olá, hiccup!

Dados Estruturados ajudam a fornecer mais contexto aos motores de busca, essencialmente.

A Pesquisa Google não encontra um campo opcional url nesse tópico.
Você pode ver em validator.schema.org que é perfeitamente válido sem avisos.

Não há nada com que se preocupar.
Dito isso, se a Pesquisa Google destacar este campo, seria um motivo válido para adicioná-lo no Discourse.

3 curtidas

Como @Arkshine explicou acima, isso não é um bug, mas sim uma sugestão do Google para adicionar um campo opcional ao esquema. Vou verificar isso.

2 curtidas

Da outra thread:

Então, sim, “url” é opcional, mas também há erros genuínos aqui.

O itemprop="url" ajuda o Google a combinar vários blocos de Comment em diferentes URLs pertencentes ao mesmo tópico.

Tentei reproduzir os erros que você está vendo testando tópicos de meta no Teste de Resultados Ricos do Google, mas não vejo nenhum erro.

Você pode fornecer um link para o tópico para o qual o Google está mostrando erros?

A primeira coisa que você deve observar é que o link que você mostrou indica que o link não tem o Esquema de Fórum de Discussão. Esse link tem apenas o esquema “Breadcrumbs”, nenhum esquema “Fórum de Discussão” de todo. Isso está acontecendo porque você está testando o link no modo “smartphone” e não no modo “desktop”.

\u003chttps://search.google.com/test/rich-results/result?id=TlLcA6saLMo3BrxbQYnFuw\u003e

Quando você muda o link para teste em desktop, o esquema “Fórum de Discussão” aparece e sinaliza o problema de “campo url ausente”.

  • \u003chttps://search.google.com/test/rich-results/result?id=uy3Ub3IwJiIuaMh-7YUu6g\u003e
  • \u003chttps://search.google.com/test/rich-results/result/r%2Fdiscussion-forum?id=uy3Ub3IwJiIuaMh-7YUu6g\u003e

Para reproduzir os erros críticos, você tem que testar um tópico longo com o parâmetro de URL ?page=2, como este:

  • \u003chttps://meta.discourse.org/t/discourse-air-theme/197703?page=2\u003e
  • \u003chttps://search.google.com/test/rich-results/result?id=n8ZJes2JomqJ5vQiprNB5w\u003e
  • \u003chttps://search.google.com/test/rich-results/result/r%2Fdiscussion-forum?id=n8ZJes2JomqJ5vQiprNB5w\u003e

1 curtida

Gostaria de ressaltar que, na minha opinião, é um bug importante no Discourse que o schema não apareça no modo smartphone. O Google não saberia sinalizá-lo (porque o Google só sinaliza erros em schemas que estão presentes), mas a rastreabilidade e indexação por smartphone é o padrão do Google há anos, portanto, é importante que qualquer schema apareça no modo smartphone e no modo desktop.

2 curtidas

O problema descrito na primeira postagem, além de outros, foi corrigido neste commit:

Obrigado pelas sugestões aqui @rrit! :+1:

Isso está acontecendo porque a primeira postagem não está incluída a partir da segunda página na visualização do crawler. @sam devemos incluir a primeira postagem em todas as páginas na visualização do crawler para corrigir os problemas de schema? :thinking:

1 curtida

Não, eu não acho que sim, duplicar conteúdo nunca acaba bem, existem outras opções

3 curtidas

A outra opção seria substituir o microdata schema por JSON-LD (que o Google recomenda). Isso desacoplaria os dados renderizados dos dados estruturados e também funcionaria em dispositivos móveis (como Dan apontou acima).

Já usamos o schema JSON-LD no plugin solved.

3 curtidas

Com certeza, essa parece ser uma solução muito mais correta.

1 curtida

Não inclua os dados/texto da primeira postagem em páginas subsequentes, mas sempre adicione itemprop="url" apontando para a primeira página:

Veja Google structured data for forums and profile pages - #9 by rrit

3 curtidas

Sem regra sem exceção: Para DiscussionForumPosting, o Google recomenda o uso de Microdata e não JSON-LD.

Veja Discussion Forum (DiscussionForumPosting, SocialMediaPosting) Schema Markup | Google Search Central  |  Documentation  |  Google for Developers

Diretrizes técnicas

  • Ao contrário de nossa preferência geral por dados estruturados, recomendamos fornecer a marcação DiscussionForumPosting em Microdata (ou RDFa), se possível. Isso evita que você precise duplicar grandes blocos de texto dentro da marcação. No entanto, esta é apenas uma recomendação, e o JSON-LD ainda é totalmente suportado.
4 curtidas

Isso já está ativo no meta.discourse.org?

Por favor, veja meu comentário no github:

Toda esta tag link deve ser definida apenas para post.is_first_post - não há necessidade de repeti-la com o URL idêntico para cada item Comment.

No meta.discourse.org, as aspas estão sendo corrompidas no momento:
\u003clink itemprop=\u0026#39;mainEntityOfPage\u0026#39; href=\"…\"\u003e
Veja Schema Markup Validator

3 curtidas

Sim, estamos fazendo isso agora de acordo com o commit recente, mas mesmo após adicionar isso, estamos perdendo alguns campos obrigatórios (author, datePublished, text) para páginas subsequentes (?page=2).

Ótima observação! Corrigido neste PR:

Ah, sim. Isso também foi confirmado por @rrlevering aqui:

Então, acho que teremos que melhorar o esquema de microdados, garantindo que não acabemos duplicando conteúdo em páginas subsequentes.

7 curtidas

Obrigado pela correção na propriedade mainEntityOfPage.

E boa descoberta sobre a tag meta vs. tag link :+1:
<link itemprop='url' content='<%= @topic_view.absolute_url %>'>

Ainda melhor:
<link itemprop='url' href='<%= @topic_view.absolute_url %>'>

Veja:
– Este link é antigo, mas o YouTube ainda usa <link itemprop='url' href='…'> hoje. –

“Para fornecer um URL em HTML5, […] [para a tag link] use o atributo href
“Se você usar um URL como valor do atributo content de um elemento meta, ele representará uma string (parecendo um URL), não um URL.”


Acabei de verificar novamente a documentação fornecida pelo Google sobre DiscussionForumPosting: propriedades:

Propriedades obrigatórias:

  • author
  • author.name
  • datePublished
  • text ou image ou video

Nota especial sobre: text ou image ou video

“Isso não é obrigatório se você estiver representando uma postagem em outra página (com um url externo) como em páginas posteriores de fóruns ou páginas de categoria de fórum.”

Propriedades recomendadas

  • url
  • […]

Nota especial sobre: url

“O URL canônico da discussão. Em tópicos de várias páginas, defina esta propriedade para o URL da primeira página. Para uma única discussão, este é geralmente o URL atual.”

Então, concluo:

  • Não precisamos adicionar text novamente em página=2+ (FEITO)
  • Devemos adicionar a propriedade opcional url - especialmente para página=2+ (FEITO)

Necessidade de investigação adicional:

  • Essas “propriedades obrigatórias” author, author.name e datePublished são realmente obrigatórias na página=2+ ou podemos prosseguir sem repeti-las?
    validator.schema.org não reclama de propriedades ausentes na página=2+. (FEITO)
    → Aguardar e verificar o “Google Search Console → Relatório: Melhorias → Fórum de Discussão” para novos dados em tempo real após essas correções já implementadas estarem ativas por algum tempo. (A FAZER)

Dados Estruturados: ferramentas e recursos

Schema

schema.org

developers.google.com

Validadores

schema.org

  • Validador geral:
    https://validator.schema.org/
    Isso verifica a conformidade dos dados estruturados com as definições do Schema e a conformidade do markup com HTML/XML.
    → Os requisitos verificados seguem o Standard™ e são bastante amplos e não específicos.
    → Recomendo corrigir todos os bugs detectados.

Google Search Console

  • Relatório: Melhorias → Fórum de Discussão:
    https://search.google.com/search-console/r/discussion-forum?hl=en
    Isso fornece feedback direto sobre as informações processadas pelo rastreador do Google.
    Esses relatórios são de alguma forma fatos concretos vinculativos sobre SEO do Google: Se o Google anuncia algo como errado, o Google também acha que está errado - mesmo que não esteja.
    → Se algo for sinalizado como “inválido” ou “a melhorar”, recomendo primeiro pensar em uma correção. E se não houver efeitos colaterais conhecidos, sempre implemente uma correção.

Google: Teste de Resultados Ricos

  • https://search.google.com/test/rich-results?hl=en
    Isso fornece apenas feedback simulado e não é o rastreador do Google.
    Minha opinião: Ferramenta de marketing do Google para dizer aos proprietários de sites “Façam algo sobre seus dados estruturados!”.
    → Esta ferramenta é de alguma forma negligenciada pelo Google e nem sempre está atualizada com as últimas recomendações técnicas fornecidas pelo próprio Google.
    → O Teste de Resultados Ricos nem sempre fornece o mesmo resultado que o Google Search Console – em caso de dúvida: Confie mais no Google Search Console.
5 curtidas

Deixe-me escrever um pseudocódigo para a verificação atual exibida no Search Console. Acho que isso ajudará muito nesses tópicos. Eu poderia enviar a você o ShEx ou SHACL, mas eles são muito menos legíveis por humanos.

    se não (IsDeletedContent() OU IsExternalContent())
       então se não ("text" OU "articleBody" OU "sharedContent" OU "image" ou "video")
         então report(OneOfThreeRequired("text", "image", "video"))
    se não ("author")
       então Report(Required("author"))
    se não("datePublished")
       então Report(Required("datePublished")

A ideia é que, se o DiscussionForumPosting/OP tiver seu conteúdo na página atual, deve haver algum tipo de campo de conteúdo.

Se o DiscussionForumPosting estiver referenciando conteúdo em uma página diferente (como na página original de conteúdo de várias páginas), ele pode ter apenas um stub que contém o que for (como o título do tópico do OP) e, em seguida, referenciar a URL da primeira página. Essa é a verificação IsExternalContent(), que apenas verifica se url != page URL.

O segundo exemplo em nossa documentação deveria modelar exatamente este caso (a 14ª página se refere a uma postagem stub da primeira página).

author e date são atualmente obrigatórios de qualquer forma em nossas regras de validação. Isso é principalmente para evitar um salto extra para encontrar esses dados. Você poderia pelo menos ver como saber a data do OP pode ser útil para entender o quão desatualizado é o comentário. Você pode simplesmente adicionar elementos meta com esses dados? Eu não estava tão preocupado com esses campos em relação ao inchaço da página com dados redundantes.

7 curtidas

Obrigado pelo contexto e pelas dicas, Ryan!

Isso foi feito. Os metadados para páginas subsequentes (página 2 em diante) parecem bons agora!

3 curtidas

Faz sentido adicionar a URL do author enquanto o caminho dela está bloqueado pelo nosso robots.txt padrão? Devemos remover o bloqueio do robots.txt agora que promovemos esses URLs?

2 curtidas