[{"data":1,"prerenderedAt":1661},["ShallowReactive",2],{"en-article-\u002Fen\u002Fblog\u002Fhow-to-create-structured-data-with-nuxtjs":3,"en-related-posts-\u002Fen\u002Fblog\u002Fhow-to-create-structured-data-with-nuxtjs":1556},{"id":4,"title":5,"articleCover":6,"articleCoverEmbed":7,"articleCoverEmbedUploadDate":7,"articleCoverHeight":8,"articleCoverWidth":9,"authorId":10,"body":11,"categoriesIds":1536,"description":1540,"enAlternateSlug":1541,"extension":1542,"meta":1543,"navigation":559,"path":1544,"ptBrAlternateSlug":1545,"publishedAt":1546,"seo":1547,"sitemap":1548,"stem":1553,"updatedAt":1552,"wordCount":1554,"__hash__":1555},"blogEn\u002Fen\u002Fblog\u002Fhow-to-create-structured-data-with-nuxtjs.md","What is Structured Data and How to Add it in Nuxt.JS","\u002Fimages\u002Fen\u002Fblog\u002Fseo\u002Fstructured-data\u002Fstructured-data-thumb-1.webp",null,720,1280,"thiago-nunes-batista",{"type":12,"value":13,"toc":1508},"minimark",[14,23,28,31,38,42,51,58,65,69,72,82,230,234,237,250,253,257,260,274,278,292,295,304,311,336,342,357,368,435,438,442,452,499,509,827,840,845,853,978,997,1001,1043,1047,1053,1198,1201,1207,1211,1221,1225,1228,1251,1254,1282,1286,1289,1308,1311,1314,1318,1321,1329,1333,1336,1351,1361,1364,1412,1415,1419,1431,1435,1439,1445,1449,1452,1456,1459,1463,1466,1470,1473,1477,1486,1504],[15,16,17,18,22],"p",{},"Here you will see what Structured Data is, when to use it, when not to, and how to mark up your blog articles in Nuxt.JS with ",[19,20,21],"code",{},"nuxt-schema-org",". After that come validating the markup and what to do so Google discovers and indexes your content and, when possible, recommends it in Discover.",[24,25,27],"h2",{"id":26},"what-is-structured-data","What is Structured Data?",[15,29,30],{},"Structured data is information from a website that is organized in a standardized format such as JSON-LD, Microdata, or RDFa. Google recommends JSON-LD, which is kept separate from the visible HTML and is the easiest to maintain, and it is the format we use here.",[15,32,33,34,37],{},"Through structured data, search engines like Google receive more information about what your page is about. Based on this information, along with other factors, search engines can display ",[19,35,36],{},"Rich Results"," of your site's pages in search results.",[24,39,41],{"id":40},"what-are-rich-snippets","What are Rich Snippets?",[15,43,44,47,48,50],{},[19,45,46],{},"Rich Snippets"," or ",[19,49,36],{}," are visual enhancements in search results such as images, prices, breadcrumbs, review stars, etc.",[15,52,53,54,57],{},"Below, you can see an example of a Rich Result on Google from the ",[19,55,56],{},"Yahoo Finance"," website, where an image, title, and publication date are displayed. These visual elements increase the chances of attracting the user's attention and driving them to your site.",[59,60],"img",{"alt":61,"height":62,"src":63,"width":64},"example of a rich search result on Google from Yahoo Finance",358,"\u002Fimages\u002Fblog\u002Fseo\u002Fstructured-data\u002Fyahoo-finances-schema-org-rich-result.webp",688,[24,66,68],{"id":67},"example-of-structured-data-code","Example of Structured Data Code",[15,70,71],{},"Below you can see an example of structured data in JSON-LD. Don't worry, you won't need to write this manually, we'll use a Nuxt tool to generate the code.",[73,74,75],"blockquote",{},[15,76,77,78,81],{},"This example uses ",[19,79,80],{},"FAQPage",", which was the most common rich result type for years. Google stopped showing the FAQ rich result on May 7, 2026, for every kind of site, and removed the feature's documentation in June. The markup is still valid in schema.org, but today it only describes the content and does not change how your result looks in search.",[83,84,89],"pre",{"className":85,"code":86,"language":87,"meta":88,"style":88},"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\": \"What is a CPF Generator?\",\n        \"acceptedAnswer\": {\n          \"@type\": \"Answer\",\n          \"text\": \"A CPF Generator is a tool that generates valid CPF numbers, useful for testing and system development. It applies the official CPF validation algorithm to ensure that the generated numbers are correctly formatted.\"\n        }\n      }\n    ]\n  }\n\u003C\u002Fscript>\n","html","",[19,90,91,124,130,136,142,148,154,160,166,172,178,184,190,196,202,208,214,220],{"__ignoreMap":88},[92,93,96,100,104,108,111,115,119,121],"span",{"class":94,"line":95},"line",1,[92,97,99],{"class":98},"sCdxs","\u003C",[92,101,103],{"class":102},"s0Tla","script",[92,105,107],{"class":106},"sY_PY"," type",[92,109,110],{"class":102},"=",[92,112,114],{"class":113},"seVfx","\"",[92,116,118],{"class":117},"s-mGx","application\u002Fld+json",[92,120,114],{"class":113},[92,122,123],{"class":98},">\n",[92,125,127],{"class":94,"line":126},2,[92,128,129],{"class":98},"  {\n",[92,131,133],{"class":94,"line":132},3,[92,134,135],{"class":98},"    \"@type\": \"FAQPage\",\n",[92,137,139],{"class":94,"line":138},4,[92,140,141],{"class":98},"    \"@context\": \"https:\u002F\u002Fschema.org\",\n",[92,143,145],{"class":94,"line":144},5,[92,146,147],{"class":98},"    \"@graph\": [\n",[92,149,151],{"class":94,"line":150},6,[92,152,153],{"class":98},"      {\n",[92,155,157],{"class":94,"line":156},7,[92,158,159],{"class":98},"        \"@id\": \"https:\u002F\u002Fcodigoaoponto.com\u002Ftools\u002Fcpf-generator\u002F#\u002Fschema\u002Fquestion\u002Fc6e1aab\",\n",[92,161,163],{"class":94,"line":162},8,[92,164,165],{"class":98},"        \"@type\": \"Question\",\n",[92,167,169],{"class":94,"line":168},9,[92,170,171],{"class":98},"        \"inLanguage\": \"pt-BR\",\n",[92,173,175],{"class":94,"line":174},10,[92,176,177],{"class":98},"        \"name\": \"What is a CPF Generator?\",\n",[92,179,181],{"class":94,"line":180},11,[92,182,183],{"class":98},"        \"acceptedAnswer\": {\n",[92,185,187],{"class":94,"line":186},12,[92,188,189],{"class":98},"          \"@type\": \"Answer\",\n",[92,191,193],{"class":94,"line":192},13,[92,194,195],{"class":98},"          \"text\": \"A CPF Generator is a tool that generates valid CPF numbers, useful for testing and system development. It applies the official CPF validation algorithm to ensure that the generated numbers are correctly formatted.\"\n",[92,197,199],{"class":94,"line":198},14,[92,200,201],{"class":98},"        }\n",[92,203,205],{"class":94,"line":204},15,[92,206,207],{"class":98},"      }\n",[92,209,211],{"class":94,"line":210},16,[92,212,213],{"class":98},"    ]\n",[92,215,217],{"class":94,"line":216},17,[92,218,219],{"class":98},"  }\n",[92,221,223,226,228],{"class":94,"line":222},18,[92,224,225],{"class":98},"\u003C\u002F",[92,227,103],{"class":102},[92,229,123],{"class":98},[24,231,233],{"id":232},"when-to-use-structured-data","When to Use Structured Data?",[15,235,236],{},"Use Structured Data when:",[238,239,240,244,247],"ul",{},[241,242,243],"li",{},"The page content fits into one of the supported categories, such as articles, products, recipes, events, job postings, etc.",[241,245,246],{},"You want to increase your page visibility and click-through rate (CTR).",[241,248,249],{},"You want to help search engines better understand your website's content.",[15,251,252],{},"In any case, what you mark up has to be visible to the user on the page, and the properties have to be kept up to date.",[24,254,256],{"id":255},"when-not-to-use-structured-data","When Not to Use Structured Data?",[15,258,259],{},"Avoid using Structured Data when:",[238,261,262,265,268,271],{},[241,263,264],{},"The page content does not fit into the supported categories.",[241,266,267],{},"The content is of low quality; structured data won't improve it.",[241,269,270],{},"The content changes frequently, making it costly to update this information regularly.",[241,272,273],{},"The marked-up content does not appear on the page. Google treats that as misuse of structured data and can apply a manual action to your site.",[24,275,277],{"id":276},"installing-the-schemaorg-package-in-nuxt","Installing the Schema.org Package in Nuxt",[15,279,280,287,288,291],{},[281,282,286],"a",{"href":283,"rel":284},"https:\u002F\u002Fnuxtseo.com",[285],"nofollow","Nuxt SEO"," is a collection of SEO modules that make it easier to develop ",[19,289,290],{},"technical SEO"," for your website. In this tutorial, we will use the module that simplifies the implementation of structured data.",[15,293,294],{},"You can install this module in several ways; here, I'll show the two main ones:",[296,297,298,301],"ol",{},[241,299,300],{},"nuxi (Nuxt's official command-line interface)",[241,302,303],{},"npm (Package manager)",[15,305,306,307,310],{},"If you are using ",[19,308,309],{},"nuxi",", simply run the following command:",[83,312,316],{"className":313,"code":314,"language":315,"meta":88,"style":88},"language-bash shiki shiki-themes dracula","npx nuxi module add schema-org\n","bash",[19,317,318],{"__ignoreMap":88},[92,319,320,324,327,330,333],{"class":94,"line":95},[92,321,323],{"class":322},"sAOxA","npx",[92,325,326],{"class":117}," nuxi",[92,328,329],{"class":117}," module",[92,331,332],{"class":117}," add",[92,334,335],{"class":117}," schema-org\n",[15,337,306,338,341],{},[19,339,340],{},"npm",", you'll need an extra step. Start by installing the package:",[83,343,345],{"className":313,"code":344,"language":315,"meta":88,"style":88},"npm i nuxt-schema-org\n",[19,346,347],{"__ignoreMap":88},[92,348,349,351,354],{"class":94,"line":95},[92,350,340],{"class":322},[92,352,353],{"class":117}," i",[92,355,356],{"class":117}," nuxt-schema-org\n",[15,358,359,360,363,364,367],{},"Then add the installed package to the ",[19,361,362],{},"modules"," option in the ",[19,365,366],{},"nuxt.config.ts"," file:",[83,369,373],{"className":370,"code":371,"language":372,"meta":88,"style":88},"language-js shiki shiki-themes dracula","export default defineNuxtConfig({\n  \u002F\u002F other configurations...\n  modules: [\n    \u002F\u002F other modules\n    \"nuxt-schema-org\"\n  ]\n  \u002F\u002F other configurations...\n});\n","js",[19,374,375,389,395,406,411,421,426,430],{"__ignoreMap":88},[92,376,377,380,383,386],{"class":94,"line":95},[92,378,379],{"class":102},"export",[92,381,382],{"class":102}," default",[92,384,385],{"class":322}," defineNuxtConfig",[92,387,388],{"class":98},"({\n",[92,390,391],{"class":94,"line":126},[92,392,394],{"class":393},"shSDL","  \u002F\u002F other configurations...\n",[92,396,397,400,403],{"class":94,"line":132},[92,398,399],{"class":98},"  modules",[92,401,402],{"class":102},":",[92,404,405],{"class":98}," [\n",[92,407,408],{"class":94,"line":138},[92,409,410],{"class":393},"    \u002F\u002F other modules\n",[92,412,413,416,418],{"class":94,"line":144},[92,414,415],{"class":113},"    \"",[92,417,21],{"class":117},[92,419,420],{"class":113},"\"\n",[92,422,423],{"class":94,"line":150},[92,424,425],{"class":98},"  ]\n",[92,427,428],{"class":94,"line":156},[92,429,394],{"class":393},[92,431,432],{"class":94,"line":162},[92,433,434],{"class":98},"});\n",[15,436,437],{},"Once this is done, we can start using the tool.",[24,439,441],{"id":440},"structured-data-for-articles-in-nuxtjs","Structured Data for Articles in Nuxt.JS",[15,443,444,445,448,449,451],{},"For a blog, the most useful type is ",[19,446,447],{},"Article",". It tells Google that the page is an article, who wrote it, when it was published and updated, and which image represents it. Google does not require any property for ",[19,450,447],{},", but it recommends these:",[238,453,454,460,466,476,493],{},[241,455,456,459],{},[19,457,458],{},"headline",": the article title.",[241,461,462,465],{},[19,463,464],{},"image",": a representative image. Google recommends several high-resolution images in 16x9, 4x3 and 1x1 aspect ratios.",[241,467,468,471,472,475],{},[19,469,470],{},"datePublished"," and ",[19,473,474],{},"dateModified",": the date of first publication and of the last modification, in ISO 8601 format.",[241,477,478,481,482,485,486,471,489,492],{},[19,479,480],{},"author",": preferably a ",[19,483,484],{},"Person"," with ",[19,487,488],{},"name",[19,490,491],{},"url",", pointing to a page that identifies the author.",[241,494,495,498],{},[19,496,497],{},"publisher",": the organization behind the site, with a name and logo.",[15,500,501,502,505,506,508],{},"In Nuxt, the ",[19,503,504],{},"useSchemaOrg"," composable is globally available, and you can use it inside the ",[19,507,103],{}," tag of the page. In a blog page that loads the post with Nuxt Content, it looks like this:",[83,510,514],{"className":511,"code":512,"language":513,"meta":88,"style":88},"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,515,516,539,555,561,605,634,639,643,650,657,667,677,687,697,713,718,725,734,764,791,801,806,812,818],{"__ignoreMap":88},[92,517,518,520,522,525,528,530,532,535,537],{"class":94,"line":95},[92,519,99],{"class":98},[92,521,103],{"class":102},[92,523,524],{"class":106}," setup",[92,526,527],{"class":106}," lang",[92,529,110],{"class":102},[92,531,114],{"class":113},[92,533,534],{"class":117},"ts",[92,536,114],{"class":113},[92,538,123],{"class":98},[92,540,541,544,547,549,552],{"class":94,"line":126},[92,542,543],{"class":102},"const",[92,545,546],{"class":98}," route ",[92,548,110],{"class":102},[92,550,551],{"class":322}," useRoute",[92,553,554],{"class":98},"();\n",[92,556,557],{"class":94,"line":132},[92,558,560],{"emptyLinePlaceholder":559},true,"\n",[92,562,563,565,568,570,573,575,578,581,584,587,590,593,596,599,602],{"class":94,"line":138},[92,564,543],{"class":102},[92,566,567],{"class":98}," { data",[92,569,402],{"class":102},[92,571,572],{"class":98}," post } ",[92,574,110],{"class":102},[92,576,577],{"class":102}," await",[92,579,580],{"class":322}," useAsyncData",[92,582,583],{"class":98},"(",[92,585,586],{"class":117},"`post-",[92,588,589],{"class":102},"${",[92,591,592],{"class":98},"route.path",[92,594,595],{"class":102},"}",[92,597,598],{"class":117},"`",[92,600,601],{"class":98},", () ",[92,603,604],{"class":102},"=>\n",[92,606,607,610,612,614,617,619,622,625,628,631],{"class":94,"line":144},[92,608,609],{"class":322},"  queryCollection",[92,611,583],{"class":98},[92,613,114],{"class":113},[92,615,616],{"class":117},"blog",[92,618,114],{"class":113},[92,620,621],{"class":98},").",[92,623,624],{"class":322},"path",[92,626,627],{"class":98},"(route.path).",[92,629,630],{"class":322},"first",[92,632,633],{"class":98},"()\n",[92,635,636],{"class":94,"line":150},[92,637,638],{"class":98},");\n",[92,640,641],{"class":94,"line":156},[92,642,560],{"emptyLinePlaceholder":559},[92,644,645,647],{"class":94,"line":162},[92,646,504],{"class":322},[92,648,649],{"class":98},"([\n",[92,651,652,655],{"class":94,"line":168},[92,653,654],{"class":322},"  defineArticle",[92,656,388],{"class":98},[92,658,659,662,664],{"class":94,"line":174},[92,660,661],{"class":98},"    headline",[92,663,402],{"class":102},[92,665,666],{"class":98}," post.value?.title,\n",[92,668,669,672,674],{"class":94,"line":180},[92,670,671],{"class":98},"    description",[92,673,402],{"class":102},[92,675,676],{"class":98}," post.value?.description,\n",[92,678,679,682,684],{"class":94,"line":186},[92,680,681],{"class":98},"    image",[92,683,402],{"class":102},[92,685,686],{"class":98}," post.value?.articleCover,\n",[92,688,689,692,694],{"class":94,"line":192},[92,690,691],{"class":98},"    datePublished",[92,693,402],{"class":102},[92,695,696],{"class":98}," post.value?.publishedAt,\n",[92,698,699,702,704,707,710],{"class":94,"line":198},[92,700,701],{"class":98},"    dateModified",[92,703,402],{"class":102},[92,705,706],{"class":98}," post.value?.updatedAt ",[92,708,709],{"class":102},"??",[92,711,712],{"class":98}," post.value?.publishedAt\n",[92,714,715],{"class":94,"line":204},[92,716,717],{"class":98},"  }),\n",[92,719,720,723],{"class":94,"line":210},[92,721,722],{"class":322},"  defineBreadcrumb",[92,724,388],{"class":98},[92,726,727,730,732],{"class":94,"line":216},[92,728,729],{"class":98},"    itemListElement",[92,731,402],{"class":102},[92,733,405],{"class":98},[92,735,736,739,741,744,747,749,752,754,756,759,761],{"class":94,"line":222},[92,737,738],{"class":98},"      { name",[92,740,402],{"class":102},[92,742,743],{"class":113}," \"",[92,745,746],{"class":117},"Home",[92,748,114],{"class":113},[92,750,751],{"class":98},", item",[92,753,402],{"class":102},[92,755,743],{"class":113},[92,757,758],{"class":117},"\u002F",[92,760,114],{"class":113},[92,762,763],{"class":98}," },\n",[92,765,767,769,771,773,776,778,780,782,784,787,789],{"class":94,"line":766},19,[92,768,738],{"class":98},[92,770,402],{"class":102},[92,772,743],{"class":113},[92,774,775],{"class":117},"Blog",[92,777,114],{"class":113},[92,779,751],{"class":98},[92,781,402],{"class":102},[92,783,743],{"class":113},[92,785,786],{"class":117},"\u002Fblog",[92,788,114],{"class":113},[92,790,763],{"class":98},[92,792,794,796,798],{"class":94,"line":793},20,[92,795,738],{"class":98},[92,797,402],{"class":102},[92,799,800],{"class":98}," post.value?.title }\n",[92,802,804],{"class":94,"line":803},21,[92,805,213],{"class":98},[92,807,809],{"class":94,"line":808},22,[92,810,811],{"class":98},"  })\n",[92,813,815],{"class":94,"line":814},23,[92,816,817],{"class":98},"]);\n",[92,819,821,823,825],{"class":94,"line":820},24,[92,822,225],{"class":98},[92,824,103],{"class":102},[92,826,123],{"class":98},[15,828,829,830,832,833,836,837,839],{},"The fields come from the article's front matter, so ",[19,831,474],{}," only reflects reality if you update ",[19,834,835],{},"updatedAt"," when the content actually changes. The module converts the dates to ISO 8601 and turns the image path into an absolute URL using the site ",[19,838,491],{},".",[841,842,844],"h3",{"id":843},"global-site-configuration","Global Site Configuration",[15,846,847,848,850,851,402],{},"Author and publisher do not need to be repeated on every page. ",[19,849,21],{}," uses the site configuration and the organization identity, which you define once in ",[19,852,366],{},[83,854,857],{"className":855,"code":856,"language":534,"meta":88,"style":88},"language-ts shiki shiki-themes dracula","export default defineNuxtConfig({\n  site: {\n    url: \"https:\u002F\u002Fyoursite.com\",\n    name: \"Site Name\"\n  },\n  schemaOrg: {\n    identity: defineOrganization({\n      name: \"Site Name\",\n      logo: \"https:\u002F\u002Fyoursite.com\u002Flogo-512.png\"\n    })\n  }\n});\n",[19,858,859,869,879,896,910,915,924,936,951,965,970,974],{"__ignoreMap":88},[92,860,861,863,865,867],{"class":94,"line":95},[92,862,379],{"class":102},[92,864,382],{"class":102},[92,866,385],{"class":322},[92,868,388],{"class":98},[92,870,871,874,876],{"class":94,"line":126},[92,872,873],{"class":98},"  site",[92,875,402],{"class":102},[92,877,878],{"class":98}," {\n",[92,880,881,884,886,888,891,893],{"class":94,"line":132},[92,882,883],{"class":98},"    url",[92,885,402],{"class":102},[92,887,743],{"class":113},[92,889,890],{"class":117},"https:\u002F\u002Fyoursite.com",[92,892,114],{"class":113},[92,894,895],{"class":98},",\n",[92,897,898,901,903,905,908],{"class":94,"line":138},[92,899,900],{"class":98},"    name",[92,902,402],{"class":102},[92,904,743],{"class":113},[92,906,907],{"class":117},"Site Name",[92,909,420],{"class":113},[92,911,912],{"class":94,"line":144},[92,913,914],{"class":98},"  },\n",[92,916,917,920,922],{"class":94,"line":150},[92,918,919],{"class":98},"  schemaOrg",[92,921,402],{"class":102},[92,923,878],{"class":98},[92,925,926,929,931,934],{"class":94,"line":156},[92,927,928],{"class":98},"    identity",[92,930,402],{"class":102},[92,932,933],{"class":322}," defineOrganization",[92,935,388],{"class":98},[92,937,938,941,943,945,947,949],{"class":94,"line":162},[92,939,940],{"class":98},"      name",[92,942,402],{"class":102},[92,944,743],{"class":113},[92,946,907],{"class":117},[92,948,114],{"class":113},[92,950,895],{"class":98},[92,952,953,956,958,960,963],{"class":94,"line":168},[92,954,955],{"class":98},"      logo",[92,957,402],{"class":102},[92,959,743],{"class":113},[92,961,962],{"class":117},"https:\u002F\u002Fyoursite.com\u002Flogo-512.png",[92,964,420],{"class":113},[92,966,967],{"class":94,"line":174},[92,968,969],{"class":98},"    })\n",[92,971,972],{"class":94,"line":180},[92,973,219],{"class":98},[92,975,976],{"class":94,"line":186},[92,977,434],{"class":98},[15,979,980,981,983,984,986,987,485,989,471,991,993,994,839],{},"If the ",[19,982,447],{}," has no ",[19,985,497],{},", the module uses this identity. For the author, pass a ",[19,988,484],{},[19,990,488],{},[19,992,491],{}," to ",[19,995,996],{},"defineArticle",[841,998,1000],{"id":999},"how-the-entities-connect","How the Entities Connect",[15,1002,1003,1004,1007,1008,1011,1012,1011,1015,1011,1017,471,1019,1022,1023,1026,1027,1029,1030,1032,1033,471,1035,1037,1038,471,1040,1042],{},"The module builds a single ",[19,1005,1006],{},"@graph"," in which ",[19,1009,1010],{},"WebSite",", ",[19,1013,1014],{},"WebPage",[19,1016,447],{},[19,1018,484],{},[19,1020,1021],{},"Organization"," reference each other by ",[19,1024,1025],{},"@id",". The ",[19,1028,447],{}," points to the current ",[19,1031,1014],{},", and ",[19,1034,480],{},[19,1036,497],{}," point to the ",[19,1039,484],{},[19,1041,1021],{}," nodes. That link tells Google the article belongs to that author and that brand.",[841,1044,1046],{"id":1045},"what-about-faqpage","What About FAQPage?",[15,1048,1049,1050,1052],{},"If the page has a visible question and answer section, marking it up with ",[19,1051,80],{}," is still worth it. Just don't expect the dropdown in search. The example below generates the same JSON-LD we saw earlier:",[83,1054,1056],{"className":511,"code":1055,"language":513,"meta":88,"style":88},"\u003Cscript setup>\nuseSchemaOrg([\n  defineWebPage({\n    \"@type\": \"FAQPage\"\n  }),\n  defineQuestion({\n    name: \"What is a CPF Generator?\",\n    acceptedAnswer:\n      \"A CPF Generator is a tool that generates valid CPF numbers, useful for testing and system development. It applies the official CPF validation algorithm to ensure that the generated numbers are correctly formatted.\"\n  }),\n  defineQuestion({\n    name: \"How does the CPF Generator work?\",\n    acceptedAnswer:\n      \"The CPF Generator randomly creates the first nine digits of the CPF and then calculates the two check digits using the official validation algorithm, ensuring the generated number is valid.\"\n  })\n]);\n\u003C\u002Fscript>\n",[19,1057,1058,1068,1074,1081,1098,1102,1109,1124,1132,1142,1146,1152,1167,1173,1182,1186,1190],{"__ignoreMap":88},[92,1059,1060,1062,1064,1066],{"class":94,"line":95},[92,1061,99],{"class":98},[92,1063,103],{"class":102},[92,1065,524],{"class":106},[92,1067,123],{"class":98},[92,1069,1070,1072],{"class":94,"line":126},[92,1071,504],{"class":322},[92,1073,649],{"class":98},[92,1075,1076,1079],{"class":94,"line":132},[92,1077,1078],{"class":322},"  defineWebPage",[92,1080,388],{"class":98},[92,1082,1083,1085,1088,1090,1092,1094,1096],{"class":94,"line":138},[92,1084,415],{"class":113},[92,1086,1087],{"class":117},"@type",[92,1089,114],{"class":113},[92,1091,402],{"class":102},[92,1093,743],{"class":113},[92,1095,80],{"class":117},[92,1097,420],{"class":113},[92,1099,1100],{"class":94,"line":144},[92,1101,717],{"class":98},[92,1103,1104,1107],{"class":94,"line":150},[92,1105,1106],{"class":322},"  defineQuestion",[92,1108,388],{"class":98},[92,1110,1111,1113,1115,1117,1120,1122],{"class":94,"line":156},[92,1112,900],{"class":98},[92,1114,402],{"class":102},[92,1116,743],{"class":113},[92,1118,1119],{"class":117},"What is a CPF Generator?",[92,1121,114],{"class":113},[92,1123,895],{"class":98},[92,1125,1126,1129],{"class":94,"line":162},[92,1127,1128],{"class":98},"    acceptedAnswer",[92,1130,1131],{"class":102},":\n",[92,1133,1134,1137,1140],{"class":94,"line":168},[92,1135,1136],{"class":113},"      \"",[92,1138,1139],{"class":117},"A CPF Generator is a tool that generates valid CPF numbers, useful for testing and system development. It applies the official CPF validation algorithm to ensure that the generated numbers are correctly formatted.",[92,1141,420],{"class":113},[92,1143,1144],{"class":94,"line":174},[92,1145,717],{"class":98},[92,1147,1148,1150],{"class":94,"line":180},[92,1149,1106],{"class":322},[92,1151,388],{"class":98},[92,1153,1154,1156,1158,1160,1163,1165],{"class":94,"line":186},[92,1155,900],{"class":98},[92,1157,402],{"class":102},[92,1159,743],{"class":113},[92,1161,1162],{"class":117},"How does the CPF Generator work?",[92,1164,114],{"class":113},[92,1166,895],{"class":98},[92,1168,1169,1171],{"class":94,"line":192},[92,1170,1128],{"class":98},[92,1172,1131],{"class":102},[92,1174,1175,1177,1180],{"class":94,"line":198},[92,1176,1136],{"class":113},[92,1178,1179],{"class":117},"The CPF Generator randomly creates the first nine digits of the CPF and then calculates the two check digits using the official validation algorithm, ensuring the generated number is valid.",[92,1181,420],{"class":113},[92,1183,1184],{"class":94,"line":204},[92,1185,811],{"class":98},[92,1187,1188],{"class":94,"line":210},[92,1189,817],{"class":98},[92,1191,1192,1194,1196],{"class":94,"line":216},[92,1193,225],{"class":98},[92,1195,103],{"class":102},[92,1197,123],{"class":98},[15,1199,1200],{},"Until May 2026, this markup could produce a rich result like the one in the image below:",[59,1202],{"alt":1203,"height":1204,"src":1205,"width":1206},"example of a rich FAQ result on Google for the question about what Nuxt.JS is, shown before Google ended the feature",351,"\u002Fimages\u002Fblog\u002Fseo\u002Fstructured-data\u002Ffaq-rich-result-example-1.webp",681,[24,1208,1210],{"id":1209},"how-to-check-that-the-json-ld-is-in-the-html","How to Check That the JSON-LD Is in the HTML",[15,1212,1213,1214,1217,1218,1220],{},"Open the page in the browser and use \"View page source\", not \"Inspect element\". Look for a ",[19,1215,1216],{},"\u003Cscript type=\"application\u002Fld+json\">"," block. ",[19,1219,21],{}," injects the JSON-LD during server rendering, so it has to be in the raw HTML. If it only shows up after hydration, review the rendering configuration of the page.",[24,1222,1224],{"id":1223},"how-to-validate-structured-data","How to Validate Structured Data",[15,1226,1227],{},"After publishing, validate the page with these tools:",[296,1229,1230,1239,1248],{},[241,1231,1232,1233,1238],{},"Google's ",[281,1234,1237],{"href":1235,"rel":1236},"https:\u002F\u002Fsearch.google.com\u002Ftest\u002Frich-results",[285],"Rich Results Test",": shows the items detected on the URL and lists errors and warnings.",[241,1240,1241,1242,1247],{},"The ",[281,1243,1246],{"href":1244,"rel":1245},"https:\u002F\u002Fvalidator.schema.org",[285],"Schema Markup Validator",": checks the JSON-LD syntax against schema.org, regardless of whether Google shows a rich result.",[241,1249,1250],{},"The structured data report in Search Console: groups the errors and warnings of the whole site.",[15,1252,1253],{},"The most common problems on blogs are these:",[238,1255,1256,1267,1270,1279],{},[241,1257,1258,1259,47,1261,1263,1264,1266],{},"A missing recommended property, such as ",[19,1260,464],{},[19,1262,480],{},". It is not a critical error in ",[19,1265,447],{},", but it limits what Google can use.",[241,1268,1269],{},"A small or inaccessible image. For Discover, the image needs to be at least 1200 px wide and the URL cannot be blocked for the crawler.",[241,1271,1272,1273,47,1276,839],{},"An invalid date format. Use ISO 8601, like ",[19,1274,1275],{},"2026-10-03",[19,1277,1278],{},"2026-10-03T14:30:00-03:00",[241,1280,1281],{},"Markup that differs from the visible content. The title, author, date and image in the schema must match what the user sees on the page.",[24,1283,1285],{"id":1284},"how-to-get-google-to-index-your-article","How to Get Google to Index Your Article",[15,1287,1288],{},"Correct structured data does not help if Google does not index the page. The flow for a new article is this:",[296,1290,1291,1302,1305],{},[241,1292,1293,1294,1297,1298,1301],{},"Confirm the URL is in ",[19,1295,1296],{},"sitemap.xml"," and that the sitemap is submitted in Search Console. In Nuxt, the ",[19,1299,1300],{},"@nuxtjs\u002Fsitemap"," module generates this file.",[241,1303,1304],{},"Paste the URL in the \"Inspect any URL\" field of Search Console.",[241,1306,1307],{},"Click \"Request indexing\".",[15,1309,1310],{},"The indexing request puts the URL in a crawl queue, but it does not guarantee indexing, and Google does not give a timeframe. Google also does not publish the daily request limit. When you reach it, the button becomes unavailable until the next day, so use it only for important URLs and do not resubmit the same page several times.",[15,1312,1313],{},"For the other pages, what helps Google find them is the sitemap and internal links. A page with no links from other pages on the site tends to be discovered more slowly. Link to new articles from the blog listing and from related posts.",[841,1315,1317],{"id":1316},"discovered-currently-not-indexed","Discovered, Currently Not Indexed",[15,1319,1320],{},"In the page indexing report, two statuses confuse many people:",[238,1322,1323,1326],{},[241,1324,1325],{},"Discovered, currently not indexed: Google knows the URL but has not crawled it yet. Strengthen internal links, check that the URL is in the sitemap and verify that the server is not returning 5xx errors or responding slowly.",[241,1327,1328],{},"Crawled, currently not indexed: Google already read the page and decided not to index it for now. It is usually a quality issue: content too similar to something already indexed, shallow, or off the search intent. Improve the content and only then request indexing again.",[24,1330,1332],{"id":1331},"how-to-appear-in-google-discover","How to Appear in Google Discover",[15,1334,1335],{},"Discover is the content feed in the Google app and on mobile browsers. It shows content based on each user's interests, without depending on a search. According to Google's documentation, to be eligible the content needs to:",[238,1337,1338,1341,1348],{},[241,1339,1340],{},"Be indexed and follow Discover's content policies, with no clickbait or sensationalism.",[241,1342,1343,1344,1347],{},"Have an image at least 1200 px wide and more than 300,000 pixels in total, in a 16x9 aspect ratio, with the ",[19,1345,1346],{},"max-image-preview:large"," robots meta enabled.",[241,1349,1350],{},"Be original, helpful and made for people.",[15,1352,1353,1354,1356,1357,1360],{},"No structured data is required for Discover. But Google uses the schema.org ",[19,1355,464],{}," and the ",[19,1358,1359],{},"og:image"," meta tag to choose the card image, so keep both pointing to a good image and do not use the site logo instead.",[15,1362,1363],{},"In Nuxt, the robots meta can be set on the page itself:",[83,1365,1367],{"className":511,"code":1366,"language":513,"meta":88,"style":88},"\u003Cscript setup>\nuseSeoMeta({\n  robots: \"index, follow, max-image-preview:large\"\n});\n\u003C\u002Fscript>\n",[19,1368,1369,1379,1386,1400,1404],{"__ignoreMap":88},[92,1370,1371,1373,1375,1377],{"class":94,"line":95},[92,1372,99],{"class":98},[92,1374,103],{"class":102},[92,1376,524],{"class":106},[92,1378,123],{"class":98},[92,1380,1381,1384],{"class":94,"line":126},[92,1382,1383],{"class":322},"useSeoMeta",[92,1385,388],{"class":98},[92,1387,1388,1391,1393,1395,1398],{"class":94,"line":132},[92,1389,1390],{"class":98},"  robots",[92,1392,402],{"class":102},[92,1394,743],{"class":113},[92,1396,1397],{"class":117},"index, follow, max-image-preview:large",[92,1399,420],{"class":113},[92,1401,1402],{"class":94,"line":138},[92,1403,434],{"class":98},[92,1405,1406,1408,1410],{"class":94,"line":144},[92,1407,225],{"class":98},[92,1409,103],{"class":102},[92,1411,123],{"class":98},[15,1413,1414],{},"Discover performance shows up in its own report in Search Console. If your site has no data there, the content is not being shown in the feed yet.",[24,1416,1418],{"id":1417},"notifying-bing-with-indexnow","Notifying Bing with IndexNow",[15,1420,1421,1422,1425,1426,839],{},"IndexNow is a protocol adopted by Bing and other search engines to signal when a URL is created, updated or removed. You generate a key, publish a ",[19,1423,1424],{},".txt"," file with it at the root of the domain and make a request to the IndexNow endpoint whenever you publish or update an article. This tells the search engine something new exists, but it does not guarantee immediate indexing. The official guide is at ",[281,1427,1430],{"href":1428,"rel":1429},"https:\u002F\u002Fwww.bing.com\u002Findexnow\u002Fgetstarted",[285],"bing.com\u002Findexnow\u002Fgetstarted",[24,1432,1434],{"id":1433},"frequently-asked-questions","Frequently Asked Questions",[841,1436,1438],{"id":1437},"do-i-need-structured-data-for-my-blog-to-rank","Do I need structured data for my blog to rank?",[15,1440,1441,1442,1444],{},"No. It is not required to rank, but it helps Google understand your articles better. For a blog, the starting point is ",[19,1443,447],{}," with an author and an image, plus the breadcrumb.",[841,1446,1448],{"id":1447},"is-it-worth-keeping-faqpage-if-it-no-longer-produces-a-rich-result","Is it worth keeping FAQPage if it no longer produces a rich result?",[15,1450,1451],{},"It is, if the page has a question and answer section that is visible to the user. In that case the markup serves to describe the content.",[841,1453,1455],{"id":1454},"does-structured-data-guarantee-my-post-shows-up-in-discover","Does structured data guarantee my post shows up in Discover?",[15,1457,1458],{},"No. Discover does not require structured data. What matters is that the content is indexed, has a large image and follows the content policies.",[841,1460,1462],{"id":1461},"my-article-shows-as-crawled-currently-not-indexed-what-should-i-do","My article shows as \"Crawled, currently not indexed\". What should I do?",[15,1464,1465],{},"That status usually points to the quality or originality of the page. Improve the content, strengthen internal links and request indexing again afterward.",[841,1467,1469],{"id":1468},"how-do-i-know-google-is-reading-my-json-ld","How do I know Google is reading my JSON-LD?",[15,1471,1472],{},"Check the raw HTML in \"View page source\", test the URL in the Rich Results Test and follow the structured data report in Search Console.",[24,1474,1476],{"id":1475},"conclusion","Conclusion",[15,1478,1479,1480,1482,1483,1485],{},"For each new article, mark up ",[19,1481,447],{}," with author, image and dates, check the JSON-LD in the source, validate it in the Rich Results Test and follow the indexing report in Search Console. Update ",[19,1484,835],{}," only when the content really changes and, if Bing matters to you, set up IndexNow.",[15,1487,1488,1489,1011,1494,471,1499,839],{},"To go deeper, read the ",[281,1490,1493],{"href":1491,"rel":1492},"https:\u002F\u002Fnuxtseo.com\u002Fdocs\u002Fschema-org\u002Fgetting-started\u002Fintroduction",[285],"complete documentation of the module",[281,1495,1498],{"href":1496,"rel":1497},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Farticle",[285],"Google's documentation on Article structured data",[281,1500,1503],{"href":1501,"rel":1502},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fgoogle-discover",[285],"Google's Discover documentation",[1505,1506,1507],"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":88,"searchDepth":126,"depth":126,"links":1509},[1510,1511,1512,1513,1514,1515,1516,1521,1522,1523,1526,1527,1528,1535],{"id":26,"depth":126,"text":27},{"id":40,"depth":126,"text":41},{"id":67,"depth":126,"text":68},{"id":232,"depth":126,"text":233},{"id":255,"depth":126,"text":256},{"id":276,"depth":126,"text":277},{"id":440,"depth":126,"text":441,"children":1517},[1518,1519,1520],{"id":843,"depth":132,"text":844},{"id":999,"depth":132,"text":1000},{"id":1045,"depth":132,"text":1046},{"id":1209,"depth":126,"text":1210},{"id":1223,"depth":126,"text":1224},{"id":1284,"depth":126,"text":1285,"children":1524},[1525],{"id":1316,"depth":132,"text":1317},{"id":1331,"depth":126,"text":1332},{"id":1417,"depth":126,"text":1418},{"id":1433,"depth":126,"text":1434,"children":1529},[1530,1531,1532,1533,1534],{"id":1437,"depth":132,"text":1438},{"id":1447,"depth":132,"text":1448},{"id":1454,"depth":132,"text":1455},{"id":1461,"depth":132,"text":1462},{"id":1468,"depth":132,"text":1469},{"id":1475,"depth":126,"text":1476},[1537,1538,1539],"nuxt","vuejs","seo","How to add structured data in Nuxt.js with nuxt-schema-org: Article, breadcrumb, validation, indexing in Search Console and Google Discover, with code examples.","how-to-create-structured-data-with-nuxtjs","md",{},"\u002Fen\u002Fblog\u002Fhow-to-create-structured-data-with-nuxtjs","como-criar-dados-estruturados-com-nuxtjs","2025-01-22",{"title":5,"description":1540},{"loc":1544,"images":1549,"lastmod":1552},[1550,1551],{"loc":63},{"loc":1205},"2026-10-06","en\u002Fblog\u002Fhow-to-create-structured-data-with-nuxtjs",2024,"u3LF7VbQ71jTkhZ6Mxdt0r_KmRugMzYtUkzwze8nyGA",[1557,1565,1573,1580,1587,1595,1597,1605,1612,1620,1626,1634,1641,1647,1654],{"id":1558,"path":1559,"title":1560,"articleCover":1561,"categoriesIds":1562,"publishedAt":1564},"blogEn\u002Fen\u002Fblog\u002Fcore-web-vitals-how-user-experience-affects-seo.md","\u002Fen\u002Fblog\u002Fcore-web-vitals-how-user-experience-affects-seo","Core Web Vitals and SEO: How User Experience Affects Your Site","\u002Fimages\u002Fen\u002Fblog\u002Fseo\u002Fweb-vitals\u002Fcore-web-vitals-how-user-experience-affects-seo.webp",[1539,1563],"web-vitals","2024-10-25",{"id":1566,"path":1567,"title":1568,"articleCover":1569,"categoriesIds":1570,"publishedAt":1572},"blogEn\u002Fen\u002Fblog\u002Ffree-developer-tools-hub.md","\u002Fen\u002Fblog\u002Ffree-developer-tools-hub","I Built a Free Web Tools Hub for Developers","\u002Fimages\u002Fen\u002Fblog\u002Ftools\u002Ffree-developer-tools-hub.webp",[1571],"tools","2026-01-06",{"id":1574,"path":1575,"title":1576,"articleCover":1577,"categoriesIds":1578,"publishedAt":1579},"blogEn\u002Fen\u002Fblog\u002Fhow-the-routing-system-works-in-nuxt.md","\u002Fen\u002Fblog\u002Fhow-the-routing-system-works-in-nuxt","Nuxt Routing: Dynamic, Nested and Catch-All Routes","\u002Fimages\u002Fblog\u002Fnuxt\u002Fnuxt-routing-thumb.webp",[1537,1538],"2025-03-12",{"id":1581,"path":1582,"title":1583,"articleCover":1584,"categoriesIds":1585,"publishedAt":1586},"blogEn\u002Fen\u002Fblog\u002Fhow-to-add-special-characters-on-i18n.md","\u002Fen\u002Fblog\u002Fhow-to-add-special-characters-on-i18n","How to Add Special Characters in i18N Translations","\u002Fimages\u002Fblog\u002Fi18n\u002Fi18n-special-characters-on-nuxtjs-thumb.webp",[1537,1538],"2025-02-02",{"id":1588,"path":1589,"title":1590,"articleCover":1591,"categoriesIds":1592,"publishedAt":1594},"blogEn\u002Fen\u002Fblog\u002Fhow-to-create-and-set-up-ssh-key-github.md","\u002Fen\u002Fblog\u002Fhow-to-create-and-set-up-ssh-key-github","SSH Key in Git: How to Set Up an SSH Key for GitHub","\u002Fimages\u002Fen\u002Fblog\u002Fgit\u002Fhow-to-create-and-set-up-ssh-key-github-thumb.webp",[1593],"git","2025-02-04",{"id":4,"path":1544,"title":5,"articleCover":6,"categoriesIds":1596,"publishedAt":1546},[1537,1538,1539],{"id":1598,"path":1599,"title":1600,"articleCover":1601,"categoriesIds":1602,"publishedAt":1604},"blogEn\u002Fen\u002Fblog\u002Fhow-to-deal-with-envy-from-other-programmers.md","\u002Fen\u002Fblog\u002Fhow-to-deal-with-envy-from-other-programmers","How to Deal with Envy from Other Programmers in Your Career","\u002Fimages\u002Fen\u002Fblog\u002Fcareer\u002Fa-nail-that-stands-out-gets-hammered.webp",[1603],"career","2025-08-29",{"id":1606,"path":1607,"title":1608,"articleCover":1609,"categoriesIds":1610,"publishedAt":1611},"blogEn\u002Fen\u002Fblog\u002Fhow-to-use-middlewares-nuxtjs.md","\u002Fen\u002Fblog\u002Fhow-to-use-middlewares-nuxtjs","Middlewares: What They Are and How to Use Them in Nuxt.JS","\u002Fimages\u002Fblog\u002Fnuxt\u002Ffront-end-middlewares-thumb.webp",[1537,1538],"2025-02-03",{"id":1613,"path":1614,"title":1615,"articleCover":1616,"categoriesIds":1617,"publishedAt":1619},"blogEn\u002Fen\u002Fblog\u002Fhow-to-validate-cpf-with-javascript.md","\u002Fen\u002Fblog\u002Fhow-to-validate-cpf-with-javascript","How to validate a CPF with JavaScript","\u002Fimages\u002Fen\u002Fblog\u002Fjavascript\u002Fhow-to-validate-cpf-with-javascript.webp",[1618,1571],"javascript","2026-10-04",{"id":1621,"path":1622,"title":1623,"articleCover":1624,"categoriesIds":1625,"publishedAt":1619},"blogEn\u002Fen\u002Fblog\u002Fhow-to-validate-credit-card-with-javascript.md","\u002Fen\u002Fblog\u002Fhow-to-validate-credit-card-with-javascript","How to validate a credit card with JavaScript (Luhn algorithm)","\u002Fimages\u002Fen\u002Fblog\u002Fjavascript\u002Fhow-to-validate-credit-card-with-javascript.webp",[1618,1571],{"id":1627,"path":1628,"title":1629,"articleCover":1630,"categoriesIds":1631,"publishedAt":1633},"blogEn\u002Fen\u002Fblog\u002Frecovering-lost-files-in-git-with-vscode.md","\u002Fen\u002Fblog\u002Frecovering-lost-files-in-git-with-vscode","Recover Lost Files in Git Without a Commit Using VS Code Local History","\u002Fimages\u002Fen\u002Fblog\u002Fvscode\u002Fhow-to-recover-lost-files-in-git-using-vscode.webp",[1593,1632],"vscode","2025-01-21",{"id":1635,"path":1636,"title":1637,"articleCover":1638,"categoriesIds":1639,"publishedAt":1640},"blogEn\u002Fen\u002Fblog\u002Fvercel-buys-nuxt-labs.md","\u002Fen\u002Fblog\u002Fvercel-buys-nuxt-labs","Vercel Acquired Nuxt Labs! What Does This Mean for Nuxt?","\u002Fimages\u002Fen\u002Fblog\u002Fnuxt\u002Fvercel-buys-nuxt-labs.webp",[1537],"2025-07-17",{"id":1642,"path":1643,"title":1644,"articleCover":1645,"categoriesIds":1646,"publishedAt":1552},"blogEn\u002Fen\u002Fblog\u002Fvue-vapor-mode-what-it-is-and-how-to-use-it.md","\u002Fen\u002Fblog\u002Fvue-vapor-mode-what-it-is-and-how-to-use-it","Vue Vapor Mode: what it is and what changes in Vue 3.6","\u002Fimages\u002Fen\u002Fblog\u002Fvue\u002Fvue-vapor-mode-what-it-is-and-how-to-use-it.webp",[1538,1537],{"id":1648,"path":1649,"title":1650,"articleCover":1651,"categoriesIds":1652,"publishedAt":1653},"blogEn\u002Fen\u002Fblog\u002Fwhat-are-directives-in-vue-and-how-to-implement-them.md","\u002Fen\u002Fblog\u002Fwhat-are-directives-in-vue-and-how-to-implement-them","Vue 3 Directives: Built-in and Custom","\u002Fimages\u002Fen\u002Fblog\u002Fvue\u002Fwhat-are-directives-in-vue-and-how-to-implement-them.webp",[1538],"2025-03-21",{"id":1655,"path":1656,"title":1657,"articleCover":1658,"categoriesIds":1659,"publishedAt":1660},"blogEn\u002Fen\u002Fblog\u002Fwhat-is-the-difference-between-composition-api-and-options-api-in-vuejs.md","\u002Fen\u002Fblog\u002Fwhat-is-the-difference-between-composition-api-and-options-api-in-vuejs","Composition API vs Options API in Vue.js: What's the Difference?","\u002Fimages\u002Fen\u002Fblog\u002Fvue\u002Fwhat-is-the-difference-between-composition-api-and-options-api-in-vuejs.webp",[1538],"2025-02-20",1791682335092]