[{"data":1,"prerenderedAt":1721},["ShallowReactive",2],{"pt-BR-article-\u002Fblog\u002Fcomo-criar-dados-estruturados-com-nuxtjs":3,"pt-BR-related-posts-\u002Fblog\u002Fcomo-criar-dados-estruturados-com-nuxtjs":1563},{"id":4,"title":5,"articleCover":6,"articleCoverEmbed":7,"articleCoverEmbedUploadDate":7,"articleCoverHeight":8,"articleCoverWidth":9,"authorId":10,"body":11,"categoriesIds":1543,"description":1547,"enAlternateSlug":1548,"extension":1549,"meta":1550,"navigation":565,"path":1551,"ptBrAlternateSlug":1552,"publishedAt":1553,"seo":1554,"sitemap":1555,"stem":1560,"updatedAt":1559,"wordCount":1561,"__hash__":1562},"blog\u002Fblog\u002Fcomo-criar-dados-estruturados-com-nuxtjs.md","Como Adicionar Dados Estruturados no Nuxt.JS","\u002Fimages\u002Fblog\u002Fseo\u002Fstructured-data\u002Fstructured-data-thumb-1.webp",null,720,1280,"thiago-nunes-batista",{"type":12,"value":13,"toc":1515},"minimark",[14,23,28,31,38,42,52,59,66,70,73,83,231,235,238,251,254,258,261,275,279,294,297,306,313,338,344,359,370,437,440,444,454,501,515,833,846,851,859,984,1004,1008,1051,1055,1061,1206,1209,1215,1219,1228,1232,1235,1256,1259,1287,1291,1294,1313,1316,1319,1323,1326,1334,1338,1341,1356,1366,1369,1417,1420,1424,1436,1440,1444,1450,1454,1457,1461,1464,1468,1471,1475,1478,1482,1491,1511],[15,16,17,18,22],"p",{},"Aqui você vê o que são Dados Estruturados, quando usar, quando não usar e como marcar os artigos do seu blog no Nuxt.JS com o ",[19,20,21],"code",{},"nuxt-schema-org",". Depois vem a validação da marcação e o que fazer para o Google descobrir e indexar o conteúdo e, quando possível, recomendá-lo no Discover.",[24,25,27],"h2",{"id":26},"o-que-são-dados-estruturados","O que são Dados Estruturados?",[15,29,30],{},"Dados estruturados são informações de um site que estão organizadas de forma padronizada em formatos como JSON-LD, Microdata ou RDFa. O Google recomenda o JSON-LD, que fica separado do HTML visível e é o mais simples de manter, e é o formato que vamos usar aqui.",[15,32,33,34,37],{},"Através dos dados estruturados os mecanismos de busca como o Google recebem mais informações sobre o que se trata a sua página e, com base nessas informações, juntamente com outros fatores, os mecanismos de busca podem fazer a exibição de ",[19,35,36],{},"Resultados Ricos"," de páginas do seu site nos resultados de busca.",[24,39,41],{"id":40},"o-que-são-rich-snippets","O que são Rich Snippets ?",[15,43,44,45,48,49,51],{},"Os ",[19,46,47],{},"Rich Snippets"," ou ",[19,50,36],{}," são melhorias visuais nos resultados de busca como imagens, preços, breadcrumbs, estrelas de avaliação, etc.",[15,53,54,55,58],{},"Abaixo você pode conferir um exemplo de Resultado Rico no Google do site ",[19,56,57],{},"Yahoo Finances",", onde uma imagem é exibida, título e data de publicação. Essas informações e recursos visuais aumentam a chance de chamar a atenção do usuário e fazer ele acessar o seu site.",[60,61],"img",{"alt":62,"height":63,"src":64,"width":65},"exemplo de resultado rico de busca no Google do site Yahoo Finances",358,"\u002Fimages\u002Fblog\u002Fseo\u002Fstructured-data\u002Fyahoo-finances-schema-org-rich-result.webp",688,[24,67,69],{"id":68},"exemplo-do-código-de-dado-estruturado","Exemplo do Código de Dado Estruturado",[15,71,72],{},"Abaixo você pode ver um exemplo de dados estruturados em JSON-LD. Não se preocupe, você não vai precisar escrever isso manualmente, vamos usar uma ferramenta do Nuxt para gerar o código.",[74,75,76],"blockquote",{},[15,77,78,79,82],{},"Este exemplo usa ",[19,80,81],{},"FAQPage",", que foi o tipo mais comum de resultado rico durante anos. O Google parou de exibir o resultado rico de FAQ em 7 de maio de 2026, para qualquer tipo de site, e removeu a documentação do recurso em junho. A marcação continua válida no schema.org, mas hoje ela só descreve o conteúdo e não muda a aparência do seu resultado na busca.",[84,85,90],"pre",{"className":86,"code":87,"language":88,"meta":89,"style":89},"language-html shiki shiki-themes dracula","\u003Cscript type=\"application\u002Fld+json\">\n  {\n    \"@type\": \"FAQPage\",\n    \"@context\": \"https:\u002F\u002Fschema.org\",\n    \"@graph\": [\n      {\n        \"@id\": \"https:\u002F\u002Fcodigoaoponto.com\u002Ftools\u002Fcpf-generator\u002F#\u002Fschema\u002Fquestion\u002Fc6e1aab\",\n        \"@type\": \"Question\",\n        \"inLanguage\": \"pt-BR\",\n        \"name\": \"O que é um Gerador de CPF?\",\n        \"acceptedAnswer\": {\n          \"@type\": \"Answer\",\n          \"text\": \"Um Gerador de CPF é uma ferramenta que gera números de CPF válidos, sendo útil para testes e desenvolvimento de sistemas. Ele aplica o algoritmo oficial de validação do CPF para assegurar que os números criados estejam formatados corretamente.\"\n        }\n      }\n    ]\n  }\n\u003C\u002Fscript>\n","html","",[19,91,92,125,131,137,143,149,155,161,167,173,179,185,191,197,203,209,215,221],{"__ignoreMap":89},[93,94,97,101,105,109,112,116,120,122],"span",{"class":95,"line":96},"line",1,[93,98,100],{"class":99},"sCdxs","\u003C",[93,102,104],{"class":103},"s0Tla","script",[93,106,108],{"class":107},"sY_PY"," type",[93,110,111],{"class":103},"=",[93,113,115],{"class":114},"seVfx","\"",[93,117,119],{"class":118},"s-mGx","application\u002Fld+json",[93,121,115],{"class":114},[93,123,124],{"class":99},">\n",[93,126,128],{"class":95,"line":127},2,[93,129,130],{"class":99},"  {\n",[93,132,134],{"class":95,"line":133},3,[93,135,136],{"class":99},"    \"@type\": \"FAQPage\",\n",[93,138,140],{"class":95,"line":139},4,[93,141,142],{"class":99},"    \"@context\": \"https:\u002F\u002Fschema.org\",\n",[93,144,146],{"class":95,"line":145},5,[93,147,148],{"class":99},"    \"@graph\": [\n",[93,150,152],{"class":95,"line":151},6,[93,153,154],{"class":99},"      {\n",[93,156,158],{"class":95,"line":157},7,[93,159,160],{"class":99},"        \"@id\": \"https:\u002F\u002Fcodigoaoponto.com\u002Ftools\u002Fcpf-generator\u002F#\u002Fschema\u002Fquestion\u002Fc6e1aab\",\n",[93,162,164],{"class":95,"line":163},8,[93,165,166],{"class":99},"        \"@type\": \"Question\",\n",[93,168,170],{"class":95,"line":169},9,[93,171,172],{"class":99},"        \"inLanguage\": \"pt-BR\",\n",[93,174,176],{"class":95,"line":175},10,[93,177,178],{"class":99},"        \"name\": \"O que é um Gerador de CPF?\",\n",[93,180,182],{"class":95,"line":181},11,[93,183,184],{"class":99},"        \"acceptedAnswer\": {\n",[93,186,188],{"class":95,"line":187},12,[93,189,190],{"class":99},"          \"@type\": \"Answer\",\n",[93,192,194],{"class":95,"line":193},13,[93,195,196],{"class":99},"          \"text\": \"Um Gerador de CPF é uma ferramenta que gera números de CPF válidos, sendo útil para testes e desenvolvimento de sistemas. Ele aplica o algoritmo oficial de validação do CPF para assegurar que os números criados estejam formatados corretamente.\"\n",[93,198,200],{"class":95,"line":199},14,[93,201,202],{"class":99},"        }\n",[93,204,206],{"class":95,"line":205},15,[93,207,208],{"class":99},"      }\n",[93,210,212],{"class":95,"line":211},16,[93,213,214],{"class":99},"    ]\n",[93,216,218],{"class":95,"line":217},17,[93,219,220],{"class":99},"  }\n",[93,222,224,227,229],{"class":95,"line":223},18,[93,225,226],{"class":99},"\u003C\u002F",[93,228,104],{"class":103},[93,230,124],{"class":99},[24,232,234],{"id":233},"quando-usar-dados-estruturados","Quando usar dados estruturados?",[15,236,237],{},"Use Dados Estruturados quando:",[239,240,241,245,248],"ul",{},[242,243,244],"li",{},"O conteúdo da página for de alguma das categorias suportadas, como exemplo: artigos, produtos, receitas, eventos, vagas de emprego, etc.",[242,246,247],{},"Desejar aumentar a visibilidade das suas páginas e a taxa de cliques (CTR).",[242,249,250],{},"Querer ajudar mecanismos de busca a entender melhor o conteúdo do seu site.",[15,252,253],{},"Em qualquer caso, o que você marca precisa estar visível para o usuário na página, e as propriedades precisam ser mantidas atualizadas.",[24,255,257],{"id":256},"quando-não-usar-dados-estruturados","Quando não usar dados estruturados ?",[15,259,260],{},"Evite usar Dados Estruturados quando:",[239,262,263,266,269,272],{},[242,264,265],{},"Conteúdo da página não se encaixa nas categorias suportadas.",[242,267,268],{},"Conteúdo de baixa qualidade, os dados estruturados não auxiliam na melhoria do conteúdo.",[242,270,271],{},"Conteúdo mudar com frequência, pois se tornará custoso realizar atualizações tão frequentes dessas informações.",[242,273,274],{},"O conteúdo marcado não aparece na página. O Google trata isso como uso indevido de dados estruturados e pode aplicar uma ação manual no seu site.",[24,276,278],{"id":277},"instalação-do-pacote-schemaorg-no-nuxt","Instalação do pacote Schema.org no Nuxt",[15,280,281,282,289,290,293],{},"O ",[283,284,288],"a",{"href":285,"rel":286},"https:\u002F\u002Fnuxtseo.com",[287],"nofollow","Nuxt SEO"," é uma coleção de módulos de SEO que facilitam o desenvolvimento de ",[19,291,292],{},"SEO técnico"," para o seu site. Para este tutorial nós vamos utilizar o módulo que facilitará a implementação dos estruturados.",[15,295,296],{},"Você pode realizar a instalação desse módulo de várias formas, aqui vou exemplificar as duas principais:",[298,299,300,303],"ol",{},[242,301,302],{},"nuxi (Interface de linha de comando oficial do Nuxt)",[242,304,305],{},"npm (Gerenciador de pacotes)",[15,307,308,309,312],{},"Se você for utilizar o ",[19,310,311],{},"nuxi",", basta executar o seguinte comando:",[84,314,318],{"className":315,"code":316,"language":317,"meta":89,"style":89},"language-bash shiki shiki-themes dracula","npx nuxi module add schema-org\n","bash",[19,319,320],{"__ignoreMap":89},[93,321,322,326,329,332,335],{"class":95,"line":96},[93,323,325],{"class":324},"sAOxA","npx",[93,327,328],{"class":118}," nuxi",[93,330,331],{"class":118}," module",[93,333,334],{"class":118}," add",[93,336,337],{"class":118}," schema-org\n",[15,339,308,340,343],{},[19,341,342],{},"npm",", terá que fazer uma etapa extra, comece instalando o pacote:",[84,345,347],{"className":315,"code":346,"language":317,"meta":89,"style":89},"npm i nuxt-schema-org\n",[19,348,349],{"__ignoreMap":89},[93,350,351,353,356],{"class":95,"line":96},[93,352,342],{"class":324},[93,354,355],{"class":118}," i",[93,357,358],{"class":118}," nuxt-schema-org\n",[15,360,361,362,365,366,369],{},"E depois adicione o pacote instalado na opção de ",[19,363,364],{},"modules"," dentro do arquivo ",[19,367,368],{},"nuxt.config.ts",":",[84,371,375],{"className":372,"code":373,"language":374,"meta":89,"style":89},"language-js shiki shiki-themes dracula","export default defineNuxtConfig({\n  \u002F\u002F outras configurações....\n  modules: [\n    \u002F\u002F outros módulos\n    \"nuxt-schema-org\"\n  ]\n  \u002F\u002F outras configurações...s\n});\n","js",[19,376,377,391,397,407,412,422,427,432],{"__ignoreMap":89},[93,378,379,382,385,388],{"class":95,"line":96},[93,380,381],{"class":103},"export",[93,383,384],{"class":103}," default",[93,386,387],{"class":324}," defineNuxtConfig",[93,389,390],{"class":99},"({\n",[93,392,393],{"class":95,"line":127},[93,394,396],{"class":395},"shSDL","  \u002F\u002F outras configurações....\n",[93,398,399,402,404],{"class":95,"line":133},[93,400,401],{"class":99},"  modules",[93,403,369],{"class":103},[93,405,406],{"class":99}," [\n",[93,408,409],{"class":95,"line":139},[93,410,411],{"class":395},"    \u002F\u002F outros módulos\n",[93,413,414,417,419],{"class":95,"line":145},[93,415,416],{"class":114},"    \"",[93,418,21],{"class":118},[93,420,421],{"class":114},"\"\n",[93,423,424],{"class":95,"line":151},[93,425,426],{"class":99},"  ]\n",[93,428,429],{"class":95,"line":157},[93,430,431],{"class":395},"  \u002F\u002F outras configurações...s\n",[93,433,434],{"class":95,"line":163},[93,435,436],{"class":99},"});\n",[15,438,439],{},"Feito isso, já podemos começar a utilizar a ferramenta.",[24,441,443],{"id":442},"dados-estruturados-para-artigos-no-nuxtjs","Dados Estruturados para Artigos no Nuxt.JS",[15,445,446,447,450,451,453],{},"Para um blog, o tipo mais útil é o ",[19,448,449],{},"Article",". Ele diz ao Google que a página é um artigo, quem escreveu, quando foi publicado e atualizado e qual imagem o representa. O Google não exige nenhuma propriedade para ",[19,452,449],{},", mas recomenda estas:",[239,455,456,462,468,478,495],{},[242,457,458,461],{},[19,459,460],{},"headline",": o título do artigo.",[242,463,464,467],{},[19,465,466],{},"image",": uma imagem representativa. O Google recomenda várias imagens em alta resolução, nas proporções 16x9, 4x3 e 1x1.",[242,469,470,473,474,477],{},[19,471,472],{},"datePublished"," e ",[19,475,476],{},"dateModified",": data da primeira publicação e da última modificação, em formato ISO 8601.",[242,479,480,483,484,487,488,473,491,494],{},[19,481,482],{},"author",": de preferência um ",[19,485,486],{},"Person"," com ",[19,489,490],{},"name",[19,492,493],{},"url",", apontando para uma página que identifique o autor.",[242,496,497,500],{},[19,498,499],{},"publisher",": a organização por trás do site, com nome e logo.",[15,502,503,504,507,508,511,512,514],{},"No Nuxt estará disponível de forma global o ",[19,505,506],{},"composable"," chamado ",[19,509,510],{},"useSchemaOrg",", que você pode usar dentro da tag ",[19,513,104],{}," da página. Em uma página de blog que carrega o post com o Nuxt Content, ele fica assim:",[84,516,520],{"className":517,"code":518,"language":519,"meta":89,"style":89},"language-vue shiki shiki-themes dracula","\u003Cscript setup lang=\"ts\">\nconst route = useRoute();\n\nconst { data: post } = await useAsyncData(`post-${route.path}`, () =>\n  queryCollection(\"blog\").path(route.path).first()\n);\n\nuseSchemaOrg([\n  defineArticle({\n    headline: post.value?.title,\n    description: post.value?.description,\n    image: post.value?.articleCover,\n    datePublished: post.value?.publishedAt,\n    dateModified: post.value?.updatedAt ?? post.value?.publishedAt\n  }),\n  defineBreadcrumb({\n    itemListElement: [\n      { name: \"Home\", item: \"\u002F\" },\n      { name: \"Blog\", item: \"\u002Fblog\" },\n      { name: post.value?.title }\n    ]\n  })\n]);\n\u003C\u002Fscript>\n","vue",[19,521,522,545,561,567,611,640,645,649,656,663,673,683,693,703,719,724,731,740,770,797,807,812,818,824],{"__ignoreMap":89},[93,523,524,526,528,531,534,536,538,541,543],{"class":95,"line":96},[93,525,100],{"class":99},[93,527,104],{"class":103},[93,529,530],{"class":107}," setup",[93,532,533],{"class":107}," lang",[93,535,111],{"class":103},[93,537,115],{"class":114},[93,539,540],{"class":118},"ts",[93,542,115],{"class":114},[93,544,124],{"class":99},[93,546,547,550,553,555,558],{"class":95,"line":127},[93,548,549],{"class":103},"const",[93,551,552],{"class":99}," route ",[93,554,111],{"class":103},[93,556,557],{"class":324}," useRoute",[93,559,560],{"class":99},"();\n",[93,562,563],{"class":95,"line":133},[93,564,566],{"emptyLinePlaceholder":565},true,"\n",[93,568,569,571,574,576,579,581,584,587,590,593,596,599,602,605,608],{"class":95,"line":139},[93,570,549],{"class":103},[93,572,573],{"class":99}," { data",[93,575,369],{"class":103},[93,577,578],{"class":99}," post } ",[93,580,111],{"class":103},[93,582,583],{"class":103}," await",[93,585,586],{"class":324}," useAsyncData",[93,588,589],{"class":99},"(",[93,591,592],{"class":118},"`post-",[93,594,595],{"class":103},"${",[93,597,598],{"class":99},"route.path",[93,600,601],{"class":103},"}",[93,603,604],{"class":118},"`",[93,606,607],{"class":99},", () ",[93,609,610],{"class":103},"=>\n",[93,612,613,616,618,620,623,625,628,631,634,637],{"class":95,"line":145},[93,614,615],{"class":324},"  queryCollection",[93,617,589],{"class":99},[93,619,115],{"class":114},[93,621,622],{"class":118},"blog",[93,624,115],{"class":114},[93,626,627],{"class":99},").",[93,629,630],{"class":324},"path",[93,632,633],{"class":99},"(route.path).",[93,635,636],{"class":324},"first",[93,638,639],{"class":99},"()\n",[93,641,642],{"class":95,"line":151},[93,643,644],{"class":99},");\n",[93,646,647],{"class":95,"line":157},[93,648,566],{"emptyLinePlaceholder":565},[93,650,651,653],{"class":95,"line":163},[93,652,510],{"class":324},[93,654,655],{"class":99},"([\n",[93,657,658,661],{"class":95,"line":169},[93,659,660],{"class":324},"  defineArticle",[93,662,390],{"class":99},[93,664,665,668,670],{"class":95,"line":175},[93,666,667],{"class":99},"    headline",[93,669,369],{"class":103},[93,671,672],{"class":99}," post.value?.title,\n",[93,674,675,678,680],{"class":95,"line":181},[93,676,677],{"class":99},"    description",[93,679,369],{"class":103},[93,681,682],{"class":99}," post.value?.description,\n",[93,684,685,688,690],{"class":95,"line":187},[93,686,687],{"class":99},"    image",[93,689,369],{"class":103},[93,691,692],{"class":99}," post.value?.articleCover,\n",[93,694,695,698,700],{"class":95,"line":193},[93,696,697],{"class":99},"    datePublished",[93,699,369],{"class":103},[93,701,702],{"class":99}," post.value?.publishedAt,\n",[93,704,705,708,710,713,716],{"class":95,"line":199},[93,706,707],{"class":99},"    dateModified",[93,709,369],{"class":103},[93,711,712],{"class":99}," post.value?.updatedAt ",[93,714,715],{"class":103},"??",[93,717,718],{"class":99}," post.value?.publishedAt\n",[93,720,721],{"class":95,"line":205},[93,722,723],{"class":99},"  }),\n",[93,725,726,729],{"class":95,"line":211},[93,727,728],{"class":324},"  defineBreadcrumb",[93,730,390],{"class":99},[93,732,733,736,738],{"class":95,"line":217},[93,734,735],{"class":99},"    itemListElement",[93,737,369],{"class":103},[93,739,406],{"class":99},[93,741,742,745,747,750,753,755,758,760,762,765,767],{"class":95,"line":223},[93,743,744],{"class":99},"      { name",[93,746,369],{"class":103},[93,748,749],{"class":114}," \"",[93,751,752],{"class":118},"Home",[93,754,115],{"class":114},[93,756,757],{"class":99},", item",[93,759,369],{"class":103},[93,761,749],{"class":114},[93,763,764],{"class":118},"\u002F",[93,766,115],{"class":114},[93,768,769],{"class":99}," },\n",[93,771,773,775,777,779,782,784,786,788,790,793,795],{"class":95,"line":772},19,[93,774,744],{"class":99},[93,776,369],{"class":103},[93,778,749],{"class":114},[93,780,781],{"class":118},"Blog",[93,783,115],{"class":114},[93,785,757],{"class":99},[93,787,369],{"class":103},[93,789,749],{"class":114},[93,791,792],{"class":118},"\u002Fblog",[93,794,115],{"class":114},[93,796,769],{"class":99},[93,798,800,802,804],{"class":95,"line":799},20,[93,801,744],{"class":99},[93,803,369],{"class":103},[93,805,806],{"class":99}," post.value?.title }\n",[93,808,810],{"class":95,"line":809},21,[93,811,214],{"class":99},[93,813,815],{"class":95,"line":814},22,[93,816,817],{"class":99},"  })\n",[93,819,821],{"class":95,"line":820},23,[93,822,823],{"class":99},"]);\n",[93,825,827,829,831],{"class":95,"line":826},24,[93,828,226],{"class":99},[93,830,104],{"class":103},[93,832,124],{"class":99},[15,834,835,836,838,839,842,843,845],{},"Os campos vêm do front matter do artigo, então o ",[19,837,476],{}," só reflete a realidade se você atualizar o ",[19,840,841],{},"updatedAt"," quando mudar o conteúdo de verdade. O módulo converte as datas para ISO 8601 e transforma o caminho da imagem em URL absoluta a partir da ",[19,844,493],{}," do site.",[847,848,850],"h3",{"id":849},"configuração-global-do-site","Configuração global do site",[15,852,853,854,856,857,369],{},"Autor e editora não precisam ser repetidos em cada página. O ",[19,855,21],{}," usa a configuração do site e a identidade da organização, que você define uma vez no ",[19,858,368],{},[84,860,863],{"className":861,"code":862,"language":540,"meta":89,"style":89},"language-ts shiki shiki-themes dracula","export default defineNuxtConfig({\n  site: {\n    url: \"https:\u002F\u002Fseusite.com\",\n    name: \"Nome do Site\"\n  },\n  schemaOrg: {\n    identity: defineOrganization({\n      name: \"Nome do Site\",\n      logo: \"https:\u002F\u002Fseusite.com\u002Flogo-512.png\"\n    })\n  }\n});\n",[19,864,865,875,885,902,916,921,930,942,957,971,976,980],{"__ignoreMap":89},[93,866,867,869,871,873],{"class":95,"line":96},[93,868,381],{"class":103},[93,870,384],{"class":103},[93,872,387],{"class":324},[93,874,390],{"class":99},[93,876,877,880,882],{"class":95,"line":127},[93,878,879],{"class":99},"  site",[93,881,369],{"class":103},[93,883,884],{"class":99}," {\n",[93,886,887,890,892,894,897,899],{"class":95,"line":133},[93,888,889],{"class":99},"    url",[93,891,369],{"class":103},[93,893,749],{"class":114},[93,895,896],{"class":118},"https:\u002F\u002Fseusite.com",[93,898,115],{"class":114},[93,900,901],{"class":99},",\n",[93,903,904,907,909,911,914],{"class":95,"line":139},[93,905,906],{"class":99},"    name",[93,908,369],{"class":103},[93,910,749],{"class":114},[93,912,913],{"class":118},"Nome do Site",[93,915,421],{"class":114},[93,917,918],{"class":95,"line":145},[93,919,920],{"class":99},"  },\n",[93,922,923,926,928],{"class":95,"line":151},[93,924,925],{"class":99},"  schemaOrg",[93,927,369],{"class":103},[93,929,884],{"class":99},[93,931,932,935,937,940],{"class":95,"line":157},[93,933,934],{"class":99},"    identity",[93,936,369],{"class":103},[93,938,939],{"class":324}," defineOrganization",[93,941,390],{"class":99},[93,943,944,947,949,951,953,955],{"class":95,"line":163},[93,945,946],{"class":99},"      name",[93,948,369],{"class":103},[93,950,749],{"class":114},[93,952,913],{"class":118},[93,954,115],{"class":114},[93,956,901],{"class":99},[93,958,959,962,964,966,969],{"class":95,"line":169},[93,960,961],{"class":99},"      logo",[93,963,369],{"class":103},[93,965,749],{"class":114},[93,967,968],{"class":118},"https:\u002F\u002Fseusite.com\u002Flogo-512.png",[93,970,421],{"class":114},[93,972,973],{"class":95,"line":175},[93,974,975],{"class":99},"    })\n",[93,977,978],{"class":95,"line":181},[93,979,220],{"class":99},[93,981,982],{"class":95,"line":187},[93,983,436],{"class":99},[15,985,986,987,989,990,992,993,487,995,473,997,999,1000,1003],{},"Se o ",[19,988,449],{}," não tiver ",[19,991,499],{},", o módulo usa essa identidade. Para o autor, passe um ",[19,994,486],{},[19,996,490],{},[19,998,493],{}," no ",[19,1001,1002],{},"defineArticle",".",[847,1005,1007],{"id":1006},"como-as-entidades-se-ligam","Como as entidades se ligam",[15,1009,1010,1011,1014,1015,1018,1019,1018,1022,1018,1024,473,1026,1029,1030,1033,1034,1036,1037,1039,1040,1042,1043,1045,1046,473,1048,1050],{},"O módulo monta um único ",[19,1012,1013],{},"@graph"," em que ",[19,1016,1017],{},"WebSite",", ",[19,1020,1021],{},"WebPage",[19,1023,449],{},[19,1025,486],{},[19,1027,1028],{},"Organization"," se referenciam por ",[19,1031,1032],{},"@id",". O ",[19,1035,449],{}," aponta para a ",[19,1038,1021],{}," atual, e o ",[19,1041,482],{}," e o ",[19,1044,499],{}," apontam para os nós de ",[19,1047,486],{},[19,1049,1028],{},". Essa ligação diz ao Google que o artigo pertence àquele autor e àquela marca.",[847,1052,1054],{"id":1053},"e-o-faqpage","E o FAQPage?",[15,1056,1057,1058,1060],{},"Se a página tem uma seção de perguntas e respostas visível, ainda vale marcar com ",[19,1059,81],{},". Só não espere o dropdown na busca. O exemplo abaixo gera o mesmo JSON-LD que vimos antes:",[84,1062,1064],{"className":517,"code":1063,"language":519,"meta":89,"style":89},"\u003Cscript setup>\nuseSchemaOrg([\n  defineWebPage({\n    \"@type\": \"FAQPage\"\n  }),\n  defineQuestion({\n    name: \"O que é um Gerador de CPF?\",\n    acceptedAnswer:\n      \"Um Gerador de CPF é uma ferramenta que gera números de CPF válidos, sendo útil para testes e desenvolvimento de sistemas. Ele aplica o algoritmo oficial de validação do CPF para assegurar que os números criados estejam formatados corretamente.\"\n  }),\n  defineQuestion({\n    name: \"Como funciona o Gerador de CPF?\",\n    acceptedAnswer:\n      \"O Gerador de CPF cria aleatoriamente os nove primeiros dígitos do CPF e, em seguida, calcula os dois dígitos verificadores usando o algoritmo de validação oficial, assegurando que o número gerado seja válido.\"\n  })\n]);\n\u003C\u002Fscript>\n",[19,1065,1066,1076,1082,1089,1106,1110,1117,1132,1140,1150,1154,1160,1175,1181,1190,1194,1198],{"__ignoreMap":89},[93,1067,1068,1070,1072,1074],{"class":95,"line":96},[93,1069,100],{"class":99},[93,1071,104],{"class":103},[93,1073,530],{"class":107},[93,1075,124],{"class":99},[93,1077,1078,1080],{"class":95,"line":127},[93,1079,510],{"class":324},[93,1081,655],{"class":99},[93,1083,1084,1087],{"class":95,"line":133},[93,1085,1086],{"class":324},"  defineWebPage",[93,1088,390],{"class":99},[93,1090,1091,1093,1096,1098,1100,1102,1104],{"class":95,"line":139},[93,1092,416],{"class":114},[93,1094,1095],{"class":118},"@type",[93,1097,115],{"class":114},[93,1099,369],{"class":103},[93,1101,749],{"class":114},[93,1103,81],{"class":118},[93,1105,421],{"class":114},[93,1107,1108],{"class":95,"line":145},[93,1109,723],{"class":99},[93,1111,1112,1115],{"class":95,"line":151},[93,1113,1114],{"class":324},"  defineQuestion",[93,1116,390],{"class":99},[93,1118,1119,1121,1123,1125,1128,1130],{"class":95,"line":157},[93,1120,906],{"class":99},[93,1122,369],{"class":103},[93,1124,749],{"class":114},[93,1126,1127],{"class":118},"O que é um Gerador de CPF?",[93,1129,115],{"class":114},[93,1131,901],{"class":99},[93,1133,1134,1137],{"class":95,"line":163},[93,1135,1136],{"class":99},"    acceptedAnswer",[93,1138,1139],{"class":103},":\n",[93,1141,1142,1145,1148],{"class":95,"line":169},[93,1143,1144],{"class":114},"      \"",[93,1146,1147],{"class":118},"Um Gerador de CPF é uma ferramenta que gera números de CPF válidos, sendo útil para testes e desenvolvimento de sistemas. Ele aplica o algoritmo oficial de validação do CPF para assegurar que os números criados estejam formatados corretamente.",[93,1149,421],{"class":114},[93,1151,1152],{"class":95,"line":175},[93,1153,723],{"class":99},[93,1155,1156,1158],{"class":95,"line":181},[93,1157,1114],{"class":324},[93,1159,390],{"class":99},[93,1161,1162,1164,1166,1168,1171,1173],{"class":95,"line":187},[93,1163,906],{"class":99},[93,1165,369],{"class":103},[93,1167,749],{"class":114},[93,1169,1170],{"class":118},"Como funciona o Gerador de CPF?",[93,1172,115],{"class":114},[93,1174,901],{"class":99},[93,1176,1177,1179],{"class":95,"line":193},[93,1178,1136],{"class":99},[93,1180,1139],{"class":103},[93,1182,1183,1185,1188],{"class":95,"line":199},[93,1184,1144],{"class":114},[93,1186,1187],{"class":118},"O Gerador de CPF cria aleatoriamente os nove primeiros dígitos do CPF e, em seguida, calcula os dois dígitos verificadores usando o algoritmo de validação oficial, assegurando que o número gerado seja válido.",[93,1189,421],{"class":114},[93,1191,1192],{"class":95,"line":205},[93,1193,817],{"class":99},[93,1195,1196],{"class":95,"line":211},[93,1197,823],{"class":99},[93,1199,1200,1202,1204],{"class":95,"line":217},[93,1201,226],{"class":99},[93,1203,104],{"class":103},[93,1205,124],{"class":99},[15,1207,1208],{},"Até maio de 2026, essa marcação podia render um resultado rico como o da imagem abaixo:",[60,1210],{"alt":1211,"height":1212,"src":1213,"width":1214},"exemplo de resultado rico de FAQ no Google para a pergunta sobre o que é Nuxt.JS, exibido antes de o Google encerrar o recurso",351,"\u002Fimages\u002Fblog\u002Fseo\u002Fstructured-data\u002Ffaq-rich-result-example-1.webp",681,[24,1216,1218],{"id":1217},"como-conferir-se-o-json-ld-está-no-html","Como conferir se o JSON-LD está no HTML",[15,1220,1221,1222,1033,1225,1227],{},"Abra a página no navegador e use \"Ver código-fonte da página\", não \"Inspecionar elemento\". Procure por um bloco ",[19,1223,1224],{},"\u003Cscript type=\"application\u002Fld+json\">",[19,1226,21],{}," injeta o JSON-LD durante a renderização no servidor, então ele precisa estar no HTML bruto. Se ele só aparecer depois da hidratação, revise a configuração de renderização da página.",[24,1229,1231],{"id":1230},"como-validar-os-dados-estruturados","Como validar os dados estruturados",[15,1233,1234],{},"Depois de publicar, valide a página com estas ferramentas:",[298,1236,1237,1245,1253],{},[242,1238,1239,1244],{},[283,1240,1243],{"href":1241,"rel":1242},"https:\u002F\u002Fsearch.google.com\u002Ftest\u002Frich-results",[287],"Teste de Resultados Ricos"," do Google: mostra os itens detectados na URL e lista erros e avisos.",[242,1246,1247,1252],{},[283,1248,1251],{"href":1249,"rel":1250},"https:\u002F\u002Fvalidator.schema.org",[287],"Validador do Schema Markup",": confere a sintaxe do JSON-LD segundo o schema.org, independente de o Google exibir um resultado rico.",[242,1254,1255],{},"Relatório de dados estruturados no Search Console: agrupa os erros e avisos do site inteiro.",[15,1257,1258],{},"Os problemas mais comuns em blogs são estes:",[239,1260,1261,1272,1275,1284],{},[242,1262,1263,1264,48,1266,1268,1269,1271],{},"Propriedade recomendada ausente, como ",[19,1265,466],{},[19,1267,482],{},". Não é erro crítico em ",[19,1270,449],{},", mas limita o que o Google pode usar.",[242,1273,1274],{},"Imagem pequena ou inacessível. Para o Discover, a imagem precisa ter pelo menos 1200 px de largura e a URL não pode estar bloqueada para o rastreador.",[242,1276,1277,1278,48,1281,1003],{},"Data em formato inválido. Use ISO 8601, como ",[19,1279,1280],{},"2026-10-03",[19,1282,1283],{},"2026-10-03T14:30:00-03:00",[242,1285,1286],{},"Marcação diferente do conteúdo visível. Título, autor, data e imagem do schema devem ser os mesmos que o usuário vê na página.",[24,1288,1290],{"id":1289},"como-fazer-o-google-indexar-o-seu-artigo","Como fazer o Google indexar o seu artigo",[15,1292,1293],{},"Dados estruturados corretos não adiantam se o Google não indexar a página. O fluxo para um artigo novo é este:",[298,1295,1296,1307,1310],{},[242,1297,1298,1299,1302,1303,1306],{},"Confirme que a URL está no ",[19,1300,1301],{},"sitemap.xml"," e que o sitemap está enviado no Search Console. No Nuxt, o módulo ",[19,1304,1305],{},"@nuxtjs\u002Fsitemap"," gera esse arquivo.",[242,1308,1309],{},"Cole a URL no campo \"Inspecionar qualquer URL\" do Search Console.",[242,1311,1312],{},"Clique em \"Solicitar indexação\".",[15,1314,1315],{},"O pedido de indexação coloca a URL numa fila de rastreamento, mas não garante a indexação, e o Google não informa o prazo. O Google também não publica o limite diário de pedidos. Quando você o atinge, o botão fica indisponível até o dia seguinte, então use só para URLs importantes e não reenvie a mesma página várias vezes.",[15,1317,1318],{},"Para as demais páginas, o que ajuda o Google a descobri-las são o sitemap e os links internos. Uma página sem nenhum link vindo de outras páginas do site tende a ser descoberta mais devagar. Crie links para os artigos novos a partir da listagem do blog e de posts relacionados.",[847,1320,1322],{"id":1321},"descoberta-mas-não-indexada","Descoberta, mas não indexada",[15,1324,1325],{},"No relatório de indexação de páginas, dois status confundem muita gente:",[239,1327,1328,1331],{},[242,1329,1330],{},"Descoberta, mas não indexada no momento: o Google conhece a URL, mas ainda não a rastreou. Reforce os links internos, confira se a URL está no sitemap e verifique se o servidor não está devolvendo erros 5xx ou respondendo devagar.",[242,1332,1333],{},"Rastreada, mas não indexada no momento: o Google já leu a página e decidiu não indexá-la por enquanto. Costuma ser uma questão de qualidade: conteúdo muito parecido com outro já indexado, pouco aprofundado ou fora da intenção de busca. Melhore o conteúdo e só depois peça a indexação de novo.",[24,1335,1337],{"id":1336},"como-aparecer-no-google-discover","Como aparecer no Google Discover",[15,1339,1340],{},"O Discover é o feed de conteúdo do app do Google e de navegadores móveis. Ele mostra conteúdo conforme os interesses de cada usuário, sem depender de uma pesquisa. Segundo a documentação do Google, para ser elegível o conteúdo precisa:",[239,1342,1343,1346,1353],{},[242,1344,1345],{},"Estar indexado e seguir as políticas de conteúdo do Discover, sem clickbait nem sensacionalismo.",[242,1347,1348,1349,1352],{},"Ter uma imagem com pelo menos 1200 px de largura e mais de 300.000 pixels no total, na proporção 16x9, e a meta robots ",[19,1350,1351],{},"max-image-preview:large"," habilitada.",[242,1354,1355],{},"Ser um conteúdo original, útil e feito para pessoas.",[15,1357,1358,1359,1361,1362,1365],{},"Nenhum dado estruturado é obrigatório para o Discover. Mas o Google usa o ",[19,1360,466],{}," do schema.org e a meta tag ",[19,1363,1364],{},"og:image"," para escolher a imagem do card, então vale manter as duas apontando para uma imagem boa e não usar o logo do site no lugar.",[15,1367,1368],{},"No Nuxt, a meta robots pode ser definida na própria página:",[84,1370,1372],{"className":517,"code":1371,"language":519,"meta":89,"style":89},"\u003Cscript setup>\nuseSeoMeta({\n  robots: \"index, follow, max-image-preview:large\"\n});\n\u003C\u002Fscript>\n",[19,1373,1374,1384,1391,1405,1409],{"__ignoreMap":89},[93,1375,1376,1378,1380,1382],{"class":95,"line":96},[93,1377,100],{"class":99},[93,1379,104],{"class":103},[93,1381,530],{"class":107},[93,1383,124],{"class":99},[93,1385,1386,1389],{"class":95,"line":127},[93,1387,1388],{"class":324},"useSeoMeta",[93,1390,390],{"class":99},[93,1392,1393,1396,1398,1400,1403],{"class":95,"line":133},[93,1394,1395],{"class":99},"  robots",[93,1397,369],{"class":103},[93,1399,749],{"class":114},[93,1401,1402],{"class":118},"index, follow, max-image-preview:large",[93,1404,421],{"class":114},[93,1406,1407],{"class":95,"line":139},[93,1408,436],{"class":99},[93,1410,1411,1413,1415],{"class":95,"line":145},[93,1412,226],{"class":99},[93,1414,104],{"class":103},[93,1416,124],{"class":99},[15,1418,1419],{},"O desempenho no Discover aparece no relatório próprio do Search Console. Se o seu site não tiver dados lá, o conteúdo ainda não está sendo exibido no feed.",[24,1421,1423],{"id":1422},"avisando-o-bing-com-indexnow","Avisando o Bing com IndexNow",[15,1425,1426,1427,1430,1431,1003],{},"O IndexNow é um protocolo adotado pelo Bing e por outros buscadores para avisar quando uma URL é criada, atualizada ou removida. Você gera uma chave, publica um arquivo ",[19,1428,1429],{},".txt"," com ela na raiz do domínio e faz uma requisição ao endpoint do IndexNow sempre que publicar ou atualizar um artigo. Isso avisa o buscador de que existe algo novo, mas não garante indexação imediata. O guia oficial está em ",[283,1432,1435],{"href":1433,"rel":1434},"https:\u002F\u002Fwww.bing.com\u002Findexnow\u002Fgetstarted",[287],"bing.com\u002Findexnow\u002Fgetstarted",[24,1437,1439],{"id":1438},"perguntas-frequentes","Perguntas frequentes",[847,1441,1443],{"id":1442},"preciso-de-dados-estruturados-para-o-meu-blog-rankear","Preciso de dados estruturados para o meu blog rankear?",[15,1445,1446,1447,1449],{},"Não. Eles não são obrigatórios para rankear, mas ajudam o Google a entender melhor os seus artigos. Para um blog, o ponto de partida é ",[19,1448,449],{}," com autor e imagem, mais o breadcrumb.",[847,1451,1453],{"id":1452},"vale-a-pena-manter-faqpage-se-ele-não-gera-mais-resultado-rico","Vale a pena manter FAQPage se ele não gera mais resultado rico?",[15,1455,1456],{},"Vale se a página tem uma seção de perguntas e respostas visível para o usuário. Nesse caso a marcação serve para descrever o conteúdo.",[847,1458,1460],{"id":1459},"dados-estruturados-garantem-que-meu-post-apareça-no-discover","Dados estruturados garantem que meu post apareça no Discover?",[15,1462,1463],{},"Não. O Discover não exige dados estruturados. O que pesa é o conteúdo estar indexado, ter uma imagem grande e seguir as políticas de conteúdo.",[847,1465,1467],{"id":1466},"meu-artigo-aparece-como-rastreada-mas-não-indexada-o-que-fazer","Meu artigo aparece como \"Rastreada, mas não indexada\". O que fazer?",[15,1469,1470],{},"Esse status costuma apontar para a qualidade ou a originalidade da página. Melhore o conteúdo, reforce os links internos e peça a indexação de novo depois.",[847,1472,1474],{"id":1473},"como-sei-que-o-google-está-lendo-o-meu-json-ld","Como sei que o Google está lendo o meu JSON-LD?",[15,1476,1477],{},"Confira o HTML bruto em \"Ver código-fonte da página\", teste a URL no Teste de Resultados Ricos e acompanhe o relatório de dados estruturados no Search Console.",[24,1479,1481],{"id":1480},"conclusão","Conclusão",[15,1483,1484,1485,1487,1488,1490],{},"Em cada artigo novo, marque o ",[19,1486,449],{}," com autor, imagem e datas, confira o JSON-LD no código-fonte, valide no Teste de Resultados Ricos e acompanhe o relatório de indexação no Search Console. Atualize o ",[19,1489,841],{}," só quando o conteúdo mudar de verdade e, se o Bing importa para você, configure o IndexNow.",[15,1492,1493,1494,1499,1500,1505,1506,1003],{},"Se você quiser se aprofundar, acesse a ",[283,1495,1498],{"href":1496,"rel":1497},"https:\u002F\u002Fnuxtseo.com\u002Fdocs\u002Fschema-org\u002Fgetting-started\u002Fintroduction",[287],"documentação completa do módulo",", a ",[283,1501,1504],{"href":1502,"rel":1503},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Farticle",[287],"documentação do Google sobre dados estruturados de Article"," e a ",[283,1507,1510],{"href":1508,"rel":1509},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fgoogle-discover",[287],"documentação do Google Discover",[1512,1513,1514],"style",{},"html pre.shiki code .sCdxs, html code.shiki .sCdxs{--shiki-default:#F8F8F2}html pre.shiki code .s0Tla, html code.shiki .s0Tla{--shiki-default:#FF79C6}html pre.shiki code .sY_PY, html code.shiki .sY_PY{--shiki-default:#50FA7B;--shiki-default-font-style:italic}html pre.shiki code .seVfx, html code.shiki .seVfx{--shiki-default:#E9F284}html pre.shiki code .s-mGx, html code.shiki .s-mGx{--shiki-default:#F1FA8C}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sAOxA, html code.shiki .sAOxA{--shiki-default:#50FA7B}html pre.shiki code .shSDL, html code.shiki .shSDL{--shiki-default:#6272A4}",{"title":89,"searchDepth":127,"depth":127,"links":1516},[1517,1518,1519,1520,1521,1522,1523,1528,1529,1530,1533,1534,1535,1542],{"id":26,"depth":127,"text":27},{"id":40,"depth":127,"text":41},{"id":68,"depth":127,"text":69},{"id":233,"depth":127,"text":234},{"id":256,"depth":127,"text":257},{"id":277,"depth":127,"text":278},{"id":442,"depth":127,"text":443,"children":1524},[1525,1526,1527],{"id":849,"depth":133,"text":850},{"id":1006,"depth":133,"text":1007},{"id":1053,"depth":133,"text":1054},{"id":1217,"depth":127,"text":1218},{"id":1230,"depth":127,"text":1231},{"id":1289,"depth":127,"text":1290,"children":1531},[1532],{"id":1321,"depth":133,"text":1322},{"id":1336,"depth":127,"text":1337},{"id":1422,"depth":127,"text":1423},{"id":1438,"depth":127,"text":1439,"children":1536},[1537,1538,1539,1540,1541],{"id":1442,"depth":133,"text":1443},{"id":1452,"depth":133,"text":1453},{"id":1459,"depth":133,"text":1460},{"id":1466,"depth":133,"text":1467},{"id":1473,"depth":133,"text":1474},{"id":1480,"depth":127,"text":1481},[1544,1545,1546],"nuxt","vuejs","seo","Como adicionar dados estruturados no Nuxt.js com nuxt-schema-org: Article, breadcrumb, validação, indexação no Search Console e Google Discover, com exemplos.","how-to-create-structured-data-with-nuxtjs","md",{},"\u002Fblog\u002Fcomo-criar-dados-estruturados-com-nuxtjs","como-criar-dados-estruturados-com-nuxtjs","2025-01-22",{"title":5,"description":1547},{"loc":1551,"images":1556,"lastmod":1559},[1557,1558],{"loc":64},{"loc":1213},"2026-10-06","blog\u002Fcomo-criar-dados-estruturados-com-nuxtjs",2117,"BGjviT8apRyvkm1BK6McXSTpscdgbzA3H9QMGzuI_fw",[1564,1572,1579,1586,1594,1602,1604,1611,1619,1627,1634,1642,1648,1657,1664,1671,1678,1685,1692,1700,1707,1713],{"id":1565,"path":1566,"title":1567,"articleCover":1568,"categoriesIds":1569,"publishedAt":1571},"blog\u002Fblog\u002Fa-maneira-correta-de-utilizar-a-nomenclatura-bem.md","\u002Fblog\u002Fa-maneira-correta-de-utilizar-a-nomenclatura-bem","A maneira correta de utilizar a nomenclatura BEM","\u002Fimages\u002Fblog\u002Fa-maneira-correta-de-utilizar-a-nomenclatura-bem.webp",[1570],"css","2024-05-05",{"id":1573,"path":1574,"title":1575,"articleCover":1576,"categoriesIds":1577,"publishedAt":1578},"blog\u002Fblog\u002Fcomo-adicionar-caracteres-especiais-no-i18n.md","\u002Fblog\u002Fcomo-adicionar-caracteres-especiais-no-i18n","Como Adicionar Caracteres Especiais em Traduções do i18N","\u002Fimages\u002Fblog\u002Fi18n\u002Fi18n-caracteres-especiais-no-nuxtjs-thumb.webp",[1544,1545],"2025-01-29",{"id":1580,"path":1581,"title":1582,"articleCover":1583,"categoriesIds":1584,"publishedAt":1585},"blog\u002Fblog\u002Fcomo-adicionar-o-google-tag-manager-no-seu-website-com-nuxt-3.md","\u002Fblog\u002Fcomo-adicionar-o-google-tag-manager-no-seu-website-com-nuxt-3","Como adicionar o Google Tag Manager no seu website com Nuxt 3","\u002Fimages\u002Fblog\u002Fcomo-adicionar-google-tag-manager-em-projeto-com-nuxt-3.webp",[1544,1545],"2024-08-15",{"id":1587,"path":1588,"title":1589,"articleCover":1590,"categoriesIds":1591,"publishedAt":1593},"blog\u002Fblog\u002Fcomo-configurar-chave-ssh-no-git-para-usar-no-github.md","\u002Fblog\u002Fcomo-configurar-chave-ssh-no-git-para-usar-no-github","Chave SSH no Git: Como Configurar chave SSH para usar no GitHub","\u002Fimages\u002Fblog\u002Fgit\u002Fcomo-criar-e-configurar-chave-ssh-no-github-thumb.webp",[1592],"git","2025-02-04",{"id":1595,"path":1596,"title":1597,"articleCover":1598,"categoriesIds":1599,"publishedAt":1601},"blog\u002Fblog\u002Fcomo-consumir-uma-api-no-javascript-com-a-fetch-api.md","\u002Fblog\u002Fcomo-consumir-uma-api-no-javascript-com-a-fetch-api","Como consumir uma API no JavaScript com a Fetch API","\u002Fimages\u002Fblog\u002Fcomo-consumir-uma-api-no-javascript-com-a-fetch-api.webp",[1600],"javascript","2024-09-05",{"id":4,"path":1551,"title":5,"articleCover":6,"categoriesIds":1603,"publishedAt":1553},[1544,1545,1546],{"id":1605,"path":1606,"title":1607,"articleCover":1608,"categoriesIds":1609,"publishedAt":1610},"blog\u002Fblog\u002Fcomo-funciona-o-sistema-de-rotas-no-nuxt.md","\u002Fblog\u002Fcomo-funciona-o-sistema-de-rotas-no-nuxt","Rotas no Nuxt: dinâmicas, aninhadas e catch-all","\u002Fimages\u002Fblog\u002Fnuxt\u002Fsistema-de-rotas-no-nuxtjs-thumb.webp",[1544,1545],"2025-03-12",{"id":1612,"path":1613,"title":1614,"articleCover":1615,"categoriesIds":1616,"publishedAt":1618},"blog\u002Fblog\u002Fcomo-lidar-com-inveja-de-outros-programadores.md","\u002Fblog\u002Fcomo-lidar-com-inveja-de-outros-programadores","Como Lidar com Inveja de Outros Programadores","\u002Fimages\u002Fblog\u002Fcarreira\u002Finveja-de-programadores-com-quem-se-destaca.webp",[1617],"career","2025-08-29",{"id":1620,"path":1621,"title":1622,"articleCover":1623,"categoriesIds":1624,"publishedAt":1626},"blog\u002Fblog\u002Fcomo-recuperar-arquivos-perdidos-no-git-pelo-vscode.md","\u002Fblog\u002Fcomo-recuperar-arquivos-perdidos-no-git-pelo-vscode","Perdeu arquivos no Git sem commit? Veja como recuperar pelo VS Code","\u002Fimages\u002Fblog\u002Fcomo-recuperar-arquivos-perdido-no-git-pelo-vscode.webp",[1592,1625],"vscode","2024-05-15",{"id":1628,"path":1629,"title":1630,"articleCover":1631,"categoriesIds":1632,"publishedAt":1633},"blog\u002Fblog\u002Fcomo-usar-middlewares-no-nuxtjs.md","\u002Fblog\u002Fcomo-usar-middlewares-no-nuxtjs","Middlewares: O que são e como utilizar no Nuxt.JS","\u002Fimages\u002Fblog\u002Fnuxt\u002Fmiddlewares-no-front-end.webp",[1544,1545],"2025-01-14",{"id":1635,"path":1636,"title":1637,"articleCover":1638,"categoriesIds":1639,"publishedAt":1641},"blog\u002Fblog\u002Fcomo-validar-cartao-de-credito-com-javascript.md","\u002Fblog\u002Fcomo-validar-cartao-de-credito-com-javascript","Como validar um cartão de crédito com JavaScript (algoritmo de Luhn)","\u002Fimages\u002Fblog\u002Fjavascript\u002Fcomo-validar-cartao-de-credito-com-javascript.webp",[1600,1640],"tools","2026-09-17",{"id":1643,"path":1644,"title":1645,"articleCover":1646,"categoriesIds":1647,"publishedAt":1641},"blog\u002Fblog\u002Fcomo-validar-cpf-com-javascript.md","\u002Fblog\u002Fcomo-validar-cpf-com-javascript","Como validar um CPF com JavaScript","\u002Fimages\u002Fblog\u002Fjavascript\u002Fcomo-validar-cpf-com-javascript.webp",[1600,1640],{"id":1649,"path":1650,"title":1651,"articleCover":1652,"categoriesIds":1653,"publishedAt":1656},"blog\u002Fblog\u002Fcomponentes-do-figma-um-guia-para-te-ajudar-a-comecar.md","\u002Fblog\u002Fcomponentes-do-figma-um-guia-para-te-ajudar-a-comecar","Guia de Componentes no Figma para Iniciantes","\u002Fimages\u002Fblog\u002Ffigma\u002Fcomponentes-do-figma-um-guia-para-te-ajudar-a-comecar.png",[1654,1655],"figma","ux","2024-10-15",{"id":1658,"path":1659,"title":1660,"articleCover":1661,"categoriesIds":1662,"publishedAt":1663},"blog\u002Fblog\u002Fhub-de-ferramentas-gratuitas-para-desenvolvedores.md","\u002Fblog\u002Fhub-de-ferramentas-gratuitas-para-desenvolvedores","Criei um Hub de Ferramentas Web Gratuitas para Devs","\u002Fimages\u002Fblog\u002Fferramentas\u002Fhub-ferramentas-gratuitas-para-desenvolvedores.webp",[1640],"2026-01-06",{"id":1665,"path":1666,"title":1667,"articleCover":1668,"categoriesIds":1669,"publishedAt":1670},"blog\u002Fblog\u002Fo-que-sao-diretivas-no-vue-e-como-implementa-las.md","\u002Fblog\u002Fo-que-sao-diretivas-no-vue-e-como-implementa-las","Diretivas no Vue 3: nativas e personalizadas","\u002Fimages\u002Fblog\u002Fvue\u002Fo-que-sao-diretivas-no-vue-e-como-implementa-las.webp",[1545],"2025-03-21",{"id":1672,"path":1673,"title":1674,"articleCover":1675,"categoriesIds":1676,"publishedAt":1677},"blog\u002Fblog\u002Fog-tags-o-que-sao-e-como-adicionar-no-seu-site.md","\u002Fblog\u002Fog-tags-o-que-sao-e-como-adicionar-no-seu-site","OG Tags: O que São e Como Adicioná-las ao Seu Site","\u002Fimages\u002Fblog\u002Fseo\u002Fo-que-e-como-utilizar-as-og-tags.webp",[1546],"2024-10-05",{"id":1679,"path":1680,"title":1681,"articleCover":1682,"categoriesIds":1683,"publishedAt":1684},"blog\u002Fblog\u002Fos-principais-erros-de-programadores-em-entrevistas-de-emprego.md","\u002Fblog\u002Fos-principais-erros-de-programadores-em-entrevistas-de-emprego","Os principais erros de programadores em entrevistas de emprego","\u002Fimages\u002Fblog\u002Fnao-cometa-esses-erros-na-sua-entrevista.webp",[1617],"2024-09-15",{"id":1686,"path":1687,"title":1688,"articleCover":1689,"categoriesIds":1690,"publishedAt":1691},"blog\u002Fblog\u002Fqual-a-diferenca-entre-a-composition-api-e-options-api-no-vuejs.md","\u002Fblog\u002Fqual-a-diferenca-entre-a-composition-api-e-options-api-no-vuejs","Qual a diferença entre a Composition API e Options API no VueJS","\u002Fimages\u002Fblog\u002Fvue\u002Fqual-a-diferenca-entre-a-composition-api-e-options-api-no-vuejs.webp",[1545],"2025-02-20",{"id":1693,"path":1694,"title":1695,"articleCover":1696,"categoriesIds":1697,"publishedAt":1699},"blog\u002Fblog\u002Fscroll-infinito-como-adicionar-ao-seu-site-e-suas-vantagens.md","\u002Fblog\u002Fscroll-infinito-como-adicionar-ao-seu-site-e-suas-vantagens","Scroll Infinito no React-Native: Guia Prático","\u002Fimages\u002Fblog\u002Freact-native\u002Fscroll-infinito-como-adicionar-ao-seu-site-e-suas-vantagens.webp",[1698],"react-native","2024-12-15",{"id":1701,"path":1702,"title":1703,"articleCover":1704,"categoriesIds":1705,"publishedAt":1706},"blog\u002Fblog\u002Fvercel-compra-nuxt-labs.md","\u002Fblog\u002Fvercel-compra-nuxt-labs","Vercel comprou a Nuxt Labs! E agora, o que muda para o Nuxt?","\u002Fimages\u002Fblog\u002Fnuxt\u002Fvercel-compra-nuxt-labs.webp",[1544],"2025-07-17",{"id":1708,"path":1709,"title":1710,"articleCover":1711,"categoriesIds":1712,"publishedAt":1559},"blog\u002Fblog\u002Fvue-vapor-mode-como-funciona-e-como-usar.md","\u002Fblog\u002Fvue-vapor-mode-como-funciona-e-como-usar","Vue Vapor Mode: o que é e o que muda no Vue 3.6","\u002Fimages\u002Fblog\u002Fvue\u002Fvue-vapor-mode-como-funciona-e-como-usar.webp",[1545,1544],{"id":1714,"path":1715,"title":1716,"articleCover":1717,"categoriesIds":1718,"publishedAt":1720},"blog\u002Fblog\u002Fweb-vitals-como-a-experiencia-do-usuario-vai-afetar-o-seo-do-seu-site.md","\u002Fblog\u002Fweb-vitals-como-a-experiencia-do-usuario-vai-afetar-o-seo-do-seu-site","Web Vitals e SEO: como a experiência do usuário afeta o seu site","\u002Fimages\u002Fblog\u002Fseo\u002Fweb-vitals\u002Fweb-vitals-como-a-experiencia-do-usuario-vai-afetar-o-seo-do-seu-site.webp",[1546,1719],"web-vitals","2024-10-25",1791682332233]