<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Gabriel Gomes de Oliveira</title>
    <description>The latest articles on Forem by Gabriel Gomes de Oliveira (@gabrielgomeso).</description>
    <link>https://forem.com/gabrielgomeso</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F622514%2F8261f119-9caf-430e-b405-71bf2c538478.jpeg</url>
      <title>Forem: Gabriel Gomes de Oliveira</title>
      <link>https://forem.com/gabrielgomeso</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/gabrielgomeso"/>
    <language>en</language>
    <item>
      <title>SEO técnico na prática: estudo de caso do site Novas árvores por aí</title>
      <dc:creator>Gabriel Gomes de Oliveira</dc:creator>
      <pubDate>Tue, 21 May 2024 00:12:46 +0000</pubDate>
      <link>https://forem.com/gabrielgomeso/seo-tecnico-na-pratica-estudo-de-caso-do-site-novas-arvores-por-ai-4d14</link>
      <guid>https://forem.com/gabrielgomeso/seo-tecnico-na-pratica-estudo-de-caso-do-site-novas-arvores-por-ai-4d14</guid>
      <description>&lt;p&gt;Sejam bem-vindos a mais um post sobre SEO! Anteriormente eu expliquei alguns conceitos sobre o que é o tal do &lt;em&gt;Search Engine Optimization&lt;/em&gt; e hoje quis fazer algo mais "mão na massa".&lt;/p&gt;

&lt;p&gt;Muito do conteúdo que vejo é teórico, então decidi utilizar um site real para fazer análises e colocar em prática aquilo que aprendemos.&lt;/p&gt;

&lt;p&gt;O site que vamos analisar é o &lt;a href="https://novasarvoresporai.com.br/" rel="noopener noreferrer"&gt;"Novas árvores por aí"&lt;/a&gt;. Uma ONG que ajuda a repaginar cidades tornando-as mais verdes.&lt;/p&gt;

&lt;p&gt;Segundo o próprio site:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;O Novas Árvores por Aí nasceu para resgatar o verde das matas, há muito trocado pela paisagem cinzenta das grandes cidades. Idealizado pelo ambientalista Nik Sabey, promove desde o plantio de árvores calçadas ao cultivo de pequenos bosques urbanos. Atua também com projetos de paisagismo, jardins de chuva, palestras, cursos, e afins, buscando sempre o resgate da nossa biodiversidade.&lt;br&gt;
O Novas é uma iniciativa que visa incentivar, fomentar, promover e instruir o plantio de árvores nativas.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Eu não sou o mantenedor do site da organização, portanto não conseguirei modificar e ver os resultados das mudanças que estarei sugerindo aqui. Entretanto, pedi permissão para o dono do projeto através do Instagram e ele permitiu que eu fizesse essa análise.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que é SEO on-page?
&lt;/h2&gt;

&lt;p&gt;SEO on-page é um conjunto de técnicas e estruturas que executamos em nossas páginas para ajudar o robô dos mecanismos de pesquisas (Google, Bing, DuckDuckGo, etc) a trilharem seu caminho com tranquilidade e mostrarem nosso site em seus resultados.&lt;/p&gt;

&lt;h2&gt;
  
  
  Análise do SEO on-page
&lt;/h2&gt;

&lt;p&gt;Para fazer a análise de SEO on-page do Novas árvores por aí vamos utilizar diversas ferramentas. Elas vão servir para apontar as falhas e sugerir mudanças que podemos fazer para melhorar a estrutura da nossa página perante os robôs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Busca no Google
&lt;/h3&gt;

&lt;p&gt;A primeira ferramenta que podemos usar é o próprio Google. Uma simples busca já revela muita coisa. Ao pesquisarmos o nome da organização temos esse resultado:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvi9py94nxfeg8s7025et.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvi9py94nxfeg8s7025et.png" alt="Resultado da busca do site Novas Árvores por Aí no Google" width="405" height="158"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nota-se que não é um dos melhores resultados. Não temos um ícone que faça o resultado se destacar, não temos a breve descrição do que aquele site representa e até o título está reduzido. Somente nessa primeira pesquisa, notamos 3 pontos de melhoras:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adicionar &lt;a href="https://developers.google.com/search/docs/appearance/snippet?hl=pt-br" rel="noopener noreferrer"&gt;metatag de description&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;Verificar o porquê o robô do Google não está mostrando o  completo do site (a tag está com o conteúdo 'Novas Árvores por Aí | Nasceu para resgatar o verde das matas', porém o resultado só mostra a primeira parte)&lt;/li&gt;
&lt;li&gt;Adicionar a tag que aponta para o favicon.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Análise no Lighthouse
&lt;/h3&gt;

&lt;p&gt;Em seguida, vamos para a ferramenta &lt;a href="https://chromewebstore.google.com/detail/lighthouse/blipmdconlkpinefehnmjammfjpmpbjk?hl=pt-br" rel="noopener noreferrer"&gt;Lighthouse&lt;/a&gt;, que possui uma opção de análise de SEO:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmsdcji0v3jftg3jdbhx3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmsdcji0v3jftg3jdbhx3.png" alt="Análise de SEO do site Novas Árvores por Aí no Lighthouse" width="800" height="829"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Além da falta de metatag de description, a extensão também apontou que o site está com uma metatag de robots para &lt;code&gt;noindex&lt;/code&gt; e o arquivo robots.txt também. Ou seja, está dizendo para os robôs não indexarem aquela página nos resultados de pesquisa. Apesar da página ainda aparecer, isso é algo que prejudica o desempenho do site na listagem. Tanto que se buscarmos por "ong árvores", "ong novas árvores" ou "ong árvores por aí", que remetem à ong em questão, o site sequer aparece. Várias outras ficam na frente, ou, ainda, as próprias redes sociais da Novas Árvores por Aí se destacam, ignorando a existência do site. Logo, temos mais um a fazer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Alterar valor de metatag robots de "noindex" para "index";&lt;/li&gt;
&lt;li&gt;Remover valor 'noindex' do arquivo robots.txt.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Análise na Detailed SEO
&lt;/h3&gt;

&lt;p&gt;Agora vamos utilizar a extensão &lt;a href="https://chromewebstore.google.com/detail/detailed-seo-extension/pfjdepjjfjjahkjfpkcgfmfhmnakjfba?pli=1" rel="noopener noreferrer"&gt;Detailead SEO&lt;/a&gt; para verificar o que mais precisamos ajustar em nosso site.&lt;/p&gt;

&lt;p&gt;Em primeiro momento, temos essa visão geral do site:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1buxsolmhahcrfngdpqh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1buxsolmhahcrfngdpqh.png" alt="Análise do site pela extensão Detailed SEO" width="669" height="471"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O title está tudo certo, mas, conforme vimos previamente, estamos sem descrição. Além disso, nossa url está como 'not indexable', mostrando mais uma vez a ausência do valor 'index' na meta tag de robots. Visto que já tinhamos isso em nossa lista, seguimos.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8fp7t8iuyn74qhmfe41x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8fp7t8iuyn74qhmfe41x.png" alt="Análise do site pela extensão Detailed SEO" width="678" height="469"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agora temos novos pontos de atenção: não possuímos &lt;code&gt;meta name="keywords"&lt;/code&gt; que definiria nossas palavras-chave e o html do site está na linguagem en-US, sendo que ele é do Brasil! Logo, acrescentamos em nossa lista:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adicionar meta tag de keywords com as palavras-chave referentes ao nosso site; (ex: árvores, ong, reflorestamento).&lt;/li&gt;
&lt;li&gt;Adicionar propriedade lang='pt-br' na tag &lt;code&gt;&amp;lt;html&amp;gt;&lt;/code&gt; (importante para motores de busca e leitores de acessibilidade).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Agora, olhemos os headings da página:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frd3s8etpb1o64rkxkdn5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frd3s8etpb1o64rkxkdn5.png" alt="Aba de Headings pela extensão Detailed SEO" width="671" height="570"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Temos diversos headings iguais, o que o mecanismo de busca pode considerar spam; além disso, a ordem dos headings está invertida (em teoria, o h1 deveria ser o primeiro na página). Outro ponto importante é que o h1 está sendo usado lá embaixo, na terceira dobra da página, com algo que não é o título principal e sim uma seção secundária da página. Com isso, adicionamos em nossa lista:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reorganizar os títulos e remover títulos duplicados.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Agora, na aba 'Images' da extensão Detailed SEO temos uma informação importante: muitas imagens estão sem título e sem descrição alternativa. Ambos são importantes para a acessibilidade de nosso site. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqleld3rkgfjq0bp733ir.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqleld3rkgfjq0bp733ir.png" alt="Aba de Images pela extensão Detailed SEO" width="480" height="163"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Logo, mais uma ação:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adicionar título e alt text nas imagens.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Lembrando que se uma imagem tem apenas valor estético, ela não necessariamente precisa de um texto descritivo. Mas, se fizer parte de algum contexto, se ela fornece ao usuário alguma informação, o texto alternativo é essencial.&lt;/p&gt;

&lt;p&gt;Já na aba 'Schema', vemos os dados estruturados da página. E logo vemos que não há nenhum!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqof1wx50brtzh9ujyow0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqof1wx50brtzh9ujyow0.png" alt="Aba de dados estruturados da extensão Detailed SEO" width="688" height="289"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Eu já fiz uma outra &lt;a href="https://dev.to/gabrielgomeso/melhore-os-resultados-de-pesquisa-do-seu-site-com-dados-estruturados-a81"&gt;publicação explicando o que são, para que servem e como criar dados estruturados em sua página&lt;/a&gt;, portanto, não irei aprofundar esse assunto aqui. Porém, é válido colocar em nossa lista:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adicionar dados estruturados de &lt;a href="https://schema.org/Organization" rel="noopener noreferrer"&gt;Organização&lt;/a&gt; do tipo '&lt;a href="https://schema.org/NGO" rel="noopener noreferrer"&gt;NGO&lt;/a&gt;' (organização não governamental e que não visa lucro).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Ações de melhoria
&lt;/h2&gt;

&lt;p&gt;Com tudo isso exposto, podemos agrupar os problemas que observamos e temos as seguintes ações:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adicionar &lt;a href="https://developers.google.com/search/docs/appearance/snippet?hl=pt-br" rel="noopener noreferrer"&gt;metatag de description&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;Verificar o porquê o robô do Google não está mostrando o  completo do site (a tag está com o conteúdo 'Novas Árvores por Aí | Nasceu para resgatar o verde das matas', porém o resultado só mostra a primeira parte);&lt;/li&gt;
&lt;li&gt;Adicionar a tag que aponta para o favicon;&lt;/li&gt;
&lt;li&gt;Alterar valor de metatag robots de "noindex" para "index";&lt;/li&gt;
&lt;li&gt;Remover valor 'noindex' do arquivo robots.txt;&lt;/li&gt;
&lt;li&gt;Adicionar meta tag de keywords com as palavras-chave referentes ao nosso site; (ex: árvores, ong, reflorestamento);&lt;/li&gt;
&lt;li&gt;Adicionar propriedade lang='pt-br' na tag &lt;code&gt;&amp;lt;html&amp;gt;&lt;/code&gt; (importante para motores de busca e leitores de acessibilidade);&lt;/li&gt;
&lt;li&gt;Reorganizar os títulos e remover títulos duplicados;&lt;/li&gt;
&lt;li&gt;Adicionar título e alt text nas imagens;&lt;/li&gt;
&lt;li&gt;Adicionar dados estruturados de &lt;a href="https://schema.org/Organization" rel="noopener noreferrer"&gt;Organização&lt;/a&gt; do tipo '&lt;a href="https://schema.org/NGO" rel="noopener noreferrer"&gt;NGO&lt;/a&gt;' (organização não governamental e que não visa lucro).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tendo isso em mente, vem a pergunta: "Depois que eu resolver isso, quanto tempo demora para que a minha página apareça no primeiro resultado de todas as pesquisas no Google?". E, infelizmente, não é assim que funciona.&lt;br&gt;
SEO é um grupo de técnicas para melhorar o modo que os robôs veem e navegam pela nossa página. Mas, não necessariamente, isso significa que nosso site vai se tornar o primeiro nas buscas apenas por termos ajustado tudo de acordo. Esse é, na verdade, o primeiro passo de muitos. Temos que nos perguntar diversas outras coisas: como está a performance do nosso site? Nós estamos respondendo as perguntas que o nosso usuário tem quando ele entra em nosso site? As informações do nosso site estão atualizadas?&lt;/p&gt;

&lt;p&gt;O SEO on-page tratado aqui é o primeiro passo. Temos também o SEO off-page (linkagem de outros sites para o seu, marketing, etc), o conteúdo e relevância da nossa página e/ou produto para nos preocupar. E isso vai muito além de decisões de desenvolvimento/engenharia.&lt;/p&gt;

&lt;p&gt;No fim, não é atoa que exista toda uma área para análise de SEO e métricas através de analytics, mas esse são pontos que tratamos conforme vamos nos aprofundando nessa matéria.&lt;br&gt;
Essas são apenas algumas ferramentas e práticas que podemos utilizar para ajustar nossos sites. Caso você se interesse mais, recomendo acompanhar o conteúdo do blog de &lt;a href="https://developers.google.com/search/blog" rel="noopener noreferrer"&gt;Central de Pesquisa do Google &lt;/a&gt; e empresas especializadas na área, como MOZ e Semrush, que estão sempre ensinando algo ou informando dados sobre as ferramentas de pesquisa.&lt;/p&gt;

&lt;p&gt;Meus agradecimentos à ONG Novas Árvores por Aí que me permitiu fazer esse post (sigam eles no &lt;a href="https://www.instagram.com/novasarvoresporai/" rel="noopener noreferrer"&gt;Instagram&lt;/a&gt;); e obrigado para quem leu até aqui, até a próxima!&lt;/p&gt;

&lt;p&gt;P.S: caso você encontre qualquer erro ou tenha uma sugestão de como melhorar essa publicação fique à vontade para me mandar uma mensagem ou comentar abaixo. Críticas são sempre bem-vindas. :)&lt;/p&gt;

</description>
      <category>seo</category>
      <category>webdev</category>
      <category>braziliandevs</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Usando Stimulus para mostrar o nome da imagem no input de arquivo</title>
      <dc:creator>Gabriel Gomes de Oliveira</dc:creator>
      <pubDate>Thu, 28 Mar 2024 23:26:31 +0000</pubDate>
      <link>https://forem.com/gabrielgomeso/usando-stimulus-para-conseguir-o-nome-da-imagem-no-input-de-arquivo-feo</link>
      <guid>https://forem.com/gabrielgomeso/usando-stimulus-para-conseguir-o-nome-da-imagem-no-input-de-arquivo-feo</guid>
      <description>&lt;p&gt;Oi, mais um post rápido para ensinar o que acabei de aprender: a usar o Stimulus para conseguir mostrar ao usuário o nome do arquivo que ele está fazendo upload no input tipo 'file'.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhc0y7w42y5th67gdtojr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhc0y7w42y5th67gdtojr.png" alt="Input type file" width="250" height="47"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;É bem chato não mostrar isso para o usuário e, apesar de ser algo bem simples de ser feito com Javascript puro, eu queria aprender como se faz usando o Stimulus!&lt;/p&gt;

&lt;p&gt;Primeiro, adicionamos nosso &lt;code&gt;data-controller&lt;/code&gt; na tag que engloba o nosso input. No caso, estou modificando um formulário de criação de livros na minha biblioteca pessoal&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;app/views/books/new.html.erb&lt;/code&gt;&lt;/p&gt;


&lt;pre class="highlight html"&gt;&lt;code&gt;  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;data-controller=&lt;/span&gt;&lt;span class="s"&gt;"file-input"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;label&lt;/span&gt; &lt;span class="na"&gt;for=&lt;/span&gt;&lt;span class="s"&gt;"file"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Escolha uma imagem para capa do livro&lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"file"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"file"&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"file"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Nenhum arquivo selecionado...&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/blockquote&gt;

&lt;p&gt;Depois, criamos o &lt;code&gt;file_input_controller&lt;/code&gt; para manipular essa estrutura.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;app/javascript/controllers/file_input_controller&lt;/code&gt;&lt;/p&gt;


&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Controller&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@hotwired/stimulus&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Controller&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/blockquote&gt;

&lt;p&gt;Precisamos então pensar quais são nossos "alvos", &lt;code&gt;targets&lt;/code&gt;, para nossas ações. Queremos que nosso usuário veja o nome do arquivo selecionado após o input, então precisamos verificar o momento que ele faz essa seleção e também precisamos do local onde colocaremos a informação. Então, nossos &lt;code&gt;targets&lt;/code&gt; são o input em si e o parágrafo logo em seguida, que mostra ou não se um arquivo foi escolhido.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;app/views/books/new.html.erb&lt;/code&gt;&lt;/p&gt;


&lt;pre class="highlight html"&gt;&lt;code&gt;  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;data-controller=&lt;/span&gt;&lt;span class="s"&gt;"file-input"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;label&lt;/span&gt; &lt;span class="na"&gt;for=&lt;/span&gt;&lt;span class="s"&gt;"file"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Escolha uma imagem para capa do livro&lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"file"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"file"&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"file"&lt;/span&gt; &lt;span class="na"&gt;data-file-input-target=&lt;/span&gt;&lt;span class="s"&gt;"input"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;data-file-input-target=&lt;/span&gt;&lt;span class="s"&gt;"fileName"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Nenhum arquivo selecionado...&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/blockquote&gt;

&lt;p&gt;Criamos também as variáveis dos &lt;code&gt;targets&lt;/code&gt; em nosso controller:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;app/javascript/controllers/file_input_controller&lt;/code&gt;&lt;/p&gt;


&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Controller&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@hotwired/stimulus&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Controller&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="nx"&gt;targets&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;input&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;fileName&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/blockquote&gt;

&lt;p&gt;Precisamos pensar agora em que momento queremos averiguar essa informação. Ou seja, quando o usuário vai querer ter essa interação com o formulário ou quando ela tem que estar disponível para ele? &lt;/p&gt;

&lt;p&gt;Oras, imediatamente, assim que a página é carregada, isso já precisa estar disponível funcionalmente.&lt;/p&gt;

&lt;p&gt;Dessa forma, vamos chamar o método &lt;code&gt;connect()&lt;/code&gt;, que é um &lt;a href="https://stimulus.hotwired.dev/reference/lifecycle-callbacks" rel="noopener noreferrer"&gt;lifecycle callback&lt;/a&gt; do Stimulus, uma função nativa que vai ser chamada assim que o nosso controller for conectado com alguma parte da DOM.&lt;/p&gt;

&lt;p&gt;Como nós queremos verificar se o usuário adicionou um arquivo pelo input, precisamos adicionar algo que observe qualquer mudança nesse elemento e modifique o texto com o nome do arquivo.&lt;/p&gt;

&lt;p&gt;Assim, temos o seguinte:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;app/javascript/controllers/file_input_controller&lt;/code&gt;&lt;/p&gt;


&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Controller&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@hotwired/stimulus&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Controller&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="nx"&gt;targets&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;input&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;fileName&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

    &lt;span class="nf"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;inputTarget&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;change&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;updateFileName&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;bind&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nf"&gt;updateFileName&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;      
      &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;inputTarget&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;files&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fileNameTarget&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;inputTarget&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;files&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/blockquote&gt;

&lt;p&gt;Explicando tudo, assim que o controller se conectar com o elemento DOM com o atributo &lt;code&gt;data-controller="file-input"&lt;/code&gt;, ele vai buscar o &lt;code&gt;target&lt;/code&gt; input (marcado com o atributo &lt;code&gt;data-file-input-target="input"&lt;/code&gt;) e vai adicionar o "observador de eventos" de &lt;code&gt;change&lt;/code&gt;, conectando o contexto do controller para a função &lt;code&gt;updateFileName&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;A função &lt;code&gt;updateFileName&lt;/code&gt; vai ser ativada quando o valor do input for alterado, verificando se há algum arquivo e, se houver, irá alterar o conteúdo do elemento marcado com o &lt;code&gt;fileNameTarget&lt;/code&gt; para o nome do arquivo. E voilà, é isso, acabou.&lt;/p&gt;

&lt;p&gt;Parando pra pensar agora, acho que eu quero mostrar a imagem para o usuário também, mas isso eu faço outro dia! Abraço&lt;/p&gt;

</description>
      <category>rails</category>
      <category>beginners</category>
      <category>braziliandevs</category>
      <category>stimulus</category>
    </item>
    <item>
      <title>Stimulus é um tesão (ou Como fazer uma navbar responsiva em Rails 7 e Bulma CSS)</title>
      <dc:creator>Gabriel Gomes de Oliveira</dc:creator>
      <pubDate>Fri, 01 Mar 2024 00:20:31 +0000</pubDate>
      <link>https://forem.com/gabrielgomeso/stimulus-e-um-tesao-ou-como-fazer-uma-navbar-responsiva-em-rails-7-e-bulma-css-2j95</link>
      <guid>https://forem.com/gabrielgomeso/stimulus-e-um-tesao-ou-como-fazer-uma-navbar-responsiva-em-rails-7-e-bulma-css-2j95</guid>
      <description>&lt;p&gt;Esse post é bem rápido e simples, pra seguir ele é necessário  conhecimento básico em Ruby on Rails. Se você já manja muito de Rails e Stimulus, esse post não é para você! (por isso a #beginners XD).&lt;/p&gt;

&lt;p&gt;De toda forma, gostaria de deixar registrado como aprendi a fazer uma simples navbar responsiva para um projetinho Rails 7 em que estou trabalhando.&lt;/p&gt;

&lt;h2&gt;
  
  
  Configurações
&lt;/h2&gt;

&lt;p&gt;Ruby 3.3.0 &lt;br&gt;
Rails 7.1.3&lt;br&gt;
&lt;a href="https://github.com/joshuajansen/bulma-rails" rel="noopener noreferrer"&gt;gem bulma-rails na versão 0.9.4&lt;/a&gt;&lt;br&gt;
gem "stimulus-rails"&lt;/p&gt;
&lt;h2&gt;
  
  
  Pequenos detalhes
&lt;/h2&gt;

&lt;p&gt;Pra esse exemplo estou usando o código &lt;a href="https://bulma.io/documentation/components/navbar/#basic-navbar" rel="noopener noreferrer"&gt;"Basic navbar" do Bulma CSS&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs9.gifyu.com%2Fimages%2FSF53o.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs9.gifyu.com%2Fimages%2FSF53o.gif" title="Vídeo da navbar sendo aberta e fechada na versão mobile" alt="Vídeo da navbar sendo aberta e fechada na versão mobile"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O problema que eu quero resolver com esse post é o uso de javascript no projeto Rails. &lt;br&gt;
Para abrir e fechar a navbar, a documentação do Bulma CSS sugira que eu use esse código:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;DOMContentLoaded&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

  &lt;span class="c1"&gt;// Pega todos os elementos "navbar-burger"&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;$navbarBurgers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prototype&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelectorAll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.navbar-burger&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Adiciona o evento de click em cada um deles&lt;/span&gt;
  &lt;span class="nx"&gt;$navbarBurgers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nx"&gt;el&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;click&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

      &lt;span class="c1"&gt;// Pega o alvo a partir do atributo "data-target" que vem no navbar&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;target&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;$target&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

      &lt;span class="c1"&gt;// Alternar a classe "is-active" do Bulma CSS tanto no "navbar-burger" e no "navbar-menu"&lt;/span&gt;
      &lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;classList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toggle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;is-active&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nx"&gt;$target&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;classList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toggle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;is-active&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A questão é que eu estava tendo dificuldades para adicionar isso na minha aplicação e sempre que eu trocava de rota, a navbar parava de abrir. O código só funcionava uma vez.&lt;br&gt;
Quando perguntei &lt;a href="https://t.me/rubybrasil" rel="noopener noreferrer"&gt;no grupo do Telegram Ruby Brasil&lt;/a&gt; a respeito, me foi sugerido que eu fizesse um "controller do Stimulus"&lt;br&gt;
Eu já tinha ouvido falar a respeito dessa ferramenta, mas ainda não tinha tentado usá-la; então fui aprender.&lt;/p&gt;
&lt;h2&gt;
  
  
  Stimulus
&lt;/h2&gt;

&lt;p&gt;Sem me aprofundar muito no assunto, o Stimulus é uma "framework de Javascript modesta para o HTML que você já tem". Ou seja, ele é uma ferramenta que te ajuda a manipular seu documento HTML usando javascript e alguns atributos especiais nas tags HTML.&lt;/p&gt;

&lt;p&gt;Como eu quero fazer um controller relacionado ao navbar, eu criei dentro da pasta &lt;code&gt;app/javascript/controllers&lt;/code&gt; o arquivo &lt;code&gt;navbar_controller.js&lt;/code&gt;.&lt;br&gt;
Inicializei ele da forma padrão:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Controller&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@hotwired/stimulus&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Controller&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Depois disso, criei uma partial navbar com o código do Basic Navbar do Bulma CSS&lt;/p&gt;

&lt;p&gt;&lt;code&gt;app/views/layouts/_navbar.html.erb&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;nav&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"navbar is-transparent container is-max-desktop"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"navbar-brand"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"navbar-item"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://bulma.io/images/bulma-logo.png"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"Bulma: a modern CSS framework based on Flexbox"&lt;/span&gt; &lt;span class="na"&gt;width=&lt;/span&gt;&lt;span class="s"&gt;"112"&lt;/span&gt; &lt;span class="na"&gt;height=&lt;/span&gt;&lt;span class="s"&gt;"28"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"navbar-burger"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"navbar-menu"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"navbar-start"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"navbar-item"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        Início
      &lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"navbar-item"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/books"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        Catálogo
      &lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"navbar-item"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        Assinatura
      &lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"navbar-item"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/books/new"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        Adicionar livro
      &lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"navbar-end"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"navbar-item"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"field is-grouped"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"control"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"bd-tw-button button"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
              &lt;span class="nt"&gt;&amp;lt;span&amp;gt;&lt;/span&gt;
                Entrar
              &lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"control"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"button is-primary"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
              &lt;span class="nt"&gt;&amp;lt;span&amp;gt;&lt;/span&gt;Criar conta&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/nav&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O que precisamos fazer é adicionar a classe "is-active" à div com a classe "navbar-menu" quando a div "navbar-burger" receber um click, e depois remover a classe "is-active" quando o burger receber outro click.&lt;br&gt;
Dessa forma, precisamos estabelecer para o navbar_controller qual é a "área" que ele vai atuar, ou seja, qual elemento vai ser controlado ou gerenciado.&lt;br&gt;
Para isso, colocamos o atributo &lt;code&gt;data-controller="navbar"&lt;/code&gt; em nosso navbar, ficando assim:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;nav class="navbar is-transparent container is-max-desktop" data-controller="navbar"&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Depois, precisamos definir qual elemento vai possuir a ação gerenciada pelo controller. Como queremos que seja o navbar-burger, colocamos um atributo chamado data-action, cujo valor tem o seguinte formado: ação-&amp;gt;controller#função&lt;br&gt;
O navbar burger fica assim:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;div class="navbar-burger" data-action="click-&amp;gt;navbar#toggle"&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;E então precisamos ver qual é o elemento que será afetado por essa ação. Nosso "alvo" é o menu em si. Então, devemos colocar o atributo data-controller-target, substituindo "controller" pelo nome dado ao nosso controller. Ou seja:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;div class="navbar-menu" data-navbar-target="menu"&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Mas aí você se pergunta: que diabo de função é essa?&lt;br&gt;
E eu te respondo!&lt;br&gt;
Lá no nosso &lt;code&gt;navbar_controller.js&lt;/code&gt;, vamos adicionar a função &lt;code&gt;toggle()&lt;/code&gt;, que é a função que vai ser ativada quando houver um click no navbar-burger.&lt;br&gt;
A função vai pegar o elemento "alvo" (target) e fazer a alternação na classe "is-active". Só que para pegar nosso elemento alvo, precisamos registrá-lo.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;app/javascript/controllers/navbar_controller.js&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Controller&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@hotwired/stimulus&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Controller&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="nx"&gt;targets&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;menu&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Todos nossos targets devem ser registrados dentro desse array, passando o valor que colocamos no atributo "data-navbar-target".&lt;br&gt;
Dessa forma, conseguiremos acessar nosso target a partir da expressão &lt;code&gt;this.menuTarget&lt;/code&gt;.&lt;br&gt;
Assim, conseguiremos acessar toda a estrutura HTML desse elemento, podendo inclusive manipular suas classes! E, portanto, resolvendo nosso problema:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Controller&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@hotwired/stimulus&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Controller&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="nx"&gt;targets&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;menu&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

    &lt;span class="nf"&gt;toggle&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;menuTarget&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;classList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toggle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;is-active&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com isso, conseguimos reduzir todas aquelas 7 linhas de JS puro em 3 atributos HTML e uma função simples com Stimulus.&lt;br&gt;
Eu achei bem divertido fazer isso, é um código extremamente simples e fico imaginando as diversas possibilidades mais complexas as quais essa ferramenta pode nos ajudar a atuar.&lt;br&gt;
Espero que essa publicação seja útil a alguém e é isso!&lt;br&gt;
Para mais exemplos de Stimulus recomendo fortemente &lt;a href="https://stimulus.hotwired.dev/handbook/hello-stimulus" rel="noopener noreferrer"&gt;sua documentação&lt;/a&gt; e as aulas do &lt;a href="https://www.theodinproject.com/lessons/ruby-on-rails-stimulus" rel="noopener noreferrer"&gt;The Odin Project&lt;/a&gt;!&lt;/p&gt;

</description>
      <category>braziliandevs</category>
      <category>rails</category>
      <category>stimulus</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Melhore os resultados de pesquisa do seu site com Dados Estruturados</title>
      <dc:creator>Gabriel Gomes de Oliveira</dc:creator>
      <pubDate>Mon, 09 Oct 2023 15:00:00 +0000</pubDate>
      <link>https://forem.com/gabrielgomeso/melhore-os-resultados-de-pesquisa-do-seu-site-com-dados-estruturados-a81</link>
      <guid>https://forem.com/gabrielgomeso/melhore-os-resultados-de-pesquisa-do-seu-site-com-dados-estruturados-a81</guid>
      <description>&lt;h2&gt;
  
  
  O que são Dados Estruturados?
&lt;/h2&gt;

&lt;p&gt;Sabe quando dá aquela vontade de comer um doce maneiro e você joga no Google "receita bolo de cenoura" e vários resultados com foto, avaliações e tempo de preparo aparecem? Tipo assim:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3da3qfb5c4onhwrgll9a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3da3qfb5c4onhwrgll9a.png" alt="Resultado da pesquisa 'receita bolo de cenoura' no Google demonstrando a formatação em que os resultados são mostrados quando utilizam-se dados estruturados" width="800" height="649"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Os dados estruturados são uma formatação específica na qual essas informações precisam ser colocadas para que os resultados das pesquisas tenham um certo destaque, um embelezamento, igual esses cards de receitas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Por que utilizar Dados Estruturados?
&lt;/h2&gt;

&lt;p&gt;Como podemos ver acima, utilizar essa ferramenta faz com que os resultados sejam apresentados de maneira mais chamativa e acertiva para o nosso usuário.&lt;br&gt;
Ele não é um fator que fará seu site aparecer nos primeiros resultados de pesquisa, mas &lt;a href="https://developers.google.com/search/docs/appearance/structured-data/intro-structured-data?hl=pt-br" rel="noopener noreferrer"&gt;existem estudos que demonstram uma melhora no posicionamento&lt;/a&gt; das páginas que utilizam o formato.&lt;br&gt;
Segundo a própria Google:&lt;/p&gt;

&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;O Rotten Tomatoes adicionou dados estruturados a 100 mil páginas únicas e mediu uma taxa de cliques 25% maior nas páginas aprimoradas com dados estruturados, em comparação às páginas sem esse recurso.&lt;/li&gt;
&lt;li&gt;O Food Network converteu 80% das páginas deles para ativar os recursos de pesquisa e registrou um aumento de 35% nos acessos.&lt;/li&gt;
&lt;li&gt;A Rakuten descobriu que os usuários passam 1,5 vez mais tempo acessando páginas com dados estruturados do que em páginas sem dados estruturados. Além disso, há uma taxa de interação 3,6 vezes maior em páginas AMP com recursos de pesquisa.&lt;/li&gt;
&lt;li&gt;A Nestlé identificou uma taxa de cliques 82% mais alta nas páginas que exibem pesquisas aprimoradas em comparação às que não apresentam o recurso.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ou seja, é sem dúvida algo essencial para aprimorar o SEO da suas páginas e facilitar a vida do usuário para que ele encontre as respostas corretas para a busca que fez.&lt;/p&gt;
&lt;h2&gt;
  
  
  De onde vem os Dados Estruturados?
&lt;/h2&gt;

&lt;p&gt;Essa formatação foi criada pela organização &lt;a href="https://schema.org" rel="noopener noreferrer"&gt;Schema.org&lt;/a&gt; para padronizar os dados nas páginas web e oferecer uma melhor experiência para os usuários. A organização foi fundada e é mantida por um grupo de empresas compostas pela Google, Microsoft, Yahoo e Yandex.&lt;br&gt;
O projeto é open-source e pode ser encontrado no &lt;a href="https://github.com/schemaorg/schemaorg" rel="noopener noreferrer"&gt;Github&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Tipos de Dados Estruturados
&lt;/h2&gt;

&lt;p&gt;Anteriormente vimos que receitas são um dos tipos de dados estruturados que faz com que a Google apresente o resultado com uma formatação diferenciada. Além de receitas, livros, produtos, perguntas frequentes, filmes, anúncios de emprego e vídeos, também aparecem de forma diferenciada nos resultados quando formatados com dados estruturados.&lt;br&gt;
Apesar do Schema.org ter criado um formato para praticamente tudo o que existe, não é todo tipo de conteúdo que será "estilizado" pelo Google. Há &lt;a href="https://developers.google.com/search/docs/appearance/enriched-search-results?hl=pt-br" rel="noopener noreferrer"&gt;uma lista que pode ser encontrada na documentação da Central de Pesquisa&lt;/a&gt; que mostra tudo o que é possível fazer com essas formatações.&lt;br&gt;
De qualquer forma, ainda que você atue com um dado não tratado pelo Google, é interessante já deixar a formatação de acordo com o que o Schema.org propõe, uma vez que a ferramenta de pesquisa está em constante atualização e novas formas podem ser acrescentadas ao longo do tempo.&lt;/p&gt;
&lt;h2&gt;
  
  
  Formatação dos Dados Estruturados
&lt;/h2&gt;

&lt;p&gt;Há três tipos de formatação de dados estruturados propostos no site da Schema.org e aceitos pelo Google: Microdata, RDFa e JSON-LD. Eu particularmente utilizei apenas o formato JSON-LD e ele é o &lt;a href="https://developers.google.com/search/docs/appearance/structured-data/intro-structured-data#supported-formats" rel="noopener noreferrer"&gt;mais recomendado pela Google atualmente&lt;/a&gt;, mas você vai ter que julgar, dependendo da linguagem de programação ou framework que utiliza, qual é a forma de implementação mais vantajosa para seu projeto.&lt;/p&gt;
&lt;h2&gt;
  
  
  Utilizando Dados Estruturados
&lt;/h2&gt;

&lt;p&gt;Vamos pegar o exemplo dos dados estruturados para uma receita. Ao entrar na Schema.org, encontramos a entidade "Recipe": &lt;a href="https://schema.org/Recipe" rel="noopener noreferrer"&gt;https://schema.org/Recipe&lt;/a&gt;&lt;br&gt;
Temos uma tabela imensa com todas as possíveis propriedades que essa entidade pode possuir, mas podemos pular lá para o final da documentação e seguir os exemplos que ela propõe.&lt;br&gt;
Se você tiver um site ou blog de receitas, por exemplo, vemos que todas as informações necessárias para criar os dados estruturados, em tese, já estariam em seu site, você apenas teria que criar uma tag &lt;code&gt;&amp;lt;script type="application/ld+json"&amp;gt;&lt;/code&gt; na tag &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; do seu HTML preenchendo as informações necessárias no formato correto, como o da receita de bolo de cenoura, retirado no site da "&lt;a href="https://www.tudogostoso.com.br/receita/23-bolo-de-cenoura.html" rel="noopener noreferrer"&gt;Tudo Gostoso&lt;/a&gt;":&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;script type="application/ld+json"&amp;gt;
{
  "@context": "http://schema.org/",
    "@type": "Recipe",
    "name": "Bolo de cenoura",
    "url": "https://www.tudogostoso.com.br/receita/23-bolo-de-cenoura.html",
    "image" : {
        "@context": "http://schema.org",
        "@type": "ImageObject",
        "author": {
                    "@context": "http://schema.org",
                    "@type": "Organization",
                    "name": "TudoGostoso"
                },
        "url": "https://static.itdg.com.br/images/1200-675/d290bc79bcad112ee9095604e45eb262/365326-original.jpg"
    },
    "author": {
        "@context": "http://schema.org",
        "@type": "Organization",
        "name": "TudoGostoso"
    },
    "datePublished": "2019-04-01",
            "description": "Confira como fazer essa receita de bolo de cenoura simples e f&amp;amp;amp;aacute;cil, nossa campe&amp;amp;amp;atilde; de acessos! Uma receita pr&amp;amp;amp;aacute;tica, feita com aux&amp;amp;amp;iacute;lio do liquidificador e perfeita para o caf&amp;amp;amp;eacute; da manh&amp;amp;amp;atilde; e para a hora do lanche!",
        "aggregateRating": {
        "@type": "AggregateRating",
        "reviewCount": "156",
        "ratingValue": "4.7",
        "ratingCount": "14387",
        "bestRating": 5,
        "worstRating": 1
    },        "keywords" : "Receita de Bolo de cenoura",            "prepTime": "PT40M",                "totalTime": "PT40M",    "recipeYield": "8 porções","recipeCategory" : "Bolos e tortas doces",
            "recipeIngredient": ["1\/2 xícara (chá) de óleo","3 cenouras médias raladas","4 ovos","2 xícaras (chá) de açúcar","2 e 1\/2 xícaras (chá) de farinha de trigo","1 colher (sopa) de fermento em pó","1 colher (sopa) de manteiga","3 colheres (sopa) de chocolate em pó","1 xícara (chá) de açúcar","1 xícara (chá) de leite"],        "recipeInstructions": [{
                "@type": "HowToStep",                    "name": "Massa",
                "text": "Em um liquidificador, adicione a cenoura, os ovos e o &amp;amp;amp;oacute;leo, depois misture.",
                "url": "https://www.tudogostoso.com.br/receita/23-bolo-de-cenoura.html#recipe-step1"
            },{
                "@type": "HowToStep","text": "Acrescente o a&amp;amp;amp;ccedil;&amp;amp;amp;uacute;car e bata novamente por 5 minutos.",
                "url": "https://www.tudogostoso.com.br/receita/23-bolo-de-cenoura.html#recipe-step2"
            },{
                "@type": "HowToStep","text": "Em uma tigela ou na batedeira, adicione a farinha de trigo e depois misture novamente.",
                "url": "https://www.tudogostoso.com.br/receita/23-bolo-de-cenoura.html#recipe-step3"
            },{
                "@type": "HowToStep","text": "Acrescente o fermento e misture lentamente com uma colher.",
                "url": "https://www.tudogostoso.com.br/receita/23-bolo-de-cenoura.html#recipe-step4"
            },{
                "@type": "HowToStep","text": "Asse em um forno preaquecido a 180&amp;amp;amp;deg; C por aproximadamente 40 minutos.",
                "url": "https://www.tudogostoso.com.br/receita/23-bolo-de-cenoura.html#recipe-step5"
            },{
                "@type": "HowToStep",                    "name": "Cobertura",
                "text": "Despeje em uma tigela a manteiga, o chocolate em p&amp;amp;amp;oacute;, o a&amp;amp;amp;ccedil;&amp;amp;amp;uacute;car e o leite, depois misture.",
                "url": "https://www.tudogostoso.com.br/receita/23-bolo-de-cenoura.html#recipe-step6"
            },{
                "@type": "HowToStep","text": "Leve a mistura ao fogo e continue misturando at&amp;amp;amp;eacute; obter uma consist&amp;amp;amp;ecirc;ncia cremosa, depois despeje a calda por cima do bolo.",
                "url": "https://www.tudogostoso.com.br/receita/23-bolo-de-cenoura.html#recipe-step7"
            }]
}
&amp;lt;/script&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Observando a estrutura acima, vemos todas as informações necessárias para que o robô da Google chegue em nosso site e mostre em seus resultados o que ele oferece, no caso, a receita de bolo de cenoura. Temos ali o tipo de dado estruturado (receita), o autor da receita, a descrição da receita, links para imagens, o passo a passo, os ingredientes.&lt;br&gt;
Também vemos que dentro de uma mesma entidade temos algumas outras entidades, como imagem (&lt;code&gt;ImageObject&lt;/code&gt;), autor (&lt;code&gt;Author&lt;/code&gt;), avaliação agregada (&lt;code&gt;AggregateRating&lt;/code&gt;), "passo a passo de como fazer" (&lt;code&gt;HowToStep&lt;/code&gt;). &lt;br&gt;
De início pode parecer muita coisa, mas esse tipo de informação não precisa ser decorada ou lembrada, cada estrutura segue um padrão e há diversos exemplos tanto no site do Schema.org, quanto no próprio &lt;a href="https://developers.google.com/search/docs/appearance/structured-data/search-gallery?hl=pt-br" rel="noopener noreferrer"&gt;guia de recursos da Google&lt;/a&gt;, que inclusive é um local de consulta recomendado justamente para você ver quais são as informações mais importantes de cada estrutura que a Google usa nas pesquisas.&lt;/p&gt;
&lt;h2&gt;
  
  
  Validando os Dados Estruturados
&lt;/h2&gt;

&lt;p&gt;Supondo que fizemos tudo isso do 0 e queremos validar essa estrutura de receita, podemos pegar essa estrutura e jogar no &lt;a href="https://search.google.com/test/rich-results" rel="noopener noreferrer"&gt;site de teste de pesquisa aprimorada&lt;/a&gt; que a própria Google oferece:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvrx6u3pzamoqjpre8q1d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvrx6u3pzamoqjpre8q1d.png" alt="Teste de dados estruturados do exemplo de receita de bolo de cenoura" width="800" height="414"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ali temos nosso código e cada dado estruturado é um "item" que a ferramenta vai validar. Se esquecermos ou omitirmos alguma informação, por exemplo os ingredientes da receita, isso faz com que a estrutura seja inválida. Nesse caso, precisaríamos ajustar essa informação.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuehzfwjeqcz5kq8l77o2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuehzfwjeqcz5kq8l77o2.png" alt="Teste de dados estruturados do exemplo de receita de bolo de cenoura com informações inválidas" width="800" height="667"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Na imagem acima temos uma lista com 1 erro crítico e 17 erros não críticos. É essencial solucionar o crítico, mas como os não críticos são opcionais, fica de acordo com as suas prioridades, pois não necessariamente são fatores que atrapalhariam o ranqueamento, ainda que sejam informações úteis aos usuários.&lt;/p&gt;
&lt;h2&gt;
  
  
  Resumo da ópera
&lt;/h2&gt;

&lt;p&gt;É tudo bem simples para falar a verdade. Acho que podemos resumir isso em um passo a passo:&lt;br&gt;
Identificar os dados -&amp;gt; encontrar a estrutura -&amp;gt; preencher a estrutura com os dados necessários -&amp;gt; validar.&lt;br&gt;
Se na validação surgir algum problema, é só fazer os ajustes necessários.&lt;/p&gt;
&lt;h2&gt;
  
  
  Ferramentas úteis
&lt;/h2&gt;

&lt;p&gt;Você certamente não vai validar esses dados "à mão"! Sem dúvida alguma isso tudo é muito trabalho para ser feito sem ajuda! Para isso, há diversas ferramentas que podem nos ajudar a criar, validar e até a verificar quais dados estruturados outros sites utilizam para que possamos nos inspirar.&lt;/p&gt;
&lt;h3&gt;
  
  
  Ferramentas para criação
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Editor e gerador para o formato JSON-LD: &lt;a href="https://json-ld.org/playground/" rel="noopener noreferrer"&gt;https://json-ld.org/playground/&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Gerador para o formato JSON-LD: &lt;a href="https://technicalseo.com/tools/schema-markup-generator/" rel="noopener noreferrer"&gt;https://technicalseo.com/tools/schema-markup-generator/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Ferramentas para validação
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;A própria Google tem seu validador, que vinculado com o seu site irá te alertar via e-mail todas as alterações e erros de dados estruturados que você possuir: &lt;a href="https://search.google.com/test/rich-results" rel="noopener noreferrer"&gt;https://search.google.com/test/rich-results&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;A Schema.org também possui o seu próprio validador: &lt;a href="https://validator.schema.org/" rel="noopener noreferrer"&gt;https://validator.schema.org/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Ferramentas de verificação
&lt;/h3&gt;

&lt;p&gt;Há diversas extensões para diversos navegadores que vasculham o site que você precisar verificar. Essas são algumas que eu utilizei: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://chrome.google.com/webstore/detail/openlink-structured-data/egdaiaihbdoiibopledjahjaihbmjhdj/" rel="noopener noreferrer"&gt;OpenLink Structured Data Sniffer&lt;/a&gt; muito útil para analisar quais dados estruturados estão presentes e em qual formato eles foram colocados no site que você ativar a extensão. Porém a sua interface não é tão bacana;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://chrome.google.com/webstore/detail/detailed-seo-extension/pfjdepjjfjjahkjfpkcgfmfhmnakjfba" rel="noopener noreferrer"&gt;Detailed SEO Extension&lt;/a&gt; é uma extensão delicinha que não só vai te mostrar dados estruturados como diversos outros aspectos de validação de SEO, como a utilização de meta tags, headings, estrutura HTML, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Finalização
&lt;/h2&gt;

&lt;p&gt;Os dados estruturados são uma de muitas ferramentas relacionadas ao SEO de uma página web. Se você não sabe o que é SEO, eu tenho uma publicação a respeito disso aqui mesmo:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link"&gt;
  &lt;a href="/gabrielgomeso" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F622514%2F8261f119-9caf-430e-b405-71bf2c538478.jpeg" alt="gabrielgomeso"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/gabrielgomeso/introducao-ao-seo-seo-00-2bh6" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Introdução ao SEO&lt;/h2&gt;
      &lt;h3&gt;Gabriel Gomes de Oliveira ・ May 16 '22&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#seo&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#tutorial&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#portuguese&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;Esse é um assunto bem extenso, mas caso você queira se aprofundar nele eu recomendo fortemente a leitura do Centro de Pesquisas da Google, lá você vai encontrar vários exemplos e tudo o que o motor de busca leva em consideração quando o robozinho deles passa no seu site. &lt;br&gt;&lt;br&gt;
Cabe lembrar que não existem métodos de fazer com que sua página apareça em 1° lugar nas pesquisas imediatamente. Esse é um trabalho que demora meses e possivelmente anos. Seguir todas as recomendações ajuda muito, mas não há receita mágica para isso (apesar dos gurus de SEO estarem tentando descobrir algo assim desde sempre).&lt;br&gt;&lt;br&gt;
De qualquer forma, é uma área em constante mudança e que requer estudo, como todos os outros assuntos da programação!&lt;/p&gt;

&lt;p&gt;Bom, tudo isso posto, agradeço a atenção de vocês e tô indo ali comer meu bolinho de cenoura&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx46k88h5nmebf1c4zw3r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx46k88h5nmebf1c4zw3r.png" alt="Bolo de cenoura com muita cobertura de chocolate e granulê" width="612" height="412"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(Eu juro que tem cenoura embaixo de toda essa cobertura)&lt;/p&gt;

</description>
      <category>seo</category>
      <category>webdev</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>Introdução ao SEO</title>
      <dc:creator>Gabriel Gomes de Oliveira</dc:creator>
      <pubDate>Mon, 16 May 2022 12:02:31 +0000</pubDate>
      <link>https://forem.com/gabrielgomeso/introducao-ao-seo-seo-00-2bh6</link>
      <guid>https://forem.com/gabrielgomeso/introducao-ao-seo-seo-00-2bh6</guid>
      <description>&lt;h2&gt;
  
  
  Por que aprender sobre SEO?
&lt;/h2&gt;

&lt;p&gt;Desde que comecei a estudar desenvolvimento web sempre ouvi frases como "Temos que usar as tags HTML corretamente para melhorar o desempenho do SEO", mas eu nunca soube nada além disso.&lt;br&gt;
Quando mudei de time no trabalho e passei a integrar o time de tráfego (onde um dos objetivos é aumentar o número de visitas no site da empresa), o assunto começou a aparecer com frequência e vi que precisava aprender a respeito. &lt;br&gt;
Resumidamente, o estudo de SEO gira em torno de um conjunto de ferramentas, termos e práticas que devem ser padronizadas tanto na área de produto quanto na área de desenvolvimento para que um site possua uma boa relevância, apareça e se mantenha como um resultado acima das empresas concorrentes nos mecanismos de pesquisa.&lt;br&gt;
SEO é uma área de estudos densa, extremamente específica e relativamente nebulosa. O que eu quero dizer com isso é: existem boas práticas para melhorar o desempenho do SEO, mas em certo momento não dá para saber exatamente como os mecanismos de pesquisa funcionam com profundidade, &lt;a href="https://www.seroundtable.com/google-dont-understand-rankbrain-21744.html" rel="noopener noreferrer"&gt;isso porque nem mesmo os funcionários da Google sabem como funciona o algoritmo de pesquisa muito bem&lt;/a&gt;.&lt;br&gt;
De todas as formas, existem sim ferramentas para medir tudo isso e boas práticas que podemos adotar. Os desenvolvedores também deveriam aprender esse tema, uma vez que ele está vinculado diretamente com nossa área e, dependendo do site de seu cliente, é totalmente relevante para ele que seu site tenha um bom ranqueamento nas pesquisas (ou seja, apareça nas primeiras colocações no resultado das pesquisas feita pelos usuários).&lt;/p&gt;

&lt;h2&gt;
  
  
  O que é SEO?
&lt;/h2&gt;

&lt;p&gt;SEO, search engine optimization, é exatamente o que a tradução literal diz: a otimização do mecanismo de pesquisa. Os mecanismos de pesquisa são: Google, Bing, DuckDuckGo, Baidu, dentre outros. &lt;br&gt;
Essa otimização se dá pelo conjunto de boas práticas adotadas tanto pelos desenvolvedores quanto por aqueles que inserem algum tipo de conteúdo no site, seja produtos num ecommerce, publicações em um blog de receitas, notícias em algum portal ou qualquer informação importante.&lt;br&gt;
Aprimorar o SEO significa:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;melhorar a visibilidade em mecanismos de pesquisa (Google, Bing, DuckDuckGo, Baidu, etc);&lt;/li&gt;
&lt;li&gt;aumentar o tráfego orgânico no seu site (ou seja, quando você não precisa para aparecer como um link patrocinado no topo das pesquisas);&lt;/li&gt;
&lt;li&gt;facilitar as pessoas a acharem o seu site (você pode ter o melhor site de receitas do mundo, mas se ele estiver na segunda página do Google ninguém vai até lá para encontrá-lo);&lt;/li&gt;
&lt;li&gt;estar ranqueado em melhores posições nos resultados quando as pesquisas usam palavras-chave relevantes ao seu serviço.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Por que SEO é importante?
&lt;/h2&gt;

&lt;p&gt;Existe um ditado famoso chamado "quem é visto não é lembrado". E basicamente é isso. As práticas de SEO, unidas com práticas de marketing, são coisas que fazem com que mais pessoas encontrem seu produto final. &lt;br&gt;
Mas SEO não é só sobre seu produto ser visto ou ele aparecer em primeiro em todas as pesquisas, é sobre a experiência do usuário ser boa e ele conseguir encontrar o que estava procurando.&lt;br&gt;
O Guia de SEO para iniciantes, da Google, resume esse conceito no seguinte trecho:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Em geral, o processo de otimização de mecanismos de pesquisa (SEO) se dá com a realização de pequenas modificações em partes do seu site. Essas mudanças podem parecer pequenas melhorias quando vistas individualmente, mas, combinadas com outras otimizações, o impacto em termos de experiência do usuário e de resultados da pesquisa orgânica é notável. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Tráfego pago &lt;em&gt;versus&lt;/em&gt; tráfego orgânico
&lt;/h2&gt;

&lt;p&gt;Anteriormente, quando citei que o SEO aumenta o tráfego orgânico do site, foi para mostrar também que pouquíssimas pessoas clicam em anúncios pagos, como mostra essa pesquisa feita nos Estados Unidos entre 2015 e 2017.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F69jvek4kr3zzqty8oosm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F69jvek4kr3zzqty8oosm.png" alt="Gráfico demonstrando que apenas 2% das pessoas clicam em links patrocinados ao pesquisarem algo no site da Google entre 2015 e 2017, nos Estados Unidos." width="800" height="409"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Dessa forma, quando você tem uma presença orgânica nos resultados das pesquisas, acaba se tornando mais relevante do que se você pagar um link patrocinado (o que também tem seu aspecto de influência, mas isso já é outra área).&lt;/p&gt;

&lt;h2&gt;
  
  
  Mecanismos de Pesquisa
&lt;/h2&gt;

&lt;p&gt;Apesar de listarmos vários mecanismos de pesquisa, a Google obviamente possui o maior de todos, tendo mais de 90% de marketshare do que os demais. Cada um dos mecanismos de pesquisa possui uma série de boas práticas para que o seu site ou o site de seu cliente seja colocado em melhores posicionamentos. Por conta desse domínio da Google, acabamos focando nas boas práticas que a sua ferramenta sugere, mas voltaremos nessas especificidades depois.&lt;br&gt;
A questão é: Como os mecanismos de pesquisa funcionam? Como eles encontram algum site?&lt;br&gt;
Os mecanismos de pesquisa possuem robôs que "rastejam" pelas páginas, os chamados crawlers, muitas vezes associados com aranhas que vão tecendo suas teias. Eles vão indexando todos os links que encontram nas páginas e conectando uns aos outros. Essa é uma das formas de tornar seu site mais relevante: quando um link direcionando para ele aparece em locais indexados por esses robôs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Como ser encontrado pelos mecanismos de pesquisa
&lt;/h2&gt;

&lt;p&gt;Os mecanismos de pesquisa podem encontrar o seu site de forma automática ou manual.&lt;br&gt;
Na forma automática, os crawlers acham seu site quando outros sites possuem link direcionando para ele. Ou seja, algum blog, site de notícia, a Wikipédia, ou qualquer outro referencia o seu site com um link. &lt;br&gt;
Porém, se você possui um site novinho em folha, é bem difícil que ele esteja listado em algum lugar da internet, o que nos leva para o cadastro manual nas plataformas dos mecanismos de pesquisa. Se o site for de algum comércio local, restaurante ou similares, essa pesquisa fica mais forte quando a empresa possui um registro bem feito no &lt;a href="https://www.google.com.br/intx/pt-PT/business/manage.html" rel="noopener noreferrer"&gt;Google My Business&lt;/a&gt;, por ter as funcionalidades de localização, informações gerais do estabelecimento e avaliações.&lt;br&gt;
Na forma manual, você registra o seu domínio nas ferramentas dos próprios mecanismos de pesquisa. A Google possui o &lt;a href="https://search.google.com/search-console/about" rel="noopener noreferrer"&gt;Google Search Console&lt;/a&gt;, o &lt;a href="https://www.bing.com/webmasters/about" rel="noopener noreferrer"&gt;Bing&lt;/a&gt; e &lt;a href="https://www.seomandarin.com/baidu-webmaster-tools" rel="noopener noreferrer"&gt;Baidu&lt;/a&gt; possuem seus respectivos Webmaster Tools. O DuckDuckGo, por sua vez, não tem uma ferramenta similar, uma vez que o mecanismo preza pela privacidade dos dados dos usuários e não rastreia o que é mais clicado/buscado, restando a primeira tática de ser linkado por algum site relevante.&lt;br&gt;
No futuro estudarei o passo a passo de cada um deles e faço um resumo a respeito, mas, por hora, é importante apontar que cada plataforma tem quase as mesmas funcionalidades, mostrando estatísticas e informações sobre quantidades de acessos e métricas para que você possa tentar melhorar o SEO e o seu ranqueamento.&lt;/p&gt;

&lt;h3&gt;
  
  
  Guiando os robôs
&lt;/h3&gt;

&lt;p&gt;Existem algumas formas de guiar os robôs pelo seu site. Pode acontecer dos buscadores mostrarem páginas restritas que não deveriam ou deixarem de mostrar páginas importantes. Para facilitar essa "navegação", existem os &lt;strong&gt;sitemaps&lt;/strong&gt;, que são o que o próprio nome diz: um "mapa" com os links que seu site possui, os que você quer que os robôs encontrem. Ele deve ser submetido junto ao seu site e existem vários formatos possíveis para isso. O Google Search Console inclusive possui uma ferramenta para que você cadastre o link do seu sitemap. Mais informações sobre isso &lt;a href="https://developers.google.com/search/docs/advanced/sitemaps/build-sitemap?hl=en&amp;amp;visit_id=637872796215456697-2279882056&amp;amp;rd=1#xml" rel="noopener noreferrer"&gt;aqui &lt;/a&gt;(em inglês).&lt;br&gt;
Há o &lt;strong&gt;Robots.txt&lt;/strong&gt;, um arquivo relativamente similar onde você pode listar quais páginas quer ou não que os robôs encontrem. Mais informações &lt;a href="https://moz.com/learn/seo/robotstxt" rel="noopener noreferrer"&gt;aqui&lt;/a&gt; (em inglês).&lt;br&gt;
Além disso, as &lt;strong&gt;meta tags&lt;/strong&gt;, que também ajudam os crawlers a entender o que está nas páginas do seu site. Mais informações &lt;a href="https://developers.google.com/search/docs/advanced/robots/robots_meta_tag?csw=1" rel="noopener noreferrer"&gt;aqui&lt;/a&gt; (em inglês). &lt;/p&gt;

&lt;p&gt;Nos próximos posts irei explicar a respeito das meta tags e das demais ferramentas. Se quiserem se aprofundar no assunto, todos os links disponíveis possuem mais informações, lembrando que este é um resumo de um humilde estudante :) &lt;br&gt;
Até a próxima!&lt;/p&gt;

&lt;p&gt;Referências&lt;br&gt;
2020 Search Market Share - &lt;a href="https://www.webfx.com/blog/seo/2019-search-market-share/" rel="noopener noreferrer"&gt;https://www.webfx.com/blog/seo/2019-search-market-share/&lt;/a&gt;&lt;br&gt;
4 Search Engine Optimization Techniques for DuckDuckGo - &lt;a href="https://searchengineland.com/4-search-engine-optimization-techniques-duck-duck-go-212912" rel="noopener noreferrer"&gt;https://searchengineland.com/4-search-engine-optimization-techniques-duck-duck-go-212912&lt;/a&gt;&lt;br&gt;
Baidu Webmaster Tools - &lt;a href="https://www.seomandarin.com/baidu-webmaster-tools" rel="noopener noreferrer"&gt;https://www.seomandarin.com/baidu-webmaster-tools&lt;/a&gt;&lt;br&gt;
Bing Webmaster Tools - &lt;a href="https://www.bing.com/webmasters/about" rel="noopener noreferrer"&gt;https://www.bing.com/webmasters/about&lt;/a&gt;&lt;br&gt;
Google Search Console - &lt;a href="https://search.google.com/search-console/about" rel="noopener noreferrer"&gt;https://search.google.com/search-console/about&lt;/a&gt;&lt;br&gt;
Guia de otimização de mecanismos de pesquisa (SEO) para iniciantes - &lt;a href="https://developers.google.com/search/docs/beginner/seo-starter-guide?hl=pt-br" rel="noopener noreferrer"&gt;https://developers.google.com/search/docs/beginner/seo-starter-guide?hl=pt-br&lt;/a&gt;&lt;br&gt;
How to Submit a Website to Search Engines - &lt;a href="https://www.bruceclay.com/seo/submit-website/" rel="noopener noreferrer"&gt;https://www.bruceclay.com/seo/submit-website/&lt;/a&gt;&lt;br&gt;
Is SEO Opportunity Growing or Shrinking? - &lt;a href="https://sparktoro.com/blog/seo-opportunity-growing-shrinking/" rel="noopener noreferrer"&gt;https://sparktoro.com/blog/seo-opportunity-growing-shrinking/&lt;/a&gt;&lt;br&gt;
SEO 101 - &lt;a href="https://moz.com/beginners-guide-to-seo/why-search-engine-marketing-is-necessary" rel="noopener noreferrer"&gt;https://moz.com/beginners-guide-to-seo/why-search-engine-marketing-is-necessary&lt;/a&gt;&lt;/p&gt;

</description>
      <category>seo</category>
      <category>webdev</category>
      <category>tutorial</category>
      <category>portuguese</category>
    </item>
  </channel>
</rss>
