[{"data":1,"prerenderedAt":25414},["ShallowReactive",2],{"blog-articles:en":3},[4,1110,2028,2865,4093,4935,5681,6931,7662,8348,9536,10303,11215,12041,12690,13442,13904,14666,15514,16376,17724,18466,19108,19659,20110,20636,21142,21484,21925,22389,22832,23383,23871,24487,24981],{"id":5,"title":6,"author":7,"body":8,"category":1095,"description":1096,"draft":1097,"extension":1098,"featured":1099,"image":1100,"imageAlt":1101,"locale":1102,"meta":1103,"navigation":1099,"path":1104,"publishedAt":1105,"seo":1106,"slug":1107,"stem":1108,"translationKey":1107,"updatedAt":1105,"__hash__":1109},"blog\u002Fblog\u002Fen\u002Fcls-explained.md","CLS Explained: What Cumulative Layout Shift Means","SeoNest Team",{"type":9,"value":10,"toc":1070},"minimark",[11,16,25,36,40,45,55,58,61,65,68,118,125,133,137,140,146,158,164,168,175,178,188,195,204,207,213,219,224,227,233,243,246,250,253,267,270,273,277,280,284,287,290,362,365,414,429,433,436,439,442,476,486,490,493,496,500,503,527,531,546,549,587,590,618,632,636,642,650,657,664,667,672,678,682,685,688,694,700,705,709,712,846,856,860,866,872,878,884,888,891,894,904,908,913,919,923,933,937,940,944,947,951,957,961,967,970,973,977,1066],[12,13,15],"h2",{"id":14},"cls-explained-cumulative-layout-shift","CLS Explained: Cumulative Layout Shift",[17,18,19,20,24],"p",{},"A page can load quickly and still feel broken. You start reading, an image appears, the text suddenly moves downward, and the button you were about to click jumps somewhere else. That instability is what ",[21,22,23],"strong",{},"Cumulative Layout Shift (CLS)"," is designed to measure.",[17,26,27,28,35],{},"CLS is one of Google's three Core Web Vitals, alongside Largest Contentful Paint (LCP) and Interaction to Next Paint (INP). Unlike those metrics, CLS is not measured in milliseconds. It produces a unitless score that represents how much visible content moved unexpectedly and how significant that movement was. (",[29,30,34],"a",{"href":31,"rel":32},"https:\u002F\u002Fweb.dev\u002Farticles\u002Fcls?authuser=6",[33],"nofollow","web.dev",")",[12,37,39],{"id":38},"what-is-cls","What Is CLS?",[17,41,42],{},[21,43,44],{},"Cumulative Layout Shift measures the visual stability of a web page by quantifying unexpected movement of visible content.",[17,46,47,48,51,52,35],{},"A layout shift occurs when a visible element changes its starting position between two rendered frames. CLS then groups unexpected shifts into short bursts called ",[21,49,50],{},"session windows"," and reports the session window with the largest combined shift score. (",[29,53,34],{"href":31,"rel":54},[33],[17,56,57],{},"A practical example is an article where the browser initially renders the headline and text, then an image without reserved dimensions loads above them. The image takes up space, pushes the article downward, and forces the reader to find their place again.",[17,59,60],{},"That movement contributes to CLS.",[12,62,64],{"id":63},"cls-score","CLS Score",[17,66,67],{},"Google's current thresholds are:",[69,70,71,84],"table",{},[72,73,74],"thead",{},[75,76,77,81],"tr",{},[78,79,80],"th",{},"CLS",[78,82,83],{},"Assessment",[85,86,87,98,108],"tbody",{},[75,88,89,95],{},[90,91,92],"td",{},[21,93,94],{},"0.10 or lower",[90,96,97],{},"Good",[75,99,100,105],{},[90,101,102],{},[21,103,104],{},"Above 0.10 to 0.25",[90,106,107],{},"Needs improvement",[75,109,110,115],{},[90,111,112],{},[21,113,114],{},"Above 0.25",[90,116,117],{},"Poor",[17,119,120,121,124],{},"For Core Web Vitals evaluation, Google recommends looking at the ",[21,122,123],{},"75th percentile of page visits",", segmented between mobile and desktop. In practical terms, at least 75% of visits should experience a CLS of 0.10 or lower.",[17,126,127,128,132],{},"CLS is unitless. A score of ",[129,130,131],"code",{},"0.1"," does not mean 0.1 seconds. It represents the combined severity of unexpected visual movement.",[12,134,136],{"id":135},"why-cls-matters","Why CLS Matters",[17,138,139],{},"Layout instability directly affects usability.",[17,141,142,143,35],{},"A shift can make someone lose their reading position, cause a form control to move while they are interacting with it, or make a user accidentally click a different button from the one they intended. The problem becomes especially noticeable on slower networks, where images, advertisements, fonts, API responses, and third-party content may arrive later than they do during local development. (",[29,144,34],{"href":31,"rel":145},[33],[17,147,148,149,152,153,35],{},"CLS also matters to search performance. Google documents Core Web Vitals as signals used by its ranking systems and recommends achieving good Core Web Vitals for Search and user experience. However, a good CLS score does ",[21,150,151],{},"not"," guarantee higher rankings. Google evaluates many signals, and Core Web Vitals are only one part of page experience. (",[29,154,157],{"href":155,"rel":156},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fcore-web-vitals?authuser=1",[33],"developers.google.com",[17,159,160],{},[161,162,163],"span",{},"INTERNAL LINK: Core Web Vitals Explained",[12,165,167],{"id":166},"how-cls-works","How CLS Works",[17,169,170,171,174],{},"CLS starts with individual ",[21,172,173],{},"layout shift scores",".",[17,176,177],{},"For every relevant shift, the browser evaluates two factors:",[179,180,186],"pre",{"className":181,"code":183,"language":184,"meta":185},[182],"language-text","layout shift score = impact fraction × distance fraction\n","text","",[129,187,183],{"__ignoreMap":185},[17,189,190,191,194],{},"The ",[21,192,193],{},"impact fraction"," represents how much of the viewport is affected by unstable elements before and after the movement.",[17,196,190,197,200,201,35],{},[21,198,199],{},"distance fraction"," measures how far the most displaced unstable element moved relative to the viewport's largest dimension. (",[29,202,34],{"href":31,"rel":203},[33],[17,205,206],{},"Suppose a moving element affects 75% of the viewport and moves a distance equivalent to 25% of the viewport's largest dimension:",[179,208,211],{"className":209,"code":210,"language":184,"meta":185},[182],"0.75 × 0.25 = 0.1875\n",[129,212,210],{"__ignoreMap":185},[17,214,215,216,174],{},"The layout shift score for that event is therefore ",[129,217,218],{},"0.1875",[220,221,223],"h3",{"id":222},"session-windows","Session Windows",[17,225,226],{},"Modern CLS does not simply add every layout shift that occurs throughout a page's lifetime.",[17,228,229,230,232],{},"Individual unexpected shifts are grouped into ",[21,231,50],{},". A session window contains shifts separated by less than one second and can last for a maximum of five seconds.",[17,234,235,236,239,240,35],{},"The page's CLS is the combined score of the ",[21,237,238],{},"largest session window",". (",[29,241,34],{"href":31,"rel":242},[33],[17,244,245],{},"This approach prevents long-lived pages such as single-page applications and infinite-scroll interfaces from being automatically penalized simply because users keep them open longer.",[12,247,249],{"id":248},"expected-shifts","Expected Shifts",[17,251,252],{},"Not every movement contributes to CLS.",[17,254,255,256,259,260,263,264,35],{},"A shift caused directly by a discrete user interaction—such as a click, tap, or keypress—can be excluded when it happens within ",[21,257,258],{},"500 milliseconds"," of that interaction. The Layout Instability API exposes this through the ",[129,261,262],{},"hadRecentInput"," property. (",[29,265,34],{"href":31,"rel":266},[33],[17,268,269],{},"For example, expanding an accordion immediately after a user clicks it is generally expected.",[17,271,272],{},"However, scrolling is different. Continuous interactions such as scrolling are not treated in the same way. If lazy-loaded content suddenly pushes existing content downward while the user scrolls, that movement can still contribute to CLS.",[12,274,276],{"id":275},"common-cls-causes","Common CLS Causes",[17,278,279],{},"The most frequent causes are surprisingly ordinary.",[220,281,283],{"id":282},"unsized-images","Unsized Images",[17,285,286],{},"An image without known dimensions can initially occupy little or no layout space. Once the image loads, the browser discovers its size and moves surrounding content.",[17,288,289],{},"Reserve the required space using HTML dimensions:",[179,291,295],{"className":292,"code":293,"language":294,"meta":185,"style":185},"language-html shiki shiki-themes github-light github-dark","\u003Cimg\n  src=\"product.jpg\"\n  width=\"1200\"\n  height=\"800\"\n  alt=\"Product\"\n>\n","html",[129,296,297,309,323,334,345,356],{"__ignoreMap":185},[161,298,301,305],{"class":299,"line":300},"line",1,[161,302,304],{"class":303},"sVt8B","\u003C",[161,306,308],{"class":307},"s9eBZ","img\n",[161,310,312,316,319],{"class":299,"line":311},2,[161,313,315],{"class":314},"sScJk","  src",[161,317,318],{"class":303},"=",[161,320,322],{"class":321},"sZZnC","\"product.jpg\"\n",[161,324,326,329,331],{"class":299,"line":325},3,[161,327,328],{"class":314},"  width",[161,330,318],{"class":303},[161,332,333],{"class":321},"\"1200\"\n",[161,335,337,340,342],{"class":299,"line":336},4,[161,338,339],{"class":314},"  height",[161,341,318],{"class":303},[161,343,344],{"class":321},"\"800\"\n",[161,346,348,351,353],{"class":299,"line":347},5,[161,349,350],{"class":314},"  alt",[161,352,318],{"class":303},[161,354,355],{"class":321},"\"Product\"\n",[161,357,359],{"class":299,"line":358},6,[161,360,361],{"class":303},">\n",[17,363,364],{},"Responsive CSS can still resize the image:",[179,366,370],{"className":367,"code":368,"language":369,"meta":185,"style":185},"language-css shiki shiki-themes github-light github-dark","img {\n  width: 100%;\n  height: auto;\n}\n","css",[129,371,372,380,398,409],{"__ignoreMap":185},[161,373,374,377],{"class":299,"line":300},[161,375,376],{"class":307},"img",[161,378,379],{"class":303}," {\n",[161,381,382,385,388,391,395],{"class":299,"line":311},[161,383,328],{"class":384},"sj4cs",[161,386,387],{"class":303},": ",[161,389,390],{"class":384},"100",[161,392,394],{"class":393},"szBVR","%",[161,396,397],{"class":303},";\n",[161,399,400,402,404,407],{"class":299,"line":325},[161,401,339],{"class":384},[161,403,387],{"class":303},[161,405,406],{"class":384},"auto",[161,408,397],{"class":303},[161,410,411],{"class":299,"line":336},[161,412,413],{"class":303},"}\n",[17,415,416,417,420,421,424,425,35],{},"Modern browsers can use the ",[129,418,419],{},"width"," and ",[129,422,423],{},"height"," attributes to determine the image's aspect ratio before the image finishes loading. (",[29,426,34],{"href":427,"rel":428},"https:\u002F\u002Fweb.dev\u002Farticles\u002Foptimize-cls",[33],[220,430,432],{"id":431},"ads-and-embeds","Ads and Embeds",[17,434,435],{},"Advertisements, video embeds, maps, social widgets, and iframes often load after the surrounding page.",[17,437,438],{},"If their container initially has no height, everything below it may move when the content appears.",[17,440,441],{},"Reserve predictable space:",[179,443,445],{"className":367,"code":444,"language":369,"meta":185,"style":185},".video-wrapper {\n  aspect-ratio: 16 \u002F 9;\n}\n",[129,446,447,454,472],{"__ignoreMap":185},[161,448,449,452],{"class":299,"line":300},[161,450,451],{"class":314},".video-wrapper",[161,453,379],{"class":303},[161,455,456,459,461,464,467,470],{"class":299,"line":311},[161,457,458],{"class":384},"  aspect-ratio",[161,460,387],{"class":303},[161,462,463],{"class":384},"16",[161,465,466],{"class":303}," \u002F ",[161,468,469],{"class":384},"9",[161,471,397],{"class":303},[161,473,474],{"class":299,"line":325},[161,475,413],{"class":303},[17,477,478,479,482,483,35],{},"For variable-height content, a suitable ",[129,480,481],{},"min-height"," or placeholder can reduce movement. Removing reserved space when no advertisement appears can itself create another layout shift, so placeholders need to be designed carefully. (",[29,484,34],{"href":427,"rel":485},[33],[220,487,489],{"id":488},"dynamic-content","Dynamic Content",[17,491,492],{},"Cookie notices, promotional banners, alerts, recommendations, and asynchronously loaded components can cause large shifts when inserted above content the user is already viewing.",[17,494,495],{},"Prefer reserving space beforehand or, where appropriate, displaying the component as an overlay rather than inserting it into the document flow.",[220,497,499],{"id":498},"web-fonts","Web Fonts",[17,501,502],{},"A fallback font and the final web font can have different character widths, line heights, or metrics. When the real font arrives, text may wrap differently and move surrounding content.",[17,504,505,506,509,510,513,514,513,517,520,521,239,524,35],{},"Possible improvements include selecting a closer fallback font, loading critical fonts earlier, using ",[129,507,508],{},"font-display"," appropriately, and adjusting fallback font metrics with properties such as ",[129,511,512],{},"size-adjust",", ",[129,515,516],{},"ascent-override",[129,518,519],{},"descent-override",", and ",[129,522,523],{},"line-gap-override",[29,525,34],{"href":427,"rel":526},[33],[220,528,530],{"id":529},"layout-based-animations","Layout-Based Animations",[17,532,533,534,513,537,513,540,542,543,545],{},"Animating properties such as ",[129,535,536],{},"top",[129,538,539],{},"left",[129,541,419],{},", or ",[129,544,423],{}," can change layout.",[17,547,548],{},"Where possible, use compositor-friendly transforms:",[179,550,552],{"className":367,"code":551,"language":369,"meta":185,"style":185},".card {\n  transform: translateY(20px);\n}\n",[129,553,554,561,583],{"__ignoreMap":185},[161,555,556,559],{"class":299,"line":300},[161,557,558],{"class":314},".card",[161,560,379],{"class":303},[161,562,563,566,568,571,574,577,580],{"class":299,"line":311},[161,564,565],{"class":384},"  transform",[161,567,387],{"class":303},[161,569,570],{"class":384},"translateY",[161,572,573],{"class":303},"(",[161,575,576],{"class":384},"20",[161,578,579],{"class":393},"px",[161,581,582],{"class":303},");\n",[161,584,585],{"class":299,"line":325},[161,586,413],{"class":303},[17,588,589],{},"instead of repeatedly changing:",[179,591,593],{"className":367,"code":592,"language":369,"meta":185,"style":185},".card {\n  top: 20px;\n}\n",[129,594,595,601,614],{"__ignoreMap":185},[161,596,597,599],{"class":299,"line":300},[161,598,558],{"class":314},[161,600,379],{"class":303},[161,602,603,606,608,610,612],{"class":299,"line":311},[161,604,605],{"class":384},"  top",[161,607,387],{"class":303},[161,609,576],{"class":384},[161,611,579],{"class":393},[161,613,397],{"class":303},[161,615,616],{"class":299,"line":325},[161,617,413],{"class":303},[17,619,620,621,624,625,628,629,35],{},"Using ",[129,622,623],{},"transform: translate()"," or ",[129,626,627],{},"transform: scale()"," can visually move elements without creating the same type of layout shift. (",[29,630,34],{"href":31,"rel":631},[33],[12,633,635],{"id":634},"how-to-measure-cls","How to Measure CLS",[17,637,638,639,174],{},"Start with ",[21,640,641],{},"field data",[17,643,644,645,35],{},"Chrome UX Report (CrUX) contains aggregated real-user Core Web Vitals data, including CLS. PageSpeed Insights can display CrUX field data where sufficient data is available, while Search Console groups pages through its Core Web Vitals report. CrUX reports CLS at the 75th percentile and treats CLS as a unitless metric. (",[29,646,649],{"href":647,"rel":648},"https:\u002F\u002Fdeveloper.chrome.com\u002Fdocs\u002Fcrux\u002Fapi?utm_source=chatgpt.com",[33],"developer.chrome.com",[17,651,652,653,656],{},"Then use ",[21,654,655],{},"lab tools"," to investigate the problem.",[17,658,659,660,35],{},"Chrome DevTools' Performance panel exposes individual layout shifts and groups them into clusters. You can inspect shift scores, affected elements, timing, screenshots, and potential culprits. Chrome's Rendering tools can also highlight layout-shift regions visually. (",[29,661,649],{"href":662,"rel":663},"https:\u002F\u002Fdeveloper.chrome.com\u002Fdocs\u002Fdevtools\u002Fperformance\u002Freference?authuser=1&hl=en&utm_source=chatgpt.com",[33],[17,665,666],{},"A useful workflow is:",[17,668,669],{},[21,670,671],{},"Field CLS is poor → reproduce the page → identify the largest shift cluster → inspect the shifted elements → locate the element that caused the movement → fix it → measure again.",[17,673,674,675,35],{},"Do not assume the element that moved is the root cause. A paragraph may move because an advertisement, image, banner, or another component above it changed size. (",[29,676,34],{"href":427,"rel":677},[33],[12,679,681],{"id":680},"lab-vs-field-cls","Lab vs Field CLS",[17,683,684],{},"One common debugging mistake is expecting Lighthouse and real-user CLS to match exactly.",[17,686,687],{},"They measure different situations.",[17,689,690,691,35],{},"A normal Lighthouse test primarily observes the initial page load. Real users may continue scrolling, opening menus, loading more products, triggering route changes, or keeping a page open for several minutes. Unexpected shifts happening later can therefore appear in CrUX even when a simple Lighthouse load looks stable. (",[29,692,34],{"href":427,"rel":693},[33],[17,695,696,697,174],{},"When lab CLS is low but field CLS is high, investigate ",[21,698,699],{},"post-load interactions and scrolling behavior",[17,701,702],{},[161,703,704],{},"INTERNAL LINK: Lab Data vs Field Data",[12,706,708],{"id":707},"cls-debugging","CLS Debugging",[17,710,711],{},"For difficult cases, Chromium exposes layout shifts through the Layout Instability API:",[179,713,717],{"className":714,"code":715,"language":716,"meta":185,"style":185},"language-js shiki shiki-themes github-light github-dark","new PerformanceObserver((entryList) => {\n  for (const entry of entryList.getEntries()) {\n    if (!entry.hadRecentInput) {\n      console.log('Layout shift:', entry.value, entry.sources);\n    }\n  }\n}).observe({\n  type: 'layout-shift',\n  buffered: true\n});\n","js",[129,718,719,742,768,781,797,802,807,819,831,840],{"__ignoreMap":185},[161,720,721,724,727,730,734,737,740],{"class":299,"line":300},[161,722,723],{"class":393},"new",[161,725,726],{"class":314}," PerformanceObserver",[161,728,729],{"class":303},"((",[161,731,733],{"class":732},"s4XuR","entryList",[161,735,736],{"class":303},") ",[161,738,739],{"class":393},"=>",[161,741,379],{"class":303},[161,743,744,747,750,753,756,759,762,765],{"class":299,"line":311},[161,745,746],{"class":393},"  for",[161,748,749],{"class":303}," (",[161,751,752],{"class":393},"const",[161,754,755],{"class":384}," entry",[161,757,758],{"class":393}," of",[161,760,761],{"class":303}," entryList.",[161,763,764],{"class":314},"getEntries",[161,766,767],{"class":303},"()) {\n",[161,769,770,773,775,778],{"class":299,"line":325},[161,771,772],{"class":393},"    if",[161,774,749],{"class":303},[161,776,777],{"class":393},"!",[161,779,780],{"class":303},"entry.hadRecentInput) {\n",[161,782,783,786,789,791,794],{"class":299,"line":336},[161,784,785],{"class":303},"      console.",[161,787,788],{"class":314},"log",[161,790,573],{"class":303},[161,792,793],{"class":321},"'Layout shift:'",[161,795,796],{"class":303},", entry.value, entry.sources);\n",[161,798,799],{"class":299,"line":347},[161,800,801],{"class":303},"    }\n",[161,803,804],{"class":299,"line":358},[161,805,806],{"class":303},"  }\n",[161,808,810,813,816],{"class":299,"line":809},7,[161,811,812],{"class":303},"}).",[161,814,815],{"class":314},"observe",[161,817,818],{"class":303},"({\n",[161,820,822,825,828],{"class":299,"line":821},8,[161,823,824],{"class":303},"  type: ",[161,826,827],{"class":321},"'layout-shift'",[161,829,830],{"class":303},",\n",[161,832,834,837],{"class":299,"line":833},9,[161,835,836],{"class":303},"  buffered: ",[161,838,839],{"class":384},"true\n",[161,841,843],{"class":299,"line":842},10,[161,844,845],{"class":303},"});\n",[17,847,848,849,852,853,35],{},"This is useful for debugging individual shifts, but it is not a complete implementation of the CLS metric. Correct CLS calculation requires grouping shifts into session windows and handling additional lifecycle cases. For production Real User Monitoring, the ",[129,850,851],{},"web-vitals"," library is generally safer than reimplementing the complete metric yourself. (",[29,854,34],{"href":31,"rel":855},[33],[12,857,859],{"id":858},"common-misconceptions","Common Misconceptions",[17,861,862,865],{},[21,863,864],{},"“CLS measures loading speed.”","\nNo. CLS measures visual stability. A page can load quickly and still have terrible CLS.",[17,867,868,871],{},[21,869,870],{},"“Any movement increases CLS.”","\nNo. CLS focuses on unexpected layout shifts. Some shifts associated closely with discrete user input are excluded.",[17,873,874,877],{},[21,875,876],{},"“A Lighthouse CLS of zero means users see zero CLS.”","\nNot necessarily. Post-load shifts may appear in field data but never occur during a simple synthetic page-load test.",[17,879,880,883],{},[21,881,882],{},"“The shifted element caused the problem.”","\nNot always. It may simply have been pushed by another element.",[12,885,887],{"id":886},"seonest-recommendation","SeoNest Recommendation",[17,889,890],{},"Treat CLS as a layout architecture problem rather than a score to optimize after development.",[17,892,893],{},"Reserve space for media and third-party components before they load. Design asynchronous UI so loading does not unexpectedly displace existing content. Test pages under realistic network conditions and user flows, not only during initial load.",[17,895,896,897,900,901,174],{},"For production sites, combine field monitoring with DevTools debugging. Field data tells you ",[21,898,899],{},"whether real users experience instability","; diagnostic tooling helps determine ",[21,902,903],{},"why",[12,905,907],{"id":906},"faq","FAQ",[909,910,912],"h4",{"id":911},"is-cls-part-of-core-web-vitals","Is CLS part of Core Web Vitals?",[17,914,915,916,35],{},"Yes. CLS is the Core Web Vital that measures visual stability. The other current Core Web Vitals are LCP for loading performance and INP for responsiveness. (",[29,917,157],{"href":155,"rel":918},[33],[909,920,922],{"id":921},"what-is-a-good-cls","What is a good CLS?",[17,924,925,926,929,930,35],{},"A CLS of ",[21,927,928],{},"0.10 or lower at the 75th percentile of page visits"," is considered good. (",[29,931,34],{"href":31,"rel":932},[33],[909,934,936],{"id":935},"is-cls-measured-in-seconds","Is CLS measured in seconds?",[17,938,939],{},"No. CLS is a unitless score.",[909,941,943],{"id":942},"can-lazy-loading-increase-cls","Can lazy loading increase CLS?",[17,945,946],{},"Lazy loading itself is not necessarily the problem. CLS occurs when lazy-loaded content appears without sufficient space having already been reserved.",[909,948,950],{"id":949},"can-cls-happen-after-page-load","Can CLS happen after page load?",[17,952,953,954,35],{},"Yes. Unexpected shifts can occur during scrolling, dynamic content updates, SPA transitions, or other post-load behavior. This is one reason field CLS may be higher than Lighthouse CLS. (",[29,955,34],{"href":427,"rel":956},[33],[12,958,960],{"id":959},"final-takeaway","Final Takeaway",[17,962,963,964],{},"CLS answers a simple question: ",[21,965,966],{},"does the page stay where the user expects it to stay?",[17,968,969],{},"A good CLS is not achieved by making every page static. Modern interfaces can still load content dynamically, animate elements, and react to user input. The important principle is predictability: reserve space before content arrives, avoid unexpectedly moving existing content, and validate the result using real-user data.",[17,971,972],{},"When a layout is stable by design, a good CLS score usually follows.",[12,974,976],{"id":975},"sources","Sources",[978,979,980,994,1007,1021,1036,1052],"ol",{},[981,982,983,984,986,987,749,991,35],"li",{},"web.dev — ",[21,985,23],{},". Last updated April 12, 2023. ",[29,988,23],{"href":989,"rel":990},"https:\u002F\u002Fweb.dev\u002Farticles\u002Fcls?utm_source=chatgpt.com",[33],[29,992,34],{"href":31,"rel":993},[33],[981,995,983,996,999,1000,749,1004,35],{},[21,997,998],{},"Optimize Cumulative Layout Shift",". Published May 5, 2020; updated February 7, 2025. ",[29,1001,998],{"href":1002,"rel":1003},"https:\u002F\u002Fweb.dev\u002Farticles\u002Foptimize-cls?utm_source=chatgpt.com",[33],[29,1005,34],{"href":427,"rel":1006},[33],[981,1008,983,1009,1012,1013,749,1017,35],{},[21,1010,1011],{},"Debug layout shifts",". Published March 11, 2021; updated February 7, 2025. ",[29,1014,1011],{"href":1015,"rel":1016},"https:\u002F\u002Fweb.dev\u002Farticles\u002Fdebug-layout-shifts?utm_source=chatgpt.com",[33],[29,1018,34],{"href":1019,"rel":1020},"https:\u002F\u002Fweb.dev\u002Farticles\u002Fdebug-layout-shifts",[33],[981,1022,1023,1024,1027,1028,749,1033,35],{},"Google Search Central — ",[21,1025,1026],{},"Understanding Core Web Vitals and Google search results",". Last updated December 10, 2025. ",[29,1029,1032],{"href":1030,"rel":1031},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fcore-web-vitals?utm_source=chatgpt.com",[33],"Google Search Central Core Web Vitals documentation",[29,1034,157],{"href":155,"rel":1035},[33],[981,1037,1038,1039,1042,1043,749,1048,35],{},"Chrome for Developers — ",[21,1040,1041],{},"Chrome UX Report: Metrics",". Published June 23, 2022; updated September 15, 2026. ",[29,1044,1047],{"href":1045,"rel":1046},"https:\u002F\u002Fdeveloper.chrome.com\u002Fdocs\u002Fcrux\u002Fmethodology\u002Fmetrics?utm_source=chatgpt.com",[33],"Chrome UX Report Metrics",[29,1049,649],{"href":1050,"rel":1051},"https:\u002F\u002Fdeveloper.chrome.com\u002Fdocs\u002Fcrux\u002Fmethodology\u002Fmetrics?authuser=804924846",[33],[981,1053,1038,1054,1057,1058,749,1063,35],{},[21,1055,1056],{},"Performance features reference",". ",[29,1059,1062],{"href":1060,"rel":1061},"https:\u002F\u002Fdeveloper.chrome.com\u002Fdocs\u002Fdevtools\u002Fperformance\u002Freference?utm_source=chatgpt.com",[33],"Chrome DevTools Performance reference",[29,1064,649],{"href":662,"rel":1065},[33],[1067,1068,1069],"style",{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}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 .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":185,"searchDepth":311,"depth":311,"links":1071},[1072,1073,1074,1075,1076,1079,1080,1087,1088,1089,1090,1091,1092,1093,1094],{"id":14,"depth":311,"text":15},{"id":38,"depth":311,"text":39},{"id":63,"depth":311,"text":64},{"id":135,"depth":311,"text":136},{"id":166,"depth":311,"text":167,"children":1077},[1078],{"id":222,"depth":325,"text":223},{"id":248,"depth":311,"text":249},{"id":275,"depth":311,"text":276,"children":1081},[1082,1083,1084,1085,1086],{"id":282,"depth":325,"text":283},{"id":431,"depth":325,"text":432},{"id":488,"depth":325,"text":489},{"id":498,"depth":325,"text":499},{"id":529,"depth":325,"text":530},{"id":634,"depth":311,"text":635},{"id":680,"depth":311,"text":681},{"id":707,"depth":311,"text":708},{"id":858,"depth":311,"text":859},{"id":886,"depth":311,"text":887},{"id":906,"depth":311,"text":907},{"id":959,"depth":311,"text":960},{"id":975,"depth":311,"text":976},"Performance","Learn what Cumulative Layout Shift (CLS) measures, how the score works, what causes layout shifts, and how to diagnose and improve CLS.",false,"md",true,"\u002Fcls-defination.png","image of CLS","en",{},"\u002Fblog\u002Fen\u002Fcls-explained","2026-09-20",{"title":6,"description":1096},"cls-explained","blog\u002Fen\u002Fcls-explained","q2ITFn4ZZSmPH-olBc8JwTQH8GeuS9lNVnvPYKBTH6E",{"id":1111,"title":1112,"author":7,"body":1113,"category":2018,"description":2019,"draft":1097,"extension":1098,"featured":1099,"image":2020,"imageAlt":2021,"locale":1102,"meta":2022,"navigation":1099,"path":2023,"publishedAt":1105,"seo":2024,"slug":2025,"stem":2026,"translationKey":2025,"updatedAt":1105,"__hash__":2027},"blog\u002Fblog\u002Fen\u002Fcrawling-in-seo.md","What Is Crawling in SEO? How Search Crawlers Work",{"type":9,"value":1114,"toc":1997},[1115,1119,1125,1146,1149,1153,1158,1161,1170,1174,1177,1241,1244,1249,1253,1256,1261,1264,1269,1272,1298,1313,1316,1321,1339,1358,1362,1365,1369,1376,1379,1385,1390,1394,1397,1400,1422,1440,1445,1449,1456,1458,1475,1487,1490,1493,1497,1500,1506,1509,1520,1526,1529,1538,1541,1571,1581,1586,1590,1593,1599,1605,1610,1614,1617,1633,1636,1639,1661,1667,1670,1675,1679,1682,1693,1696,1747,1750,1752,1761,1770,1779,1785,1787,1794,1797,1800,1803,1805,1809,1815,1819,1825,1829,1835,1839,1842,1846,1849,1851,1854,1860,1863,1865,1994],[12,1116,1118],{"id":1117},"what-is-crawling-in-seo","What Is Crawling in SEO?",[17,1120,1121,1122,174],{},"Before a search engine can understand or rank a web page, it usually has to find and retrieve it. That process is called ",[21,1123,1124],{},"crawling",[17,1126,1127,1128,513,1131,542,1134,1137,1138,1141,1142,35],{},"Search engines use automated programs called ",[21,1129,1130],{},"crawlers",[21,1132,1133],{},"bots",[21,1135,1136],{},"spiders"," to discover URLs and request their content. Google’s primary search crawler is called ",[21,1139,1140],{},"Googlebot",". It can discover pages through links, sitemaps, previously known URLs, and other signals, then fetch those URLs so their content can move into later search-processing stages. (",[29,1143,157],{"href":1144,"rel":1145},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Ffundamentals\u002Fhow-search-works?utm_source=chatgpt.com",[33],[17,1147,1148],{},"Crawling sounds simple, but problems with links, robots.txt, servers, redirects, JavaScript, or URL architecture can stop important pages from being discovered efficiently.",[12,1150,1152],{"id":1151},"direct-answer","Direct Answer",[17,1154,1155],{},[21,1156,1157],{},"Crawling in SEO is the process search engine bots use to discover and retrieve URLs from the web.",[17,1159,1160],{},"A crawler finds a URL, checks whether it is allowed to access it, sends a request to the server, receives the response, and may extract additional URLs from the page.",[17,1162,1163,1164,1166,1167,35],{},"Crawling does ",[21,1165,151],{}," mean a page is indexed or will rank. It only makes the page available for further processing. Google explicitly notes that not every crawled page is eventually indexed. (",[29,1168,157],{"href":1144,"rel":1169},[33],[12,1171,1173],{"id":1172},"crawling-vs-indexing","Crawling vs Indexing",[17,1175,1176],{},"These concepts are closely related but are not interchangeable.",[69,1178,1179,1189],{},[72,1180,1181],{},[75,1182,1183,1186],{},[78,1184,1185],{},"Stage",[78,1187,1188],{},"What happens",[85,1190,1191,1201,1211,1221,1231],{},[75,1192,1193,1198],{},[90,1194,1195],{},[21,1196,1197],{},"Discovery",[90,1199,1200],{},"The search engine becomes aware that a URL exists.",[75,1202,1203,1208],{},[90,1204,1205],{},[21,1206,1207],{},"Crawling",[90,1209,1210],{},"A crawler requests and retrieves the URL.",[75,1212,1213,1218],{},[90,1214,1215],{},[21,1216,1217],{},"Rendering",[90,1219,1220],{},"When necessary, the crawler processes the page and its JavaScript-generated content.",[75,1222,1223,1228],{},[90,1224,1225],{},[21,1226,1227],{},"Indexing",[90,1229,1230],{},"Search systems analyze the content and decide whether and how it should enter the search index.",[75,1232,1233,1238],{},[90,1234,1235],{},[21,1236,1237],{},"Serving",[90,1239,1240],{},"Indexed information may be selected for relevant search results.",[17,1242,1243],{},"A page can therefore be discovered but not crawled, crawled but not indexed, or indexed without ranking prominently for a particular query.",[17,1245,1246],{},[161,1247,1248],{},"INTERNAL LINK: What Is Indexing in SEO?",[12,1250,1252],{"id":1251},"how-crawling-works","How Crawling Works",[17,1254,1255],{},"A simplified crawling sequence looks like this:",[17,1257,1258],{},[21,1259,1260],{},"URL discovered → crawling permissions checked → HTTP request → server response → content processed → links discovered → indexing systems",[17,1262,1263],{},"Suppose Googlebot already knows this page:",[17,1265,1266],{},[129,1267,1268],{},"https:\u002F\u002Fexample.com\u002Fblog\u002F",[17,1270,1271],{},"The page contains a standard HTML link:",[179,1273,1275],{"className":292,"code":1274,"language":294,"meta":185,"style":185},"\u003Ca href=\"\u002Fblog\u002Ftechnical-seo\u002F\">Technical SEO\u003C\u002Fa>\n",[129,1276,1277],{"__ignoreMap":185},[161,1278,1279,1281,1283,1286,1288,1291,1294,1296],{"class":299,"line":300},[161,1280,304],{"class":303},[161,1282,29],{"class":307},[161,1284,1285],{"class":314}," href",[161,1287,318],{"class":303},[161,1289,1290],{"class":321},"\"\u002Fblog\u002Ftechnical-seo\u002F\"",[161,1292,1293],{"class":303},">Technical SEO\u003C\u002F",[161,1295,29],{"class":307},[161,1297,361],{"class":303},[17,1299,1300,1301,1304,1305,1308,1309,35],{},"Google can extract that URL and add it to the URLs it may crawl. Google specifically recommends using crawlable ",[129,1302,1303],{},"\u003Ca>"," elements with an ",[129,1306,1307],{},"href"," attribute for links you want its crawlers to follow reliably. (",[29,1310,157],{"href":1311,"rel":1312},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fcrawling-indexing\u002Flinks-crawlable?utm_source=chatgpt.com",[33],[17,1314,1315],{},"The crawler may then request:",[17,1317,1318],{},[129,1319,1320],{},"https:\u002F\u002Fexample.com\u002Fblog\u002Ftechnical-seo\u002F",[17,1322,1323,1324,1327,1328,1331,1332,1335,1336,174],{},"Your server might respond with ",[129,1325,1326],{},"200 OK",", a redirect such as ",[129,1329,1330],{},"301",", an error such as ",[129,1333,1334],{},"404",", or a server failure such as ",[129,1337,1338],{},"503",[17,1340,1341,1342,1345,1346,1349,1350,1353,1354,35],{},"A successful ",[129,1343,1344],{},"2xx"," response allows Google to pass the retrieved content into further processing, but even a successful response does not guarantee indexing. Persistent ",[129,1347,1348],{},"5xx"," errors and ",[129,1351,1352],{},"429 Too Many Requests"," responses can cause Google to reduce its crawling rate. (",[29,1355,157],{"href":1356,"rel":1357},"https:\u002F\u002Fdevelopers.google.com\u002Fcrawling\u002Fdocs\u002Ftroubleshooting\u002Fhttp-status-codes?authuser=19&utm_source=chatgpt.com",[33],[12,1359,1361],{"id":1360},"how-crawlers-find-urls","How Crawlers Find URLs",[17,1363,1364],{},"Search engines do not need you to submit every page manually.",[220,1366,1368],{"id":1367},"internal-and-external-links","Internal and External Links",[17,1370,1371,1372,35],{},"Links are one of the primary discovery mechanisms. Google documents that Googlebot discovers new URLs mainly through links found on pages it already knows. (",[29,1373,157],{"href":1374,"rel":1375},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fcrawling-indexing\u002Fgooglebot?utm_source=chatgpt.com",[33],[17,1377,1378],{},"This makes internal linking part of technical SEO, not just navigation.",[17,1380,1381,1382,174],{},"An important page that has no crawlable links pointing to it may be harder for crawlers to discover. Such pages are commonly described as ",[21,1383,1384],{},"orphan pages",[17,1386,1387],{},[161,1388,1389],{},"INTERNAL LINK: Internal Linking for SEO",[220,1391,1393],{"id":1392},"xml-sitemaps","XML Sitemaps",[17,1395,1396],{},"An XML sitemap provides search engines with a structured list of URLs you consider relevant.",[17,1398,1399],{},"For example:",[179,1401,1405],{"className":1402,"code":1403,"language":1404,"meta":185,"style":185},"language-xml shiki shiki-themes github-light github-dark","\u003Curl>\n  \u003Cloc>https:\u002F\u002Fexample.com\u002Fblog\u002Ftechnical-seo\u002F\u003C\u002Floc>\n\u003C\u002Furl>\n","xml",[129,1406,1407,1412,1417],{"__ignoreMap":185},[161,1408,1409],{"class":299,"line":300},[161,1410,1411],{},"\u003Curl>\n",[161,1413,1414],{"class":299,"line":311},[161,1415,1416],{},"  \u003Cloc>https:\u002F\u002Fexample.com\u002Fblog\u002Ftechnical-seo\u002F\u003C\u002Floc>\n",[161,1418,1419],{"class":299,"line":325},[161,1420,1421],{},"\u003C\u002Furl>\n",[17,1423,1424,1425,1428,1429,624,1432,1435,1436,35],{},"Google describes sitemap submission as a ",[21,1426,1427],{},"hint",", not a command or guarantee that every listed URL will be crawled or indexed. A single sitemap is limited to ",[21,1430,1431],{},"50,000 URLs",[21,1433,1434],{},"50 MB uncompressed","; larger sites can use multiple sitemaps and a sitemap index. (",[29,1437,157],{"href":1438,"rel":1439},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fcrawling-indexing\u002Fsitemaps\u002Fbuild-sitemap?authuser=77&utm_source=chatgpt.com",[33],[17,1441,1442],{},[161,1443,1444],{},"INTERNAL LINK: XML Sitemaps Explained",[12,1446,1448],{"id":1447},"robotstxt-and-crawling","robots.txt and Crawling",[17,1450,1451,1452,1455],{},"A ",[129,1453,1454],{},"robots.txt"," file can tell compliant crawlers which URL paths they are allowed or disallowed to request.",[17,1457,1399],{},[179,1459,1463],{"className":1460,"code":1461,"language":1462,"meta":185,"style":185},"language-txt shiki shiki-themes github-light github-dark","User-agent: *\nDisallow: \u002Fadmin\u002F\n","txt",[129,1464,1465,1470],{"__ignoreMap":185},[161,1466,1467],{"class":299,"line":300},[161,1468,1469],{},"User-agent: *\n",[161,1471,1472],{"class":299,"line":311},[161,1473,1474],{},"Disallow: \u002Fadmin\u002F\n",[17,1476,1477,1478,1481,1482,35],{},"The Robots Exclusion Protocol was standardized as ",[21,1479,1480],{},"RFC 9309"," in September 2022. The specification describes crawlers as automated clients and makes clear that robots.txt rules are not an access-control or authorization system. (",[29,1483,1486],{"href":1484,"rel":1485},"https:\u002F\u002Fwww.rfc-editor.org\u002Frfc\u002Frfc9309.html?utm_source=chatgpt.com",[33],"rfc-editor.org",[17,1488,1489],{},"That distinction matters.",[17,1491,1492],{},"If sensitive information must remain private, use authentication or another real access-control mechanism. Do not depend on robots.txt.",[220,1494,1496],{"id":1495},"robotstxt-is-not-noindex","robots.txt Is Not noindex",[17,1498,1499],{},"A common SEO mistake is assuming:",[1501,1502,1503],"blockquote",{},[17,1504,1505],{},"“If I block a URL in robots.txt, Google cannot index it.”",[17,1507,1508],{},"That is not reliably true.",[17,1510,1511,1512,1515,1516,35],{},"Google may discover a blocked URL through links and potentially show the URL in search results without crawling its content. Google therefore recommends ",[129,1513,1514],{},"noindex"," when the objective is to prevent an accessible page from appearing in Google Search. (",[29,1517,157],{"href":1518,"rel":1519},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fcrawling-indexing\u002Frobots\u002Fintro?authuser=1&utm_source=chatgpt.com",[33],[17,1521,1522,1523,1525],{},"There is an important catch: Google must be able to crawl the page to see its ",[129,1524,1514],{}," directive.",[17,1527,1528],{},"So this combination can be counterproductive:",[179,1530,1532],{"className":1460,"code":1531,"language":1462,"meta":185,"style":185},"Disallow: \u002Fprivate-page\u002F\n",[129,1533,1534],{"__ignoreMap":185},[161,1535,1536],{"class":299,"line":300},[161,1537,1531],{},[17,1539,1540],{},"combined with:",[179,1542,1544],{"className":292,"code":1543,"language":294,"meta":185,"style":185},"\u003Cmeta name=\"robots\" content=\"noindex\">\n",[129,1545,1546],{"__ignoreMap":185},[161,1547,1548,1550,1553,1556,1558,1561,1564,1566,1569],{"class":299,"line":300},[161,1549,304],{"class":303},[161,1551,1552],{"class":307},"meta",[161,1554,1555],{"class":314}," name",[161,1557,318],{"class":303},[161,1559,1560],{"class":321},"\"robots\"",[161,1562,1563],{"class":314}," content",[161,1565,318],{"class":303},[161,1567,1568],{"class":321},"\"noindex\"",[161,1570,361],{"class":303},[17,1572,1573,1574,1576,1577,35],{},"If crawling is blocked, Googlebot may never retrieve the HTML containing the ",[129,1575,1514],{}," instruction. (",[29,1578,157],{"href":1579,"rel":1580},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fcrawling-indexing\u002Fblock-indexing?utm_source=chatgpt.com",[33],[17,1582,1583],{},[161,1584,1585],{},"INTERNAL LINK: robots.txt Explained",[12,1587,1589],{"id":1588},"javascript-and-rendering","JavaScript and Rendering",[17,1591,1592],{},"Modern websites may deliver only part of their meaningful content in the original HTML and generate the rest through JavaScript.",[17,1594,1595,1596,35],{},"Google documents that during its processing it can render pages and execute JavaScript using a recent version of Chrome. Rendering matters because content or links introduced by JavaScript may not exist in the initial HTML response. (",[29,1597,157],{"href":1144,"rel":1598},[33],[17,1600,1601,1602,35],{},"However, JavaScript rendering does not remove the need for a technically crawlable website. Important links should still use standard link markup, essential resources should remain accessible, and developers should verify what Google actually receives and renders. (",[29,1603,157],{"href":1311,"rel":1604},[33],[17,1606,1607],{},[161,1608,1609],{},"INTERNAL LINK: JavaScript SEO Basics",[12,1611,1613],{"id":1612},"crawl-budget","Crawl Budget",[17,1615,1616],{},"Search engines cannot continuously crawl every URL on the web.",[17,1618,1619,1620,1623,1624,1628,1629,35],{},"Google describes ",[21,1621,1622],{},"crawl budget"," as the URLs its crawling systems ",[1625,1626,1627],"em",{},"can and want to crawl",", based mainly on crawl capacity and crawl demand. (",[29,1630,157],{"href":1631,"rel":1632},"https:\u002F\u002Fdevelopers.google.com\u002Fcrawling\u002Fdocs\u002Fcrawl-budget?utm_source=chatgpt.com",[33],[17,1634,1635],{},"For most ordinary websites, crawl budget is not something that requires aggressive optimization.",[17,1637,1638],{},"Google’s current guidance is primarily aimed at very large or rapidly changing sites, including roughly:",[1640,1641,1642,1649,1655],"ul",{},[981,1643,1644,1645,1648],{},"sites with ",[21,1646,1647],{},"1 million or more unique pages"," that change moderately often;",[981,1650,1644,1651,1654],{},[21,1652,1653],{},"10,000 or more unique pages"," that change very rapidly;",[981,1656,1657,1658,174],{},"sites with many URLs reported as ",[21,1659,1660],{},"Discovered – currently not indexed",[17,1662,1663,1664,35],{},"Google explicitly says these numbers are rough classifications rather than exact thresholds. (",[29,1665,157],{"href":1631,"rel":1666},[33],[17,1668,1669],{},"Large ecommerce sites, marketplaces, publishers, and sites with faceted navigation can create huge URL spaces through filters, sorting parameters, calendars, session IDs, or duplicates. In those situations, crawl efficiency becomes substantially more important.",[17,1671,1672],{},[161,1673,1674],{},"INTERNAL LINK: Crawl Budget Explained",[12,1676,1678],{"id":1677},"diagnosing-crawling-problems","Diagnosing Crawling Problems",[17,1680,1681],{},"If an important page is not appearing in search, first determine whether the problem is actually crawling.",[17,1683,1684,1685,1688,1689,35],{},"Check the URL with ",[21,1686,1687],{},"Google Search Console’s URL Inspection tool",". Google documents that it can show the current indexing status, test a live URL, request crawling, and provide information about loaded resources. (",[29,1690,157],{"href":1691,"rel":1692},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fmonitor-debug\u002Fsearch-console-start?utm_source=chatgpt.com",[33],[17,1694,1695],{},"Then investigate:",[978,1697,1698,1703,1708,1718,1730,1735,1741],{},[981,1699,1700,1702],{},[21,1701,1197],{}," — Is the page internally linked or included in the sitemap?",[981,1704,1705,1707],{},[21,1706,1454],{}," — Is Googlebot accidentally blocked?",[981,1709,1710,1713,1714,1717],{},[21,1711,1712],{},"HTTP response"," — Does the URL return the expected ",[129,1715,1716],{},"200",", redirect, or error?",[981,1719,1720,1723,1724,542,1727,1729],{},[21,1721,1722],{},"Server availability"," — Are DNS, network, timeout, ",[129,1725,1726],{},"429",[129,1728,1348],{}," errors occurring?",[981,1731,1732,1734],{},[21,1733,1217],{}," — Is important content available after JavaScript processing?",[981,1736,1737,1740],{},[21,1738,1739],{},"URL duplication"," — Are filters or parameters producing unnecessary URL variations?",[981,1742,1743,1746],{},[21,1744,1745],{},"Server logs"," — Has Googlebot actually requested the URL?",[17,1748,1749],{},"For crawler-level debugging, server access logs are especially valuable because they show what was actually requested rather than what you assume a crawler did.",[12,1751,859],{"id":858},[17,1753,1754,1757,1758,35],{},[21,1755,1756],{},"“A sitemap guarantees crawling.”","\nNo. Google calls sitemaps a hint. (",[29,1759,157],{"href":1438,"rel":1760},[33],[17,1762,1763,1766,1767,35],{},[21,1764,1765],{},"“Crawled means indexed.”","\nNo. Crawled content still has to pass later processing and indexing decisions. (",[29,1768,157],{"href":1631,"rel":1769},[33],[17,1771,1772,1775,1776,35],{},[21,1773,1774],{},"“robots.txt removes pages from Google.”","\nNot necessarily. It primarily controls crawling. (",[29,1777,157],{"href":1518,"rel":1778},[33],[17,1780,1781,1784],{},[21,1782,1783],{},"“More crawling always means better SEO.”","\nNot necessarily. The objective is efficient access to useful, important URLs—not maximizing crawler requests.",[12,1786,887],{"id":886},[17,1788,1789,1790,1793],{},"For most websites, crawling should be treated as an ",[21,1791,1792],{},"access and architecture problem",", not something to manipulate.",[17,1795,1796],{},"Make important pages discoverable through standard internal links, maintain an accurate sitemap, return correct HTTP responses, avoid accidentally blocking required pages or resources, and keep unnecessary URL variations under control.",[17,1798,1799],{},"Then verify the result with Search Console and server logs.",[17,1801,1802],{},"Only invest heavily in crawl-budget optimization when the site's scale or URL-generation behavior provides a real reason to do so.",[12,1804,907],{"id":906},[909,1806,1808],{"id":1807},"can-a-page-rank-without-being-crawled","Can a Page Rank Without Being Crawled?",[17,1810,1811,1812,35],{},"Search engines generally need to retrieve content before they can fully process and index it. A blocked URL may sometimes appear as a URL-only result based on external information, but its content cannot be processed normally if the crawler cannot retrieve it. (",[29,1813,157],{"href":1518,"rel":1814},[33],[909,1816,1818],{"id":1817},"how-often-does-google-crawl-a-website","How Often Does Google Crawl a Website?",[17,1820,1821,1822,35],{},"There is no universal schedule. Googlebot algorithmically determines what to crawl, how frequently, and how many URLs to request while also trying to avoid overloading servers. (",[29,1823,157],{"href":1144,"rel":1824},[33],[909,1826,1828],{"id":1827},"does-submitting-a-sitemap-make-google-crawl-faster","Does Submitting a Sitemap Make Google Crawl Faster?",[17,1830,1831,1832,35],{},"A sitemap can improve discovery, especially for new, updated, large, or difficult-to-discover URL sets, but submitting one does not guarantee immediate crawling. (",[29,1833,157],{"href":1438,"rel":1834},[33],[909,1836,1838],{"id":1837},"should-every-page-be-crawlable","Should Every Page Be Crawlable?",[17,1840,1841],{},"No. Administrative URLs, duplicate URL combinations, internal search results, and other low-value URL spaces may reasonably be restricted depending on the site's architecture. Pages intended to appear in organic search, however, generally need to remain accessible to search crawlers.",[909,1843,1845],{"id":1844},"is-crawling-a-ranking-factor","Is Crawling a Ranking Factor?",[17,1847,1848],{},"Crawling is primarily a prerequisite for search systems to retrieve and process content. It should not be confused with a documented ranking signal. A page being crawled frequently does not by itself demonstrate that it will rank higher.",[12,1850,960],{"id":959},[17,1852,1853],{},"Crawling is the retrieval layer of search.",[17,1855,1856,1857,1859],{},"Search engine crawlers discover URLs, request them from servers, process the responses, and find additional URLs to explore. Good technical SEO makes that process predictable: important content is easy to discover and fetch, irrelevant URL spaces do not consume unnecessary resources, and directives such as robots.txt and ",[129,1858,1514],{}," are used for their correct purposes.",[17,1861,1862],{},"If crawling fails, the rest of the search pipeline may never get the content it needs.",[12,1864,976],{"id":975},[978,1866,1867,1880,1892,1904,1917,1929,1942,1954,1967,1979],{},[981,1868,1869,1872,1873,749,1877,35],{},[21,1870,1871],{},"Google Search Central — In-Depth Guide to How Google Search Works."," Google for Developers. ",[29,1874,1876],{"href":1144,"rel":1875},[33],"How Google Search Works",[29,1878,157],{"href":1144,"rel":1879},[33],[981,1881,1882,1872,1885,749,1889,35],{},[21,1883,1884],{},"Google Search Central — Googlebot.",[29,1886,1888],{"href":1374,"rel":1887},[33],"Googlebot documentation",[29,1890,157],{"href":1374,"rel":1891},[33],[981,1893,1894,1872,1897,749,1901,35],{},[21,1895,1896],{},"Google Crawling Infrastructure — Optimize Your Crawl Budget.",[29,1898,1900],{"href":1631,"rel":1899},[33],"Crawl budget documentation",[29,1902,157],{"href":1631,"rel":1903},[33],[981,1905,1906,1872,1909,749,1914,35],{},[21,1907,1908],{},"Google Search Central — Introduction to robots.txt.",[29,1910,1913],{"href":1911,"rel":1912},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fcrawling-indexing\u002Frobots\u002Fintro?utm_source=chatgpt.com",[33],"robots.txt introduction",[29,1915,157],{"href":1518,"rel":1916},[33],[981,1918,1919,1922,1923,749,1926,35],{},[21,1920,1921],{},"Koster, M.; Illyes, G.; Zeller, H.; Sassman, L. — RFC 9309: Robots Exclusion Protocol."," IETF, September 2022. ",[29,1924,1480],{"href":1484,"rel":1925},[33],[29,1927,1486],{"href":1484,"rel":1928},[33],[981,1930,1931,1872,1934,749,1939,35],{},[21,1932,1933],{},"Google Search Central — Build and Submit a Sitemap.",[29,1935,1938],{"href":1936,"rel":1937},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fcrawling-indexing\u002Fsitemaps\u002Fbuild-sitemap?utm_source=chatgpt.com",[33],"Google sitemap documentation",[29,1940,157],{"href":1438,"rel":1941},[33],[981,1943,1944,1872,1947,749,1951,35],{},[21,1945,1946],{},"Google Search Central — Link Best Practices for Google.",[29,1948,1950],{"href":1311,"rel":1949},[33],"Crawlable links documentation",[29,1952,157],{"href":1311,"rel":1953},[33],[981,1955,1956,1872,1959,749,1964,35],{},[21,1957,1958],{},"Google Crawling Infrastructure — How HTTP Status Codes Affect Google's Crawlers.",[29,1960,1963],{"href":1961,"rel":1962},"https:\u002F\u002Fdevelopers.google.com\u002Fcrawling\u002Fdocs\u002Ftroubleshooting\u002Fhttp-status-codes?utm_source=chatgpt.com",[33],"HTTP status code documentation",[29,1965,157],{"href":1356,"rel":1966},[33],[981,1968,1969,1872,1972,749,1976,35],{},[21,1970,1971],{},"Google Search Central — Block Search Indexing with noindex.",[29,1973,1975],{"href":1579,"rel":1974},[33],"noindex documentation",[29,1977,157],{"href":1579,"rel":1978},[33],[981,1980,1981,1984,1985,749,1990,35],{},[21,1982,1983],{},"Sitemaps.org — Sitemaps XML Format."," ",[29,1986,1989],{"href":1987,"rel":1988},"https:\u002F\u002Fwww.sitemaps.org\u002Fprotocol.html?utm_source=chatgpt.com",[33],"Sitemaps protocol",[29,1991,1993],{"href":1987,"rel":1992},[33],"sitemaps.org",[1067,1995,1996],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}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 .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":185,"searchDepth":311,"depth":311,"links":1998},[1999,2000,2001,2002,2003,2007,2010,2011,2012,2013,2014,2015,2016,2017],{"id":1117,"depth":311,"text":1118},{"id":1151,"depth":311,"text":1152},{"id":1172,"depth":311,"text":1173},{"id":1251,"depth":311,"text":1252},{"id":1360,"depth":311,"text":1361,"children":2004},[2005,2006],{"id":1367,"depth":325,"text":1368},{"id":1392,"depth":325,"text":1393},{"id":1447,"depth":311,"text":1448,"children":2008},[2009],{"id":1495,"depth":325,"text":1496},{"id":1588,"depth":311,"text":1589},{"id":1612,"depth":311,"text":1613},{"id":1677,"depth":311,"text":1678},{"id":858,"depth":311,"text":859},{"id":886,"depth":311,"text":887},{"id":906,"depth":311,"text":907},{"id":959,"depth":311,"text":960},{"id":975,"depth":311,"text":976},"Technical SEO","Learn what crawling means in SEO, how search engine bots discover and fetch URLs, how robots.txt, sitemaps and JavaScript affect crawling, and how to diagnose crawl problems.","\u002Fcrawling-in-seo.png","Explanation the Crawling in SEO",{},"\u002Fblog\u002Fen\u002Fcrawling-in-seo",{"title":1112,"description":2019},"crawling-in-seo","blog\u002Fen\u002Fcrawling-in-seo","-0T-w1i4uX-vbLamStXvvw7wZ2TSObcV4eByHkX9GoA",{"id":2029,"title":2030,"author":7,"body":2031,"category":2018,"description":2855,"draft":1097,"extension":1098,"featured":1099,"image":2856,"imageAlt":2857,"locale":1102,"meta":2858,"navigation":1099,"path":2859,"publishedAt":1105,"seo":2860,"slug":2861,"stem":2862,"translationKey":2863,"updatedAt":1105,"__hash__":2864},"blog\u002Fblog\u002Fen\u002Fdiscovers-urls.md","How Google Discovers New URLs: Links, Sitemaps and Crawling",{"type":9,"value":2032,"toc":2838},[2033,2037,2040,2050,2052,2067,2070,2075,2078,2082,2175,2181,2185,2191,2194,2201,2226,2232,2239,2242,2247,2251,2255,2258,2267,2292,2295,2326,2332,2338,2343,2347,2350,2352,2375,2382,2385,2391,2396,2405,2408,2412,2416,2419,2422,2428,2431,2437,2442,2451,2454,2460,2463,2469,2473,2479,2482,2488,2495,2504,2508,2512,2515,2548,2551,2558,2561,2565,2568,2575,2581,2603,2607,2610,2643,2650,2652,2661,2664,2667,2673,2676,2678,2682,2688,2692,2698,2702,2705,2709,2715,2719,2725,2727,2730,2733,2739,2741,2836],[12,2034,2036],{"id":2035},"how-google-discovers-new-urls","How Google Discovers New URLs",[17,2038,2039],{},"Publishing a page does not automatically mean Google knows that it exists. Before Google can crawl, understand, or index a page, its systems normally need to discover the page’s URL.",[17,2041,2042,2043,2046,2047,35],{},"Google calls this ",[21,2044,2045],{},"URL discovery",". According to Google’s documentation, new URLs are commonly found through links on pages Google already knows and through submitted sitemaps. Googlebot can then place discovered URLs into its crawling process, but discovery alone does not guarantee that a URL will be crawled, indexed, or shown in search results. (",[29,2048,157],{"href":1144,"rel":2049},[33],[12,2051,1152],{"id":1151},[17,2053,2054,2055,2058,2059,2062,2063,35],{},"Google primarily discovers new URLs by ",[21,2056,2057],{},"following links from previously discovered pages"," and by ",[21,2060,2061],{},"reading sitemaps"," provided by website owners. Googlebot can also encounter URLs while processing redirects and links generated by JavaScript when those links are implemented in a crawlable way. (",[29,2064,157],{"href":2065,"rel":2066},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Ffundamentals\u002Fget-started-developers?utm_source=chatgpt.com",[33],[17,2068,2069],{},"The important distinction is:",[17,2071,2072],{},[21,2073,2074],{},"Discovery → Crawling → Indexing → Serving",[17,2076,2077],{},"These are separate stages. A discovered URL is only a URL Google knows about. It is not automatically an indexed page.",[12,2079,2081],{"id":2080},"key-facts","Key Facts",[69,2083,2084,2097],{},[72,2085,2086],{},[75,2087,2088,2091,2094],{},[78,2089,2090],{},"Mechanism",[78,2092,2093],{},"Can help Google discover a URL?",[78,2095,2096],{},"Important limitation",[85,2098,2099,2110,2120,2130,2140,2150,2164],{},[75,2100,2101,2104,2107],{},[90,2102,2103],{},"Internal links",[90,2105,2106],{},"Yes",[90,2108,2109],{},"The link should be crawlable",[75,2111,2112,2115,2117],{},[90,2113,2114],{},"External links",[90,2116,2106],{},[90,2118,2119],{},"Google must encounter the linking page",[75,2121,2122,2125,2127],{},[90,2123,2124],{},"XML sitemap",[90,2126,2106],{},[90,2128,2129],{},"A sitemap is a hint, not a guarantee",[75,2131,2132,2135,2137],{},[90,2133,2134],{},"RSS\u002FAtom feed",[90,2136,2106],{},[90,2138,2139],{},"Usually covers recent content",[75,2141,2142,2145,2147],{},[90,2143,2144],{},"Redirect",[90,2146,2106],{},[90,2148,2149],{},"Googlebot may encounter the destination while navigating URLs",[75,2151,2152,2155,2157],{},[90,2153,2154],{},"JavaScript-generated link",[90,2156,2106],{},[90,2158,2159,2160,2163],{},"It should ultimately produce a crawlable ",[129,2161,2162],{},"\u003Ca href>"," link",[75,2165,2166,2169,2172],{},[90,2167,2168],{},"Search Console request",[90,2170,2171],{},"Yes, for URLs you manage",[90,2173,2174],{},"Requesting crawling does not guarantee indexing",[17,2176,2177,2178,35],{},"Google explicitly says that it does not maintain a central registry containing every web page. Its crawlers continuously discover new and updated URLs across the web instead. (",[29,2179,157],{"href":1144,"rel":2180},[33],[12,2182,2184],{"id":2183},"links-are-the-main-discovery-path","Links Are the Main Discovery Path",[17,2186,2187,2188,35],{},"Googlebot discovers new URLs primarily from links embedded in pages that Google already knows about. Google’s documentation describes a simple example: a category or hub page links to a newly published blog post, allowing Google to discover that new URL. (",[29,2189,157],{"href":1144,"rel":2190},[33],[17,2192,2193],{},"The same principle applies both internally and externally.",[17,2195,2196,2197,2200],{},"An ",[21,2198,2199],{},"internal link"," points from one page on your site to another:",[179,2202,2204],{"className":292,"code":2203,"language":294,"meta":185,"style":185},"\u003Ca href=\"\u002Fguides\u002Ftechnical-seo\">Technical SEO Guide\u003C\u002Fa>\n",[129,2205,2206],{"__ignoreMap":185},[161,2207,2208,2210,2212,2214,2216,2219,2222,2224],{"class":299,"line":300},[161,2209,304],{"class":303},[161,2211,29],{"class":307},[161,2213,1285],{"class":314},[161,2215,318],{"class":303},[161,2217,2218],{"class":321},"\"\u002Fguides\u002Ftechnical-seo\"",[161,2220,2221],{"class":303},">Technical SEO Guide\u003C\u002F",[161,2223,29],{"class":307},[161,2225,361],{"class":303},[17,2227,2196,2228,2231],{},[21,2229,2230],{},"external link"," from another website can expose your URL through the same general crawling process.",[17,2233,2234,2235,35],{},"For important pages, Google recommends making sure each page has a link from at least one other page on your site. (",[29,2236,157],{"href":2237,"rel":2238},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fcrawling-indexing\u002Flinks-crawlable?authuser=2&utm_source=chatgpt.com",[33],[17,2240,2241],{},"This is why site architecture matters for discovery. A page may exist perfectly well on your server but remain difficult for Google to find if nothing Google can crawl points to it.",[17,2243,2244,2245,174],{},"Pages with no meaningful internal links are commonly called ",[21,2246,1384],{},[17,2248,2249],{},[161,2250,1389],{},[12,2252,2254],{"id":2253},"links-must-be-crawlable","Links Must Be Crawlable",[17,2256,2257],{},"Not every clickable interface element is necessarily a link Google can reliably extract.",[17,2259,2260,2261,2263,2264,2266],{},"Google says the safest structure is an HTML ",[129,2262,1303],{}," element with an ",[129,2265,1307],{}," attribute:",[179,2268,2270],{"className":292,"code":2269,"language":294,"meta":185,"style":185},"\u003Ca href=\"\u002Fservices\u002Fseo\">SEO Services\u003C\u002Fa>\n",[129,2271,2272],{"__ignoreMap":185},[161,2273,2274,2276,2278,2280,2282,2285,2288,2290],{"class":299,"line":300},[161,2275,304],{"class":303},[161,2277,29],{"class":307},[161,2279,1285],{"class":314},[161,2281,318],{"class":303},[161,2283,2284],{"class":321},"\"\u002Fservices\u002Fseo\"",[161,2286,2287],{"class":303},">SEO Services\u003C\u002F",[161,2289,29],{"class":307},[161,2291,361],{"class":303},[17,2293,2294],{},"Patterns based only on JavaScript event handlers are less reliable:",[179,2296,2298],{"className":292,"code":2297,"language":294,"meta":185,"style":185},"\u003Cspan onclick=\"openPage('\u002Fservices\u002Fseo')\">SEO Services\u003C\u002Fspan>\n",[129,2299,2300],{"__ignoreMap":185},[161,2301,2302,2304,2306,2309,2311,2314,2317,2320,2322,2324],{"class":299,"line":300},[161,2303,304],{"class":303},[161,2305,161],{"class":307},[161,2307,2308],{"class":314}," onclick",[161,2310,318],{"class":303},[161,2312,2313],{"class":321},"\"",[161,2315,2316],{"class":314},"openPage",[161,2318,2319],{"class":321},"('\u002Fservices\u002Fseo')\"",[161,2321,2287],{"class":303},[161,2323,161],{"class":307},[161,2325,361],{"class":303},[17,2327,2328,2329,35],{},"Google can execute JavaScript, and JavaScript can insert links into the rendered DOM. However, Google still recommends implementing those links according to its crawlable-link guidance. (",[29,2330,157],{"href":2237,"rel":2331},[33],[17,2333,2334,2335,35],{},"For JavaScript-heavy applications, every piece of content intended to appear as a separate search result should also have its own URL. (",[29,2336,157],{"href":2065,"rel":2337},[33],[17,2339,2340],{},[161,2341,2342],{},"INTERNAL LINK: JavaScript SEO Explained",[12,2344,2346],{"id":2345},"sitemaps-help-google-find-urls","Sitemaps Help Google Find URLs",[17,2348,2349],{},"A sitemap gives Google a structured list of URLs you consider important.",[17,2351,1399],{},[179,2353,2355],{"className":1402,"code":2354,"language":1404,"meta":185,"style":185},"\u003Curl>\n  \u003Cloc>https:\u002F\u002Fexample.com\u002Fblog\u002Fnew-article\u003C\u002Floc>\n  \u003Clastmod>2026-09-20\u003C\u002Flastmod>\n\u003C\u002Furl>\n",[129,2356,2357,2361,2366,2371],{"__ignoreMap":185},[161,2358,2359],{"class":299,"line":300},[161,2360,1411],{},[161,2362,2363],{"class":299,"line":311},[161,2364,2365],{},"  \u003Cloc>https:\u002F\u002Fexample.com\u002Fblog\u002Fnew-article\u003C\u002Floc>\n",[161,2367,2368],{"class":299,"line":325},[161,2369,2370],{},"  \u003Clastmod>2026-09-20\u003C\u002Flastmod>\n",[161,2372,2373],{"class":299,"line":336},[161,2374,1421],{},[17,2376,2377,2378,35],{},"Google describes sitemaps as an important discovery mechanism, particularly for large websites, recently launched sites, sites with few external links, and sites containing specialized media or news content. (",[29,2379,157],{"href":2380,"rel":2381},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fcrawling-indexing\u002Fsitemaps\u002Foverview?authuser=1&utm_source=chatgpt.com",[33],[17,2383,2384],{},"A sitemap is especially useful when a page is not likely to be discovered quickly through normal link crawling.",[17,2386,2387,2388,2390],{},"However, submitting a sitemap does ",[21,2389,151],{}," mean:",[1501,2392,2393],{},[17,2394,2395],{},"“Google must crawl and index every URL listed here.”",[17,2397,2398,2399,2401,2402,35],{},"Google explicitly describes sitemap submission as a ",[21,2400,1427],{},". It does not guarantee that Google will download, crawl, or index every submitted URL. (",[29,2403,157],{"href":1438,"rel":2404},[33],[17,2406,2407],{},"Sitemaps should therefore complement good internal linking rather than replace it.",[17,2409,2410],{},[161,2411,1444],{},[12,2413,2415],{"id":2414},"discovery-is-not-crawling","Discovery Is Not Crawling",[17,2417,2418],{},"This distinction causes a large amount of SEO confusion.",[17,2420,2421],{},"Suppose Google finds:",[179,2423,2426],{"className":2424,"code":2425,"language":184,"meta":185},[182],"https:\u002F\u002Fexample.com\u002Fnew-page\n",[129,2427,2425],{"__ignoreMap":185},[17,2429,2430],{},"through an internal link.",[17,2432,2433,2434,174],{},"At this point Google may know the URL exists. That is ",[21,2435,2436],{},"discovery",[17,2438,2439,2440,174],{},"Googlebot may later fetch the URL. That is ",[21,2441,1124],{},[17,2443,2444,2445,239,2448,35],{},"Google may then analyze the content and decide whether and how to store it in its search index. That is ",[21,2446,2447],{},"indexing",[29,2449,157],{"href":1144,"rel":2450},[33],[17,2452,2453],{},"A simplified flow looks like this:",[179,2455,2458],{"className":2456,"code":2457,"language":184,"meta":185},[182],"URL discovered\n      ↓\nAdded to crawling process\n      ↓\nGooglebot fetches the URL\n      ↓\nContent is processed\u002Frendered\n      ↓\nGoogle evaluates it for indexing\n",[129,2459,2457],{"__ignoreMap":185},[17,2461,2462],{},"Not every URL moves through every step.",[17,2464,2465,2466,35],{},"Google explicitly states that following its technical requirements does not guarantee crawling, indexing, or appearance in Search. (",[29,2467,157],{"href":1144,"rel":2468},[33],[12,2470,2472],{"id":2471},"robotstxt-does-not-hide-a-url","robots.txt Does Not Hide a URL",[17,2474,2475,2476,2478],{},"A common misconception is that blocking a URL in ",[129,2477,1454],{}," prevents Google from discovering it.",[17,2480,2481],{},"That is not necessarily true.",[17,2483,2484,2485,2487],{},"If another page links to the blocked URL, Google may still learn that the URL exists. A ",[129,2486,1454],{}," rule prevents the specified crawler from fetching the blocked resource; it does not necessarily erase knowledge of the URL.",[17,2489,2490,2491,35],{},"Google notes that a blocked URL may even appear in search results without a snippet because Google cannot crawl its content. (",[29,2492,157],{"href":2493,"rel":2494},"https:\u002F\u002Fdevelopers.google.com\u002Fcrawling\u002Fdocs\u002Frobots-txt\u002Frobots-txt-spec?authuser=117&utm_source=chatgpt.com",[33],[17,2496,2497,2498,2500,2501,35],{},"If your goal is to prevent indexing, Google recommends using ",[129,2499,1514],{}," while allowing the crawler to access the page so it can see that directive. (",[29,2502,157],{"href":1579,"rel":2503},[33],[17,2505,2506],{},[161,2507,1585],{},[12,2509,2511],{"id":2510},"what-about-nofollow","What About nofollow?",[17,2513,2514],{},"A link using:",[179,2516,2518],{"className":292,"code":2517,"language":294,"meta":185,"style":185},"\u003Ca href=\"\u002Fprivate-page\" rel=\"nofollow\">Page\u003C\u002Fa>\n",[129,2519,2520],{"__ignoreMap":185},[161,2521,2522,2524,2526,2528,2530,2533,2536,2538,2541,2544,2546],{"class":299,"line":300},[161,2523,304],{"class":303},[161,2525,29],{"class":307},[161,2527,1285],{"class":314},[161,2529,318],{"class":303},[161,2531,2532],{"class":321},"\"\u002Fprivate-page\"",[161,2534,2535],{"class":314}," rel",[161,2537,318],{"class":303},[161,2539,2540],{"class":321},"\"nofollow\"",[161,2542,2543],{"class":303},">Page\u003C\u002F",[161,2545,29],{"class":307},[161,2547,361],{"class":303},[17,2549,2550],{},"generally tells Google not to follow that particular link.",[17,2552,2553,2554,35],{},"However, this does not guarantee that the destination URL remains undiscovered. Google may find the same URL through another internal link, another website, or a sitemap. (",[29,2555,157],{"href":2556,"rel":2557},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fcrawling-indexing\u002Fqualify-outbound-links?utm_source=chatgpt.com",[33],[17,2559,2560],{},"Discovery is therefore best understood as a web-wide process rather than something controlled by a single link.",[12,2562,2564],{"id":2563},"search-console-and-url-submission","Search Console and URL Submission",[17,2566,2567],{},"For a small number of pages you manage, Google Search Console's URL Inspection tool can be used to request crawling.",[17,2569,2570,2571,35],{},"For larger groups of URLs, Google recommends using a sitemap. (",[29,2572,157],{"href":2573,"rel":2574},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fcrawling-indexing\u002Fask-google-to-recrawl?utm_source=chatgpt.com",[33],[17,2576,2577,2578,35],{},"Repeatedly requesting indexing does not make Google crawl the same URL faster, and a crawl request does not guarantee inclusion in search results. (",[29,2579,157],{"href":2573,"rel":2580},[33],[17,2582,2583,2584,2587,2588,2591,2592,2595,2596,239,2599,35],{},"Another common misconception involves Google's ",[21,2585,2586],{},"Indexing API",". It is not a general-purpose API for submitting ordinary pages. Google currently documents it for pages containing ",[129,2589,2590],{},"JobPosting"," or livestream ",[129,2593,2594],{},"BroadcastEvent"," content embedded in ",[129,2597,2598],{},"VideoObject",[29,2600,157],{"href":2601,"rel":2602},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fapis\u002Findexing-api\u002Fv3\u002Fusing-api?utm_source=chatgpt.com",[33],[12,2604,2606],{"id":2605},"improve-url-discovery","Improve URL Discovery",[17,2608,2609],{},"For most websites, the practical approach is straightforward:",[978,2611,2612,2615,2618,2624,2627,2630,2637,2640],{},[981,2613,2614],{},"Give every important page a permanent, crawlable URL.",[981,2616,2617],{},"Link to new pages from existing relevant pages.",[981,2619,2620,2621,2623],{},"Use normal ",[129,2622,2162],{}," links.",[981,2625,2626],{},"Keep important pages reachable through your site architecture.",[981,2628,2629],{},"Maintain an accurate sitemap containing URLs you want Google to find.",[981,2631,2632,2633,2636],{},"Update meaningful ",[129,2634,2635],{},"\u003Clastmod>"," values when content actually changes.",[981,2638,2639],{},"Avoid accidentally blocking required pages or resources.",[981,2641,2642],{},"Use Search Console to diagnose important URLs that are not being discovered or crawled.",[17,2644,2645,2646,35],{},"Google also warns that discovery may be slower if important links available on desktop are missing from the mobile version of a site, because Google indexes the mobile version of pages. (",[29,2647,157],{"href":2648,"rel":2649},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fcrawling-indexing\u002Ftroubleshoot-crawling-errors?authuser=2&utm_source=chatgpt.com",[33],[12,2651,887],{"id":886},[17,2653,2654,2655,420,2658,174],{},"Treat ",[21,2656,2657],{},"internal links as the primary discovery architecture",[21,2659,2660],{},"sitemaps as a complementary discovery signal",[17,2662,2663],{},"A new page should ideally be discoverable naturally from another useful page rather than existing only inside a sitemap. For large or frequently updated websites, automate sitemap generation and ensure newly published canonical URLs enter the sitemap promptly.",[17,2665,2666],{},"If an important page is not appearing in Google, diagnose the stages separately:",[179,2668,2671],{"className":2669,"code":2670,"language":184,"meta":185},[182],"Does Google know the URL?\n        ↓\nCan Google crawl it?\n        ↓\nCan Google render the content?\n        ↓\nIs it eligible for indexing?\n        ↓\nDid Google choose to index it?\n",[129,2672,2670],{"__ignoreMap":185},[17,2674,2675],{},"Trying to solve an indexing problem by repeatedly submitting the URL will not help if the underlying problem is actually site architecture, crawlability, rendering, duplication, or content quality.",[12,2677,907],{"id":906},[909,2679,2681],{"id":2680},"how-long-does-google-take-to-discover-a-new-url","How long does Google take to discover a new URL?",[17,2683,2684,2685,35],{},"There is no guaranteed discovery time. Google says crawling after a request can take from a few days to a few weeks, and its crawling schedule is algorithmic. (",[29,2686,157],{"href":2573,"rel":2687},[33],[909,2689,2691],{"id":2690},"does-google-need-a-sitemap-to-discover-pages","Does Google need a sitemap to discover pages?",[17,2693,2694,2695,35],{},"No. If your pages are properly linked, Google can usually discover most of them through links. Sitemaps become particularly useful for large, new, complex, or media-heavy sites. (",[29,2696,157],{"href":2380,"rel":2697},[33],[909,2699,2701],{"id":2700},"can-google-discover-a-page-with-no-internal-links","Can Google discover a page with no internal links?",[17,2703,2704],{},"Potentially. It might discover the URL through an external link, sitemap, or another source. But relying on that is poor site architecture for an important page.",[909,2706,2708],{"id":2707},"does-sitemap-submission-guarantee-indexing","Does sitemap submission guarantee indexing?",[17,2710,2711,2712,35],{},"No. Google explicitly says sitemap submission is a hint and does not guarantee crawling or indexing. (",[29,2713,157],{"href":1438,"rel":2714},[33],[909,2716,2718],{"id":2717},"does-robotstxt-stop-url-discovery","Does robots.txt stop URL discovery?",[17,2720,2721,2722,35],{},"Not necessarily. Google may know a blocked URL from links or other discovery mechanisms even when it cannot crawl the page. (",[29,2723,157],{"href":2493,"rel":2724},[33],[12,2726,960],{"id":959},[17,2728,2729],{},"Google cannot crawl a page it does not know exists.",[17,2731,2732],{},"New URLs are primarily discovered as Googlebot follows crawlable links across the web and processes sitemaps provided by site owners. Once discovered, a URL enters a separate process in which Google decides whether and when to crawl it, then whether the resulting content should be indexed.",[17,2734,2735,2736],{},"For SEO, the practical lesson is simple: ",[21,2737,2738],{},"publish URLs into a discoverable web structure, not merely onto a server.",[12,2740,976],{"id":975},[1640,2742,2743,2755,2766,2778,2789,2800,2812,2825],{},[981,2744,1023,2745,239,2748,736,2751],{},[1625,2746,2747],{},"In-depth guide to how Google Search works",[29,2749,157],{"href":1144,"rel":2750},[33],[29,2752,2754],{"href":1144,"rel":2753},[33],"Google documentation",[981,2756,1023,2757,239,2760,736,2763],{},[1625,2758,2759],{},"Link best practices for Google",[29,2761,157],{"href":2237,"rel":2762},[33],[29,2764,2754],{"href":1311,"rel":2765},[33],[981,2767,1023,2768,239,2771,736,2774],{},[1625,2769,2770],{},"Learn about sitemaps",[29,2772,157],{"href":2380,"rel":2773},[33],[29,2775,2754],{"href":2776,"rel":2777},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fcrawling-indexing\u002Fsitemaps\u002Foverview?utm_source=chatgpt.com",[33],[981,2779,1023,2780,239,2783,736,2786],{},[1625,2781,2782],{},"Build and submit a sitemap",[29,2784,157],{"href":1438,"rel":2785},[33],[29,2787,2754],{"href":1936,"rel":2788},[33],[981,2790,1023,2791,239,2794,736,2797],{},[1625,2792,2793],{},"Ask Google to recrawl your URLs",[29,2795,157],{"href":2573,"rel":2796},[33],[29,2798,2754],{"href":2573,"rel":2799},[33],[981,2801,1023,2802,239,2805,736,2809],{},[1625,2803,2804],{},"Understand JavaScript SEO basics",[29,2806,157],{"href":2807,"rel":2808},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fcrawling-indexing\u002Fjavascript\u002Fjavascript-seo-basics?utm_source=chatgpt.com",[33],[29,2810,2754],{"href":2807,"rel":2811},[33],[981,2813,2814,2815,239,2818,736,2821],{},"Google Crawling Infrastructure — ",[1625,2816,2817],{},"How Google interprets the robots.txt specification",[29,2819,157],{"href":2493,"rel":2820},[33],[29,2822,2754],{"href":2823,"rel":2824},"https:\u002F\u002Fdevelopers.google.com\u002Fcrawling\u002Fdocs\u002Frobots-txt\u002Frobots-txt-spec?utm_source=chatgpt.com",[33],[981,2826,1023,2827,239,2830,736,2833],{},[1625,2828,2829],{},"Using the Indexing API",[29,2831,157],{"href":2601,"rel":2832},[33],[29,2834,2754],{"href":2601,"rel":2835},[33],[1067,2837,1996],{},{"title":185,"searchDepth":311,"depth":311,"links":2839},[2840,2841,2842,2843,2844,2845,2846,2847,2848,2849,2850,2851,2852,2853,2854],{"id":2035,"depth":311,"text":2036},{"id":1151,"depth":311,"text":1152},{"id":2080,"depth":311,"text":2081},{"id":2183,"depth":311,"text":2184},{"id":2253,"depth":311,"text":2254},{"id":2345,"depth":311,"text":2346},{"id":2414,"depth":311,"text":2415},{"id":2471,"depth":311,"text":2472},{"id":2510,"depth":311,"text":2511},{"id":2563,"depth":311,"text":2564},{"id":2605,"depth":311,"text":2606},{"id":886,"depth":311,"text":887},{"id":906,"depth":311,"text":907},{"id":959,"depth":311,"text":960},{"id":975,"depth":311,"text":976},"Learn how Google discovers new URLs through links, sitemaps, redirects and crawling, and why URL discovery does not automatically mean indexing.","\u002Fdiscovers-in-urls.png","Google Discovers New URLs",{},"\u002Fblog\u002Fen\u002Fdiscovers-urls",{"title":2030,"description":2855},"discovers-urls","blog\u002Fen\u002Fdiscovers-urls","discovers-new-urls","gTtq60HxSEYwEFtieYhEck5y2lz11DLG0fJmVdPMyLo",{"id":2866,"title":2867,"author":7,"body":2868,"category":4083,"description":4084,"draft":1097,"extension":1098,"featured":1099,"image":4085,"imageAlt":4086,"locale":1102,"meta":4087,"navigation":1099,"path":4088,"publishedAt":1105,"seo":4089,"slug":4090,"stem":4091,"translationKey":4090,"updatedAt":1105,"__hash__":4092},"blog\u002Fblog\u002Fen\u002Fdocker-production.md","Docker for Production Web Applications: Practical Guide",{"type":9,"value":2869,"toc":4061},[2870,2874,2881,2884,2886,2889,2892,2896,2990,2994,2997,3005,3008,3200,3203,3214,3218,3221,3230,3233,3236,3245,3251,3256,3260,3263,3277,3288,3291,3295,3298,3309,3312,3339,3346,3352,3356,3363,3366,3422,3425,3428,3432,3439,3442,3449,3452,3457,3462,3465,3470,3474,3477,3497,3504,3515,3518,3533,3550,3553,3557,3560,3562,3585,3592,3595,3615,3618,3623,3627,3642,3645,3656,3659,3663,3666,3827,3846,3850,3857,3864,3868,3871,3874,3877,3882,3884,3887,3890,3895,3898,3901,3903,3907,3910,3914,3923,3930,3936,3940,3943,3951,3954,3956,3959,3962,3964,4058],[12,2871,2873],{"id":2872},"docker-for-production-web-applications","Docker for Production Web Applications",[17,2875,2876,2877,2880],{},"Docker can run production web applications reliably, but ",[129,2878,2879],{},"docker compose up -d"," is not, by itself, a production strategy. The difficult part is not starting containers. It is making sure those containers can be rebuilt predictably, survive failures, avoid exposing unnecessary privileges, preserve important data, stay within resource limits, produce usable logs, and be replaced safely during deployments.",[17,2882,2883],{},"For a small or medium web application on a single server, Docker Compose can be a perfectly reasonable production deployment model. Docker explicitly documents Compose for single-host production deployments. As infrastructure grows across multiple machines, however, scheduling, failover, service discovery, rolling deployments, and orchestration become separate architectural concerns.",[12,2885,1152],{"id":1151},[17,2887,2888],{},"Docker is suitable for production when containers are treated as disposable runtime units rather than miniature servers. Build immutable images, run applications with the least privilege they require, persist state outside the container layer, configure health checks and restart behavior, constrain CPU and memory, rotate or export logs, protect secrets, expose only necessary ports, and maintain tested backup and deployment procedures.",[17,2890,2891],{},"Docker provides most of these primitives. Production reliability comes from configuring them correctly.",[12,2893,2895],{"id":2894},"production-essentials","Production Essentials",[69,2897,2898,2908],{},[72,2899,2900],{},[75,2901,2902,2905],{},[78,2903,2904],{},"Area",[78,2906,2907],{},"Production expectation",[85,2909,2910,2918,2926,2934,2942,2950,2958,2966,2974,2982],{},[75,2911,2912,2915],{},[90,2913,2914],{},"Images",[90,2916,2917],{},"Reproducible, minimal and tested",[75,2919,2920,2923],{},[90,2921,2922],{},"Application",[90,2924,2925],{},"Stateless where practical",[75,2927,2928,2931],{},[90,2929,2930],{},"Security",[90,2932,2933],{},"Non-root, least privilege, controlled Docker access",[75,2935,2936,2939],{},[90,2937,2938],{},"Resources",[90,2940,2941],{},"CPU and memory limits",[75,2943,2944,2947],{},[90,2945,2946],{},"Networking",[90,2948,2949],{},"Only necessary ports exposed",[75,2951,2952,2955],{},[90,2953,2954],{},"State",[90,2956,2957],{},"Persistent volumes or external managed services",[75,2959,2960,2963],{},[90,2961,2962],{},"Reliability",[90,2964,2965],{},"Health checks and restart policies",[75,2967,2968,2971],{},[90,2969,2970],{},"Logs",[90,2972,2973],{},"Rotation or external aggregation",[75,2975,2976,2979],{},[90,2977,2978],{},"Secrets",[90,2980,2981],{},"Kept outside image layers",[75,2983,2984,2987],{},[90,2985,2986],{},"Deployment",[90,2988,2989],{},"Repeatable build, deploy and rollback process",[12,2991,2993],{"id":2992},"build-production-images","Build Production Images",[17,2995,2996],{},"A production image should contain what the application needs to run, not everything that was required to build it.",[17,2998,2999,3000,35],{},"Docker recommends multi-stage builds for separating compilers, development dependencies and build tooling from the final runtime image. Smaller runtime images generally contain fewer unnecessary dependencies and reduce the available attack surface. Docker also recommends trusted, minimal base images and periodically rebuilding images so updated dependencies can be incorporated. (",[29,3001,3004],{"href":3002,"rel":3003},"https:\u002F\u002Fdocs.docker.com\u002Fbuild\u002Fbuilding\u002Fbest-practices\u002F?utm_source=chatgpt.com",[33],"docs.docker.com",[17,3006,3007],{},"A typical pattern looks like this:",[179,3009,3013],{"className":3010,"code":3011,"language":3012,"meta":185,"style":185},"language-dockerfile shiki shiki-themes github-light github-dark","# syntax=docker\u002Fdockerfile:1\n\nFROM node:24-alpine AS build\n\nWORKDIR \u002Fapp\n\nCOPY package*.json .\u002F\nRUN npm ci\n\nCOPY . .\nRUN npm run build\n\n\nFROM node:24-alpine AS runtime\n\nWORKDIR \u002Fapp\n\nENV NODE_ENV=production\n\nCOPY package*.json .\u002F\nRUN npm ci --omit=dev && npm cache clean --force\n\nCOPY --from=build \u002Fapp\u002Fdist .\u002Fdist\n\nUSER node\n\nEXPOSE 3000\n\nHEALTHCHECK --interval=30s \\\n  --timeout=3s \\\n  --start-period=10s \\\n  --retries=3 \\\n  CMD wget -qO- http:\u002F\u002F127.0.0.1:3000\u002Fhealth || exit 1\n\nCMD [\"node\", \"dist\u002Fserver.js\"]\n","dockerfile",[129,3014,3015,3020,3025,3030,3034,3039,3043,3048,3053,3057,3062,3068,3073,3078,3084,3089,3094,3099,3105,3110,3115,3121,3126,3132,3137,3143,3148,3154,3159,3165,3171,3177,3183,3189,3194],{"__ignoreMap":185},[161,3016,3017],{"class":299,"line":300},[161,3018,3019],{},"# syntax=docker\u002Fdockerfile:1\n",[161,3021,3022],{"class":299,"line":311},[161,3023,3024],{"emptyLinePlaceholder":1099},"\n",[161,3026,3027],{"class":299,"line":325},[161,3028,3029],{},"FROM node:24-alpine AS build\n",[161,3031,3032],{"class":299,"line":336},[161,3033,3024],{"emptyLinePlaceholder":1099},[161,3035,3036],{"class":299,"line":347},[161,3037,3038],{},"WORKDIR \u002Fapp\n",[161,3040,3041],{"class":299,"line":358},[161,3042,3024],{"emptyLinePlaceholder":1099},[161,3044,3045],{"class":299,"line":809},[161,3046,3047],{},"COPY package*.json .\u002F\n",[161,3049,3050],{"class":299,"line":821},[161,3051,3052],{},"RUN npm ci\n",[161,3054,3055],{"class":299,"line":833},[161,3056,3024],{"emptyLinePlaceholder":1099},[161,3058,3059],{"class":299,"line":842},[161,3060,3061],{},"COPY . .\n",[161,3063,3065],{"class":299,"line":3064},11,[161,3066,3067],{},"RUN npm run build\n",[161,3069,3071],{"class":299,"line":3070},12,[161,3072,3024],{"emptyLinePlaceholder":1099},[161,3074,3076],{"class":299,"line":3075},13,[161,3077,3024],{"emptyLinePlaceholder":1099},[161,3079,3081],{"class":299,"line":3080},14,[161,3082,3083],{},"FROM node:24-alpine AS runtime\n",[161,3085,3087],{"class":299,"line":3086},15,[161,3088,3024],{"emptyLinePlaceholder":1099},[161,3090,3092],{"class":299,"line":3091},16,[161,3093,3038],{},[161,3095,3097],{"class":299,"line":3096},17,[161,3098,3024],{"emptyLinePlaceholder":1099},[161,3100,3102],{"class":299,"line":3101},18,[161,3103,3104],{},"ENV NODE_ENV=production\n",[161,3106,3108],{"class":299,"line":3107},19,[161,3109,3024],{"emptyLinePlaceholder":1099},[161,3111,3113],{"class":299,"line":3112},20,[161,3114,3047],{},[161,3116,3118],{"class":299,"line":3117},21,[161,3119,3120],{},"RUN npm ci --omit=dev && npm cache clean --force\n",[161,3122,3124],{"class":299,"line":3123},22,[161,3125,3024],{"emptyLinePlaceholder":1099},[161,3127,3129],{"class":299,"line":3128},23,[161,3130,3131],{},"COPY --from=build \u002Fapp\u002Fdist .\u002Fdist\n",[161,3133,3135],{"class":299,"line":3134},24,[161,3136,3024],{"emptyLinePlaceholder":1099},[161,3138,3140],{"class":299,"line":3139},25,[161,3141,3142],{},"USER node\n",[161,3144,3146],{"class":299,"line":3145},26,[161,3147,3024],{"emptyLinePlaceholder":1099},[161,3149,3151],{"class":299,"line":3150},27,[161,3152,3153],{},"EXPOSE 3000\n",[161,3155,3157],{"class":299,"line":3156},28,[161,3158,3024],{"emptyLinePlaceholder":1099},[161,3160,3162],{"class":299,"line":3161},29,[161,3163,3164],{},"HEALTHCHECK --interval=30s \\\n",[161,3166,3168],{"class":299,"line":3167},30,[161,3169,3170],{},"  --timeout=3s \\\n",[161,3172,3174],{"class":299,"line":3173},31,[161,3175,3176],{},"  --start-period=10s \\\n",[161,3178,3180],{"class":299,"line":3179},32,[161,3181,3182],{},"  --retries=3 \\\n",[161,3184,3186],{"class":299,"line":3185},33,[161,3187,3188],{},"  CMD wget -qO- http:\u002F\u002F127.0.0.1:3000\u002Fhealth || exit 1\n",[161,3190,3192],{"class":299,"line":3191},34,[161,3193,3024],{"emptyLinePlaceholder":1099},[161,3195,3197],{"class":299,"line":3196},35,[161,3198,3199],{},"CMD [\"node\", \"dist\u002Fserver.js\"]\n",[17,3201,3202],{},"This is an illustrative Node.js example rather than a universal Dockerfile. The important pattern is the separation between build and runtime stages, installation of production-only dependencies, execution as a non-root user, and an application-level health endpoint.",[17,3204,3205,3206,3209,3210,35],{},"Docker recommends using ",[129,3207,3208],{},"USER"," when a service does not require root privileges. (",[29,3211,3004],{"href":3212,"rel":3213},"https:\u002F\u002Fdocs.docker.com\u002Fbuild\u002Fbuilding\u002Fbest-practices\u002F",[33],[220,3215,3217],{"id":3216},"pinning-images","Pinning Images",[17,3219,3220],{},"Image tags are mutable. An image such as:",[179,3222,3224],{"className":3010,"code":3223,"language":3012,"meta":185,"style":185},"FROM alpine:3.21\n",[129,3225,3226],{"__ignoreMap":185},[161,3227,3228],{"class":299,"line":300},[161,3229,3223],{},[17,3231,3232],{},"may resolve to a different underlying image after its publisher releases an update.",[17,3234,3235],{},"Docker supports pinning an image by digest:",[179,3237,3239],{"className":3010,"code":3238,"language":3012,"meta":185,"style":185},"FROM alpine:3.21@sha256:...\n",[129,3240,3241],{"__ignoreMap":185},[161,3242,3243],{"class":299,"line":300},[161,3244,3238],{},[17,3246,3247,3248,35],{},"This improves reproducibility because the same digest identifies the same image content. The tradeoff is important: strict digest pinning also means updates do not arrive automatically. A sensible production process combines controlled pinning with automated dependency-update checks rather than permanently freezing old images. (",[29,3249,3004],{"href":3212,"rel":3250},[33],[17,3252,3253],{},[161,3254,3255],{},"INTERNAL LINK: How Docker Images and Layers Work",[12,3257,3259],{"id":3258},"keep-secrets-out","Keep Secrets Out",[17,3261,3262],{},"Passwords, private tokens and credentials should never be baked into an image.",[17,3264,3265,3266,624,3269,3272,3273,35],{},"Docker specifically warns against using Dockerfile ",[129,3267,3268],{},"ARG",[129,3270,3271],{},"ENV"," for build secrets because those values can persist in the resulting image or its metadata. BuildKit secret mounts make credentials temporarily available during a build without storing them in the final image. (",[29,3274,3004],{"href":3275,"rel":3276},"https:\u002F\u002Fdocs.docker.com\u002Freference\u002Fbuild-checks\u002Fsecrets-used-in-arg-or-env\u002F?utm_source=chatgpt.com",[33],[17,3278,3279,3280,3283,3284,35],{},"Docker Compose also supports runtime secrets. On Linux containers, those secrets can be mounted as files under ",[129,3281,3282],{},"\u002Frun\u002Fsecrets\u002F"," and granted only to services that require them. (",[29,3285,3004],{"href":3286,"rel":3287},"https:\u002F\u002Fdocs.docker.com\u002Fcompose\u002Fhow-tos\u002Fuse-secrets\u002F?utm_source=chatgpt.com",[33],[17,3289,3290],{},"The deeper principle is simple: configuration may change between environments, while the application image should not need to contain the credentials for those environments.",[12,3292,3294],{"id":3293},"limit-container-privileges","Limit Container Privileges",[17,3296,3297],{},"Containers provide isolation, but they are not an excuse to ignore host security.",[17,3299,3300,3301,3304,3305,35],{},"Access to the Docker daemon is especially sensitive. Docker's documentation warns that users capable of controlling the normal rootful Docker daemon can effectively obtain root-level capabilities on the host. Membership in the ",[129,3302,3303],{},"docker"," group therefore needs to be treated as privileged access. (",[29,3306,3004],{"href":3307,"rel":3308},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Fsecurity\u002F?utm_source=chatgpt.com",[33],[17,3310,3311],{},"For web applications:",[1640,3313,3314,3317,3324,3327,3330,3336],{},[981,3315,3316],{},"run the application as a non-root user when possible;",[981,3318,3319,3320,3323],{},"avoid ",[129,3321,3322],{},"privileged: true",";",[981,3325,3326],{},"drop capabilities the application does not require;",[981,3328,3329],{},"retain Docker's default seccomp protection unless there is a specific, understood reason to change it;",[981,3331,3332,3333,3323],{},"consider ",[129,3334,3335],{},"no-new-privileges",[981,3337,3338],{},"consider Rootless Docker where its operational limitations are acceptable.",[17,3340,3341,3342,35],{},"Docker's rootless mode runs both the daemon and containers without root privileges, reducing the impact of some daemon or runtime vulnerabilities. (",[29,3343,3004],{"href":3344,"rel":3345},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Fsecurity\u002Frootless\u002F?utm_source=chatgpt.com",[33],[17,3347,3348,3349,35],{},"Docker also recommends removing unnecessary Linux capabilities rather than adding broad privileges. (",[29,3350,3004],{"href":3307,"rel":3351},[33],[12,3353,3355],{"id":3354},"control-cpu-and-memory","Control CPU and Memory",[17,3357,3358,3359,35],{},"A container has no resource constraints by default. Unless limits are configured, it can consume as much CPU or memory as the host allows. One runaway application can therefore affect other containers running on the same machine. (",[29,3360,3004],{"href":3361,"rel":3362},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Fcontainers\u002Fresource_constraints\u002F?utm_source=chatgpt.com",[33],[17,3364,3365],{},"Compose supports controls such as:",[179,3367,3371],{"className":3368,"code":3369,"language":3370,"meta":185,"style":185},"language-yaml shiki shiki-themes github-light github-dark","services:\n  app:\n    image: registry.example.com\u002Fapp:1.4.0\n\n    cpus: 1.0\n    mem_limit: 512m\n","yaml",[129,3372,3373,3381,3388,3398,3402,3412],{"__ignoreMap":185},[161,3374,3375,3378],{"class":299,"line":300},[161,3376,3377],{"class":307},"services",[161,3379,3380],{"class":303},":\n",[161,3382,3383,3386],{"class":299,"line":311},[161,3384,3385],{"class":307},"  app",[161,3387,3380],{"class":303},[161,3389,3390,3393,3395],{"class":299,"line":325},[161,3391,3392],{"class":307},"    image",[161,3394,387],{"class":303},[161,3396,3397],{"class":321},"registry.example.com\u002Fapp:1.4.0\n",[161,3399,3400],{"class":299,"line":336},[161,3401,3024],{"emptyLinePlaceholder":1099},[161,3403,3404,3407,3409],{"class":299,"line":347},[161,3405,3406],{"class":307},"    cpus",[161,3408,387],{"class":303},[161,3410,3411],{"class":384},"1.0\n",[161,3413,3414,3417,3419],{"class":299,"line":358},[161,3415,3416],{"class":307},"    mem_limit",[161,3418,387],{"class":303},[161,3420,3421],{"class":321},"512m\n",[17,3423,3424],{},"Those numbers should not be copied blindly. Measure normal workload, expected traffic, runtime memory behavior and failure conditions first. A PHP-FPM service, JVM application, Node.js process and PostgreSQL server can require very different limits.",[17,3426,3427],{},"The purpose of limits is isolation and predictable failure behavior, not simply making every container use less memory.",[12,3429,3431],{"id":3430},"persist-important-data","Persist Important Data",[17,3433,3434,3435,35],{},"The writable container filesystem is temporary. When the container is removed, data stored only in that writable layer disappears. (",[29,3436,3004],{"href":3437,"rel":3438},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Fstorage?utm_source=chatgpt.com",[33],[17,3440,3441],{},"Persistent application data should instead live in Docker volumes, suitable bind mounts, object storage, or external database\u002Fstorage services.",[17,3443,3444,3445,35],{},"Docker describes volumes as its preferred mechanism for persistent container data in many scenarios. Volumes exist independently of an individual container and can be backed up, restored and migrated. (",[29,3446,3004],{"href":3447,"rel":3448},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Fstorage\u002Fvolumes\u002F?utm_source=chatgpt.com",[33],[17,3450,3451],{},"That creates an important architectural distinction:",[17,3453,3454],{},[21,3455,3456],{},"Container = replaceable application runtime",[17,3458,3459],{},[21,3460,3461],{},"Volume or external service = persistent state",[17,3463,3464],{},"A volume alone is not a backup. Production systems still need scheduled backups and, more importantly, tested restoration procedures.",[17,3466,3467],{},[161,3468,3469],{},"INTERNAL LINK: Docker Volumes Explained",[12,3471,3473],{"id":3472},"health-and-recovery","Health and Recovery",[17,3475,3476],{},"A process can still be running while the application itself is unusable.",[17,3478,3479,3480,3483,3484,513,3487,420,3490,239,3493,35],{},"Docker's ",[129,3481,3482],{},"HEALTHCHECK"," instruction allows an image to define a command that tests whether the application is actually functioning. Docker then exposes states such as ",[129,3485,3486],{},"starting",[129,3488,3489],{},"healthy",[129,3491,3492],{},"unhealthy",[29,3494,3004],{"href":3495,"rel":3496},"https:\u002F\u002Fdocs.docker.com\u002Freference\u002Fdockerfile?utm_source=chatgpt.com",[33],[17,3498,3499,3500,3503],{},"For a web service, ",[129,3501,3502],{},"\u002Fhealth"," might verify that the HTTP application can answer requests. More advanced readiness checks may also verify dependencies, although a health endpoint should avoid becoming so complex that a temporary external failure creates unnecessary restart loops.",[17,3505,3506,3507,3510,3511,35],{},"Compose can also wait for a dependency marked ",[129,3508,3509],{},"service_healthy"," before starting another service. (",[29,3512,3004],{"href":3513,"rel":3514},"https:\u002F\u002Fdocs.docker.com\u002Fcompose\u002Fhow-tos\u002Fstartup-order\u002F?utm_source=chatgpt.com",[33],[17,3516,3517],{},"Restart policies solve a related problem:",[179,3519,3521],{"className":3368,"code":3520,"language":3370,"meta":185,"style":185},"restart: unless-stopped\n",[129,3522,3523],{"__ignoreMap":185},[161,3524,3525,3528,3530],{"class":299,"line":300},[161,3526,3527],{"class":307},"restart",[161,3529,387],{"class":303},[161,3531,3532],{"class":321},"unless-stopped\n",[17,3534,3535,3536,513,3539,420,3542,3545,3546,35],{},"Docker documents ",[129,3537,3538],{},"always",[129,3540,3541],{},"unless-stopped",[129,3543,3544],{},"on-failure"," policies for automatically restarting containers after exits or daemon restarts. (",[29,3547,3004],{"href":3548,"rel":3549},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Fcontainers\u002Fstart-containers-automatically\u002F?utm_source=chatgpt.com",[33],[17,3551,3552],{},"A restart policy improves recovery from process failure. It does not replace monitoring or fix an application that continuously crashes.",[12,3554,3556],{"id":3555},"control-network-exposure","Control Network Exposure",[17,3558,3559],{},"Published Docker ports require deliberate attention.",[17,3561,1399],{},[179,3563,3567],{"className":3564,"code":3565,"language":3566,"meta":185,"style":185},"language-bash shiki shiki-themes github-light github-dark","docker run -p 3000:3000 myapp\n","bash",[129,3568,3569],{"__ignoreMap":185},[161,3570,3571,3573,3576,3579,3582],{"class":299,"line":300},[161,3572,3303],{"class":314},[161,3574,3575],{"class":321}," run",[161,3577,3578],{"class":384}," -p",[161,3580,3581],{"class":321}," 3000:3000",[161,3583,3584],{"class":321}," myapp\n",[17,3586,3587,3588,35],{},"publishes the port on all host interfaces by default. Docker documentation explicitly notes that such published ports can become externally accessible. (",[29,3589,3004],{"href":3590,"rel":3591},"https:\u002F\u002Fdocs.docker.com\u002Freference\u002Fcli\u002Fdocker\u002Fcontainer\u002Frun?utm_source=chatgpt.com",[33],[17,3593,3594],{},"If a reverse proxy on the same server is the only service that should reach the application, binding to loopback can reduce unnecessary exposure:",[179,3596,3598],{"className":3368,"code":3597,"language":3370,"meta":185,"style":185},"ports:\n  - \"127.0.0.1:3000:3000\"\n",[129,3599,3600,3607],{"__ignoreMap":185},[161,3601,3602,3605],{"class":299,"line":300},[161,3603,3604],{"class":307},"ports",[161,3606,3380],{"class":303},[161,3608,3609,3612],{"class":299,"line":311},[161,3610,3611],{"class":303},"  - ",[161,3613,3614],{"class":321},"\"127.0.0.1:3000:3000\"\n",[17,3616,3617],{},"Databases, Redis instances and internal queues usually should not be publicly published merely because they run in Docker.",[17,3619,3620],{},[161,3621,3622],{},"INTERNAL LINK: Reverse Proxy Architecture Explained",[12,3624,3626],{"id":3625},"do-not-ignore-logs","Do Not Ignore Logs",[17,3628,3629,3630,3633,3634,3637,3638,35],{},"Docker's default ",[129,3631,3632],{},"json-file"," logging driver does not perform log rotation by default. A noisy application can therefore consume significant disk space over time. Docker recommends considering the ",[129,3635,3636],{},"local"," logging driver to help prevent disk exhaustion. (",[29,3639,3004],{"href":3640,"rel":3641},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Flogging\u002Fconfigure\u002F?utm_source=chatgpt.com",[33],[17,3643,3644],{},"A production setup should deliberately choose between:",[1640,3646,3647,3650,3653],{},[981,3648,3649],{},"local logs with rotation;",[981,3651,3652],{},"a logging driver sending logs elsewhere;",[981,3654,3655],{},"an external observability system.",[17,3657,3658],{},"Whatever method is selected, logs should survive long enough to investigate failures without eventually filling the server's disk.",[12,3660,3662],{"id":3661},"a-practical-compose-baseline","A Practical Compose Baseline",[17,3664,3665],{},"A hardened application service might begin with something like:",[179,3667,3669],{"className":3368,"code":3668,"language":3370,"meta":185,"style":185},"services:\n  app:\n    image: registry.example.com\u002Fmyapp:1.4.0\n    restart: unless-stopped\n\n    ports:\n      - \"127.0.0.1:3000:3000\"\n\n    cpus: 1.0\n    mem_limit: 512m\n\n    read_only: true\n\n    tmpfs:\n      - \u002Ftmp\n\n    security_opt:\n      - no-new-privileges:true\n\n    cap_drop:\n      - ALL\n\n    logging:\n      driver: local\n",[129,3670,3671,3677,3683,3692,3701,3705,3712,3719,3723,3731,3739,3743,3752,3756,3763,3770,3774,3781,3788,3792,3799,3806,3810,3817],{"__ignoreMap":185},[161,3672,3673,3675],{"class":299,"line":300},[161,3674,3377],{"class":307},[161,3676,3380],{"class":303},[161,3678,3679,3681],{"class":299,"line":311},[161,3680,3385],{"class":307},[161,3682,3380],{"class":303},[161,3684,3685,3687,3689],{"class":299,"line":325},[161,3686,3392],{"class":307},[161,3688,387],{"class":303},[161,3690,3691],{"class":321},"registry.example.com\u002Fmyapp:1.4.0\n",[161,3693,3694,3697,3699],{"class":299,"line":336},[161,3695,3696],{"class":307},"    restart",[161,3698,387],{"class":303},[161,3700,3532],{"class":321},[161,3702,3703],{"class":299,"line":347},[161,3704,3024],{"emptyLinePlaceholder":1099},[161,3706,3707,3710],{"class":299,"line":358},[161,3708,3709],{"class":307},"    ports",[161,3711,3380],{"class":303},[161,3713,3714,3717],{"class":299,"line":809},[161,3715,3716],{"class":303},"      - ",[161,3718,3614],{"class":321},[161,3720,3721],{"class":299,"line":821},[161,3722,3024],{"emptyLinePlaceholder":1099},[161,3724,3725,3727,3729],{"class":299,"line":833},[161,3726,3406],{"class":307},[161,3728,387],{"class":303},[161,3730,3411],{"class":384},[161,3732,3733,3735,3737],{"class":299,"line":842},[161,3734,3416],{"class":307},[161,3736,387],{"class":303},[161,3738,3421],{"class":321},[161,3740,3741],{"class":299,"line":3064},[161,3742,3024],{"emptyLinePlaceholder":1099},[161,3744,3745,3748,3750],{"class":299,"line":3070},[161,3746,3747],{"class":307},"    read_only",[161,3749,387],{"class":303},[161,3751,839],{"class":384},[161,3753,3754],{"class":299,"line":3075},[161,3755,3024],{"emptyLinePlaceholder":1099},[161,3757,3758,3761],{"class":299,"line":3080},[161,3759,3760],{"class":307},"    tmpfs",[161,3762,3380],{"class":303},[161,3764,3765,3767],{"class":299,"line":3086},[161,3766,3716],{"class":303},[161,3768,3769],{"class":321},"\u002Ftmp\n",[161,3771,3772],{"class":299,"line":3091},[161,3773,3024],{"emptyLinePlaceholder":1099},[161,3775,3776,3779],{"class":299,"line":3096},[161,3777,3778],{"class":307},"    security_opt",[161,3780,3380],{"class":303},[161,3782,3783,3785],{"class":299,"line":3101},[161,3784,3716],{"class":303},[161,3786,3787],{"class":321},"no-new-privileges:true\n",[161,3789,3790],{"class":299,"line":3107},[161,3791,3024],{"emptyLinePlaceholder":1099},[161,3793,3794,3797],{"class":299,"line":3112},[161,3795,3796],{"class":307},"    cap_drop",[161,3798,3380],{"class":303},[161,3800,3801,3803],{"class":299,"line":3117},[161,3802,3716],{"class":303},[161,3804,3805],{"class":321},"ALL\n",[161,3807,3808],{"class":299,"line":3123},[161,3809,3024],{"emptyLinePlaceholder":1099},[161,3811,3812,3815],{"class":299,"line":3128},[161,3813,3814],{"class":307},"    logging",[161,3816,3380],{"class":303},[161,3818,3819,3822,3824],{"class":299,"line":3134},[161,3820,3821],{"class":307},"      driver",[161,3823,387],{"class":303},[161,3825,3826],{"class":321},"local\n",[17,3828,3829,3830,3833,3834,3837,3838,3841,3842,35],{},"This is a starting point, not a universal template. ",[129,3831,3832],{},"read_only: true"," can break applications that expect writable directories, and dropping every capability can break software that genuinely needs one. Production hardening should therefore follow ",[21,3835,3836],{},"least privilege",", not ",[21,3839,3840],{},"maximum restriction regardless of application behavior",". Compose supports these service-level controls directly. (",[29,3843,3004],{"href":3844,"rel":3845},"https:\u002F\u002Fdocs.docker.com\u002Freference\u002Fcompose-file\u002Fservices\u002F?utm_source=chatgpt.com",[33],[12,3847,3849],{"id":3848},"common-production-mistakes","Common Production Mistakes",[17,3851,3852,3853,3856],{},"The most common Docker production problems are rarely caused by containers themselves. They usually come from deployment choices: running as root unnecessarily, using mutable ",[129,3854,3855],{},"latest"," tags without controlled updates, storing database data inside the container layer, publishing internal ports publicly, having no memory limit, placing credentials in images, allowing logs to grow indefinitely, or treating container restart as a substitute for monitoring.",[17,3858,3859,3860,35],{},"Another common mistake is mounting the application source directory from the host in production. Docker's production Compose guidance specifically suggests removing development-oriented code bind mounts so deployed application code remains inside the image. (",[29,3861,3004],{"href":3862,"rel":3863},"https:\u002F\u002Fdocs.docker.com\u002Fcompose\u002Fhow-tos\u002Fproduction\u002F?utm_source=chatgpt.com",[33],[12,3865,3867],{"id":3866},"when-compose-is-enough","When Compose Is Enough",[17,3869,3870],{},"Docker Compose is a reasonable production option when one host is sufficient and the team can tolerate that host as an infrastructure boundary.",[17,3872,3873],{},"A setup consisting of a reverse proxy, application containers, Redis and perhaps a database can remain operationally simple this way.",[17,3875,3876],{},"The requirements change when you need automatic scheduling across machines, node-level failover, large-scale service discovery, coordinated rolling deployments or extensive horizontal scaling. At that point the question is no longer whether Docker works in production. It is which orchestration platform should manage the containers.",[17,3878,3879],{},[161,3880,3881],{},"INTERNAL LINK: Docker Compose vs Container Orchestration",[12,3883,887],{"id":886},[17,3885,3886],{},"Treat Docker production deployment as a system rather than a Dockerfile.",[17,3888,3889],{},"The minimum useful production model is:",[17,3891,3892],{},[21,3893,3894],{},"source code → CI build and test → immutable image → registry → controlled deployment → health verification → monitoring → rollback",[17,3896,3897],{},"Keep persistent state outside replaceable application containers. Restrict privileges and exposed ports. Define resource limits based on measurement. Protect credentials independently from images. Automate backups and test restores.",[17,3899,3900],{},"Docker simplifies packaging. Production engineering is what makes that package reliable.",[12,3902,907],{"id":906},[909,3904,3906],{"id":3905},"is-docker-compose-safe-for-production","Is Docker Compose safe for production?",[17,3908,3909],{},"It can be. Docker officially documents Compose for production and single-host deployments. Whether it is appropriate depends on the application's availability, scaling and operational requirements.",[909,3911,3913],{"id":3912},"should-containers-run-as-root","Should containers run as root?",[17,3915,3916,3917,3919,3920,35],{},"Only when the application genuinely requires those privileges. Docker recommends using ",[129,3918,3208],{}," for services that can operate without root. (",[29,3921,3004],{"href":3212,"rel":3922},[33],[909,3924,3926,3927,3929],{"id":3925},"should-i-use-latest-in-production","Should I use ",[129,3928,3855],{}," in production?",[17,3931,3932,3933,35],{},"A mutable tag makes exact deployment reproduction harder. Versioned tags or digest pinning provide greater control, provided updates are actively maintained. (",[29,3934,3004],{"href":3212,"rel":3935},[33],[909,3937,3939],{"id":3938},"do-docker-volumes-need-backups","Do Docker volumes need backups?",[17,3941,3942],{},"Yes. Volumes provide persistence outside the container lifecycle; they do not automatically provide disaster recovery.",[909,3944,3946,3947,3950],{"id":3945},"does-restart-always-make-an-application-highly-available","Does ",[129,3948,3949],{},"restart: always"," make an application highly available?",[17,3952,3953],{},"No. It can restart a failed container on the same Docker host. It does not protect against host failure and does not diagnose why the application failed.",[12,3955,960],{"id":959},[17,3957,3958],{},"Docker is not production-ready because a container starts successfully. It becomes part of a production-ready system when images are reproducible, privileges and resources are controlled, state is protected, failures are detectable, logs are managed, network exposure is deliberate, and deployments can be recovered or rolled back.",[17,3960,3961],{},"The container is the replaceable part. The production architecture around it is what provides reliability.",[12,3963,976],{"id":975},[978,3965,3966,3976,3985,3993,4002,4011,4020,4029,4039,4048],{},[981,3967,3968,3969,1057,3972],{},"Docker — ",[1625,3970,3971],{},"Building best practices",[29,3973,3975],{"href":3002,"rel":3974},[33],"Docker Build best practices",[981,3977,3968,3978,1057,3981],{},[1625,3979,3980],{},"Use Compose in production",[29,3982,3984],{"href":3862,"rel":3983},[33],"Compose in production",[981,3986,3968,3987,1057,3990],{},[1625,3988,3989],{},"Docker Engine security",[29,3991,3989],{"href":3307,"rel":3992},[33],[981,3994,3968,3995,1057,3998],{},[1625,3996,3997],{},"Rootless mode",[29,3999,4001],{"href":3344,"rel":4000},[33],"Docker Rootless mode",[981,4003,3968,4004,1057,4007],{},[1625,4005,4006],{},"Resource constraints",[29,4008,4010],{"href":3361,"rel":4009},[33],"Docker resource constraints",[981,4012,3968,4013,1057,4016],{},[1625,4014,4015],{},"Configure logging drivers",[29,4017,4019],{"href":3640,"rel":4018},[33],"Docker logging drivers",[981,4021,3968,4022,1057,4025],{},[1625,4023,4024],{},"Volumes",[29,4026,4028],{"href":3447,"rel":4027},[33],"Docker volumes",[981,4030,3968,4031,1057,4034],{},[1625,4032,4033],{},"Build secrets",[29,4035,4038],{"href":4036,"rel":4037},"https:\u002F\u002Fdocs.docker.com\u002Fbuild\u002Fbuilding\u002Fsecrets\u002F?utm_source=chatgpt.com",[33],"Docker build secrets",[981,4040,3968,4041,1057,4044],{},[1625,4042,4043],{},"Dockerfile reference",[29,4045,4043],{"href":4046,"rel":4047},"https:\u002F\u002Fdocs.docker.com\u002Freference\u002Fdockerfile\u002F?utm_source=chatgpt.com",[33],[981,4049,3968,4050,1057,4053],{},[1625,4051,4052],{},"Port publishing and mapping",[29,4054,4057],{"href":4055,"rel":4056},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Fnetwork\u002Fport-publishing\u002F?utm_source=chatgpt.com",[33],"Docker port publishing",[1067,4059,4060],{},"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 .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}",{"title":185,"searchDepth":311,"depth":311,"links":4062},[4063,4064,4065,4066,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079,4080,4081,4082],{"id":2872,"depth":311,"text":2873},{"id":1151,"depth":311,"text":1152},{"id":2894,"depth":311,"text":2895},{"id":2992,"depth":311,"text":2993,"children":4067},[4068],{"id":3216,"depth":325,"text":3217},{"id":3258,"depth":311,"text":3259},{"id":3293,"depth":311,"text":3294},{"id":3354,"depth":311,"text":3355},{"id":3430,"depth":311,"text":3431},{"id":3472,"depth":311,"text":3473},{"id":3555,"depth":311,"text":3556},{"id":3625,"depth":311,"text":3626},{"id":3661,"depth":311,"text":3662},{"id":3848,"depth":311,"text":3849},{"id":3866,"depth":311,"text":3867},{"id":886,"depth":311,"text":887},{"id":906,"depth":311,"text":907},{"id":959,"depth":311,"text":960},{"id":975,"depth":311,"text":976},"Web Development","Learn how to run Docker web applications in production with secure images, resource limits, persistent storage, health checks, logging, secrets and reliable deployment practices.","\u002Fdocker-web.png","Image of Docker",{},"\u002Fblog\u002Fen\u002Fdocker-production",{"title":2867,"description":4084},"docker-production","blog\u002Fen\u002Fdocker-production","DiW-Qq1mTWnO4SFF7Ls7ISnLtG7TJsbLoI2OaUyxDDo",{"id":4094,"title":4095,"author":7,"body":4096,"category":4925,"description":4926,"draft":1097,"extension":1098,"featured":1099,"image":4927,"imageAlt":4928,"locale":1102,"meta":4929,"navigation":1099,"path":4930,"publishedAt":1105,"seo":4931,"slug":4932,"stem":4933,"translationKey":4932,"updatedAt":1105,"__hash__":4934},"blog\u002Fblog\u002Fen\u002Feligibility-audit.md","ChatGPT Search Eligibility Audit: Practical Checklist",{"type":9,"value":4097,"toc":4907},[4098,4102,4109,4123,4125,4128,4154,4160,4164,4261,4265,4276,4279,4294,4297,4324,4330,4351,4356,4360,4366,4381,4383,4408,4414,4424,4428,4431,4441,4448,4451,4467,4470,4489,4496,4500,4629,4639,4643,4646,4652,4662,4665,4670,4674,4680,4689,4696,4699,4703,4709,4712,4721,4723,4726,4731,4737,4740,4742,4746,4752,4756,4762,4766,4777,4781,4792,4796,4802,4804,4810,4813,4815,4904],[12,4099,4101],{"id":4100},"chatgpt-search-eligibility-audit-a-practical-checklist","ChatGPT Search Eligibility Audit: A Practical Checklist",[17,4103,4104,4105,4108],{},"A website can be technically healthy in Google and still be inaccessible to ChatGPT Search. The reason is simple: ChatGPT Search has its own crawler, ",[129,4106,4107],{},"OAI-SearchBot",", and your robots.txt, CDN, WAF, firewall, or bot-protection system can block it independently of Googlebot.",[17,4110,4111,4112,4114,4115,4117,4118,35],{},"OpenAI’s current guidance identifies two core technical requirements for search eligibility: allow ",[129,4113,4107],{}," to crawl the site, and make sure your hosting or CDN does not block traffic from OpenAI’s published SearchBot IP ranges. Passing those checks makes a site eligible to appear; it does ",[21,4116,151],{}," guarantee that ChatGPT will select or rank it for a particular query. (",[29,4119,4122],{"href":4120,"rel":4121},"https:\u002F\u002Fhelp.openai.com\u002Fen\u002Farticles\u002F9237897-chatgpt-search%3F.avif",[33],"help.openai.com",[12,4124,1152],{"id":1151},[17,4126,4127],{},"To audit a website for ChatGPT Search eligibility, verify that:",[978,4129,4130,4133,4138,4141,4144],{},[981,4131,4132],{},"the content is publicly reachable;",[981,4134,4135,4137],{},[129,4136,4107],{}," is not blocked by robots.txt;",[981,4139,4140],{},"your CDN, firewall, WAF, or bot protection accepts legitimate OAI-SearchBot traffic from OpenAI’s published IP ranges;",[981,4142,4143],{},"pages return usable HTTP responses rather than authentication, CAPTCHA, challenge, 403, or rate-limit barriers;",[981,4145,4146,4147,4150,4151,4153],{},"you have not confused ",[129,4148,4149],{},"GPTBot"," controls with ",[129,4152,4107],{}," controls.",[17,4155,4156,4157,35],{},"OpenAI says search placement uses multiple factors related to relevance and reliability, and placement is not guaranteed. Eligibility is therefore the first technical gate, not a ranking strategy. (",[29,4158,4122],{"href":4120,"rel":4159},[33],[12,4161,4163],{"id":4162},"eligibility-checklist","Eligibility Checklist",[69,4165,4166,4179],{},[72,4167,4168],{},[75,4169,4170,4173,4176],{},[78,4171,4172],{},"Check",[78,4174,4175],{},"Desired result",[78,4177,4178],{},"If it fails",[85,4180,4181,4192,4213,4224,4234,4250],{},[75,4182,4183,4186,4189],{},[90,4184,4185],{},"Public URL",[90,4187,4188],{},"Page loads without authentication",[90,4190,4191],{},"Make the intended public content reachable",[75,4193,4194,4198,4203],{},[90,4195,4196],{},[129,4197,1454],{},[90,4199,4200,4202],{},[129,4201,4107],{}," can crawl the required paths",[90,4204,4205,4206,466,4209,4212],{},"Correct the matching ",[129,4207,4208],{},"Allow",[129,4210,4211],{},"Disallow"," rules",[75,4214,4215,4218,4221],{},[90,4216,4217],{},"CDN \u002F WAF",[90,4219,4220],{},"Verified SearchBot traffic is accepted",[90,4222,4223],{},"Update bot rules or IP allowlists",[75,4225,4226,4228,4231],{},[90,4227,1712],{},[90,4229,4230],{},"Normal page response instead of 403\u002F429\u002Fchallenge",[90,4232,4233],{},"Inspect server, CDN and security logs",[75,4235,4236,4239,4244],{},[90,4237,4238],{},"Search vs training",[90,4240,4241,4242],{},"Search access controlled with ",[129,4243,4107],{},[90,4245,4246,4247,4249],{},"Do not use ",[129,4248,4149],{}," as the Search control",[75,4251,4252,4255,4258],{},[90,4253,4254],{},"Post-change check",[90,4256,4257],{},"Configuration remains accessible after propagation",[90,4259,4260],{},"Recheck logs after OpenAI systems refresh",[12,4262,4264],{"id":4263},"check-oai-searchbot","Check OAI-SearchBot",[17,4266,4267,4268,4270,4271,35],{},"OpenAI identifies ",[129,4269,4107],{}," as the crawler used to surface websites in ChatGPT search features. Its documentation explicitly recommends allowing the crawler in robots.txt and allowing requests from OpenAI’s published SearchBot IP ranges. (",[29,4272,4275],{"href":4273,"rel":4274},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fbots",[33],"developers.openai.com",[17,4277,4278],{},"A minimal configuration is:",[179,4280,4282],{"className":1460,"code":4281,"language":1462,"meta":185,"style":185},"User-agent: OAI-SearchBot\nAllow: \u002F\n",[129,4283,4284,4289],{"__ignoreMap":185},[161,4285,4286],{"class":299,"line":300},[161,4287,4288],{},"User-agent: OAI-SearchBot\n",[161,4290,4291],{"class":299,"line":311},[161,4292,4293],{},"Allow: \u002F\n",[17,4295,4296],{},"If you want ChatGPT Search access but do not want your site crawled by GPTBot for potential model training, the two controls can be separated:",[179,4298,4300],{"className":1460,"code":4299,"language":1462,"meta":185,"style":185},"User-agent: OAI-SearchBot\nAllow: \u002F\n\nUser-agent: GPTBot\nDisallow: \u002F\n",[129,4301,4302,4306,4310,4314,4319],{"__ignoreMap":185},[161,4303,4304],{"class":299,"line":300},[161,4305,4288],{},[161,4307,4308],{"class":299,"line":311},[161,4309,4293],{},[161,4311,4312],{"class":299,"line":325},[161,4313,3024],{"emptyLinePlaceholder":1099},[161,4315,4316],{"class":299,"line":336},[161,4317,4318],{},"User-agent: GPTBot\n",[161,4320,4321],{"class":299,"line":347},[161,4322,4323],{},"Disallow: \u002F\n",[17,4325,4326,4327,35],{},"OpenAI documents these settings as independent. Allowing Search does not require allowing GPTBot. (",[29,4328,4275],{"href":4273,"rel":4329},[33],[17,4331,4332,4333,420,4335,4337,4338,4340,4341,4343,4344,4347,4348,35],{},"This distinction matters because ",[129,4334,4149],{},[129,4336,4107],{}," have different purposes. ",[129,4339,4149],{}," relates to crawling that may be used for training OpenAI’s generative AI foundation models. ",[129,4342,4107],{}," controls automatic crawling for Search. ",[129,4345,4346],{},"ChatGPT-User",", meanwhile, represents certain user-triggered visits and is not the crawler used to determine Search inclusion. (",[29,4349,4275],{"href":4273,"rel":4350},[33],[17,4352,4353],{},[161,4354,4355],{},"INTERNAL LINK: OAI-SearchBot Explained",[12,4357,4359],{"id":4358},"audit-robotstxt-carefully","Audit robots.txt Carefully",[17,4361,4362,4363,4365],{},"Do not only search your robots.txt file for the literal text ",[129,4364,4107],{},". Evaluate the rules that actually apply to it.",[17,4367,4368,4369,624,4371,4373,4374,4377,4378,35],{},"The Robots Exclusion Protocol defines crawler rules through user-agent groups and ",[129,4370,4208],{},[129,4372,4211],{}," path rules. When no specific group matches a crawler, a ",[129,4375,4376],{},"User-agent: *"," group may apply. More-specific path rules take precedence over less-specific matching rules. (",[29,4379,1486],{"href":1484,"rel":4380},[33],[17,4382,1399],{},[179,4384,4386],{"className":1460,"code":4385,"language":1462,"meta":185,"style":185},"User-agent: *\nDisallow: \u002F\n\nUser-agent: OAI-SearchBot\nAllow: \u002F\n",[129,4387,4388,4392,4396,4400,4404],{"__ignoreMap":185},[161,4389,4390],{"class":299,"line":300},[161,4391,1469],{},[161,4393,4394],{"class":299,"line":311},[161,4395,4323],{},[161,4397,4398],{"class":299,"line":325},[161,4399,3024],{"emptyLinePlaceholder":1099},[161,4401,4402],{"class":299,"line":336},[161,4403,4288],{},[161,4405,4406],{"class":299,"line":347},[161,4407,4293],{},[17,4409,4410,4411,4413],{},"A dedicated ",[129,4412,4107],{}," group can therefore express a different policy from the general crawler policy.",[17,4415,4416,4417,4420,4421,35],{},"Also verify that ",[129,4418,4419],{},"\u002Frobots.txt"," itself works reliably. RFC 9309 distinguishes an unavailable robots file from one that is unreachable because of server or network errors. A persistent 5xx or connectivity problem can therefore have very different consequences from simply having no robots file. (",[29,4422,1486],{"href":1484,"rel":4423},[33],[12,4425,4427],{"id":4426},"check-the-infrastructure-layer","Check the Infrastructure Layer",[17,4429,4430],{},"A correct robots.txt does not prove that OpenAI can actually fetch the page.",[17,4432,4433,4434,4437,4438,35],{},"OpenAI specifically tells publishers to confirm that their host or CDN accepts traffic from its published SearchBot IP addresses. The current ranges are maintained in OpenAI’s ",[129,4435,4436],{},"searchbot.json"," file rather than being a fixed list you should copy permanently into documentation. (",[29,4439,4122],{"href":4120,"rel":4440},[33],[17,4442,4443,4444,35],{},"This matters when a site uses Cloudflare, Akamai, a managed WAF, custom firewall rules, rate limiting, or anti-bot systems. OpenAI notes that crawler traffic can be blocked by 403 responses, automated bot mitigation, JavaScript challenges, CAPTCHAs, authentication checks, or rate limiting. (",[29,4445,4122],{"href":4446,"rel":4447},"https:\u002F\u002Fhelp.openai.com\u002Fen\u002Farticles\u002F20001243-advertiser-guidance-for-allowing-openai-web-crawlers",[33],[17,4449,4450],{},"A useful server-side audit therefore checks both:",[179,4452,4454],{"className":3564,"code":4453,"language":3566,"meta":185,"style":185},"curl -I https:\u002F\u002Fexample.com\u002Fpage\n",[129,4455,4456],{"__ignoreMap":185},[161,4457,4458,4461,4464],{"class":299,"line":300},[161,4459,4460],{"class":314},"curl",[161,4462,4463],{"class":384}," -I",[161,4465,4466],{"class":321}," https:\u002F\u002Fexample.com\u002Fpage\n",[17,4468,4469],{},"and:",[179,4471,4473],{"className":3564,"code":4472,"language":3566,"meta":185,"style":185},"curl -A \"OAI-SearchBot\" -I https:\u002F\u002Fexample.com\u002Fpage\n",[129,4474,4475],{"__ignoreMap":185},[161,4476,4477,4479,4482,4485,4487],{"class":299,"line":300},[161,4478,4460],{"class":314},[161,4480,4481],{"class":384}," -A",[161,4483,4484],{"class":321}," \"OAI-SearchBot\"",[161,4486,4463],{"class":384},[161,4488,4466],{"class":321},[17,4490,4491,4492,4495],{},"The second request can expose user-agent-based application rules, but it is ",[21,4493,4494],{},"not proof that genuine OpenAI traffic is allowed",". Your request does not originate from an OpenAI SearchBot IP. Confirm the real infrastructure behavior through CDN\u002FWAF configuration and logs using OpenAI’s published IP ranges.",[12,4497,4499],{"id":4498},"diagnose-failed-access","Diagnose Failed Access",[69,4501,4502,4521],{},[72,4503,4504],{},[75,4505,4506,4509,4512,4515,4518],{},[78,4507,4508],{},"Symptom",[78,4510,4511],{},"Measure",[78,4513,4514],{},"Likely cause",[78,4516,4517],{},"Confirmation",[78,4519,4520],{},"Fix",[85,4522,4523,4542,4561,4578,4595,4612],{},[75,4524,4525,4530,4533,4536,4539],{},[90,4526,4527,4529],{},[129,4528,4107],{}," never reaches pages",[90,4531,4532],{},"CDN\u002FWAF logs",[90,4534,4535],{},"Edge-level block",[90,4537,4538],{},"Check rejected bot\u002FIP events",[90,4540,4541],{},"Allow verified SearchBot traffic",[75,4543,4544,4549,4552,4555,4558],{},[90,4545,4546,4548],{},[129,4547,4419],{}," is fetched but pages are not",[90,4550,4551],{},"robots.txt rules",[90,4553,4554],{},"Crawl restriction",[90,4556,4557],{},"Evaluate matching user-agent group",[90,4559,4560],{},"Correct rules",[75,4562,4563,4566,4569,4572,4575],{},[90,4564,4565],{},"Requests receive 403",[90,4567,4568],{},"HTTP\u002Fserver logs",[90,4570,4571],{},"Firewall or bot protection",[90,4573,4574],{},"Inspect security event",[90,4576,4577],{},"Adjust WAF policy",[75,4579,4580,4583,4586,4589,4592],{},[90,4581,4582],{},"Requests receive 429",[90,4584,4585],{},"Rate-limit logs",[90,4587,4588],{},"Automated throttling",[90,4590,4591],{},"Match timestamps and crawler traffic",[90,4593,4594],{},"Tune legitimate-bot limits",[75,4596,4597,4600,4603,4606,4609],{},[90,4598,4599],{},"Browser works, crawler fails",[90,4601,4602],{},"Challenge\u002FCAPTCHA behavior",[90,4604,4605],{},"Human-verification layer",[90,4607,4608],{},"Reproduce bot request path",[90,4610,4611],{},"Exempt legitimate crawler",[75,4613,4614,4617,4620,4623,4626],{},[90,4615,4616],{},"Config was just changed",[90,4618,4619],{},"Time since robots update",[90,4621,4622],{},"Systems have not refreshed",[90,4624,4625],{},"Recheck later",[90,4627,4628],{},"Allow propagation",[17,4630,4631,4632,4635,4636,35],{},"OpenAI notes that Search systems may take approximately ",[21,4633,4634],{},"24 hours after a robots.txt update"," to adjust. That is an operational estimate, not a promise that the page will appear in search after 24 hours. (",[29,4637,4275],{"href":4273,"rel":4638},[33],[12,4640,4642],{"id":4641},"eligibility-is-not-ranking","Eligibility Is Not Ranking",[17,4644,4645],{},"A successful audit establishes crawl eligibility. It does not establish visibility.",[17,4647,4648,4649,35],{},"OpenAI says ChatGPT Search ranks results using multiple factors intended to help users find relevant and reliable information, and explicitly states that placement is not guaranteed. OpenAI has not publicly documented a complete Search ranking algorithm or a fixed set of ranking-factor weights. (",[29,4650,4122],{"href":4120,"rel":4651},[33],[17,4653,4654,4655,4657,4658,4661],{},"This means several commonly discussed tactics should not be misrepresented as formal ChatGPT Search eligibility requirements. OpenAI’s current public eligibility guidance does ",[21,4656,151],{}," list XML sitemaps, ",[129,4659,4660],{},"llms.txt",", schema markup, GPTBot permission, or a special “AI SEO” meta tag as mandatory conditions for Search inclusion.",[17,4663,4664],{},"Those technologies may have other legitimate uses, but they should not be presented as requirements without supporting evidence.",[17,4666,4667],{},[161,4668,4669],{},"INTERNAL LINK: ChatGPT Search vs Traditional Search",[12,4671,4673],{"id":4672},"measure-real-traffic","Measure Real Traffic",[17,4675,4676,4677,4679],{},"Publishers that allow ",[129,4678,4107],{}," can also look for downstream evidence in analytics. OpenAI states that ChatGPT referral URLs automatically include:",[179,4681,4683],{"className":1460,"code":4682,"language":1462,"meta":185,"style":185},"utm_source=chatgpt.com\n",[129,4684,4685],{"__ignoreMap":185},[161,4686,4687],{"class":299,"line":300},[161,4688,4682],{},[17,4690,4691,4692,35],{},"This makes referral traffic from ChatGPT easier to isolate in analytics platforms. (",[29,4693,4122],{"href":4694,"rel":4695},"https:\u002F\u002Fhelp.openai.com\u002Fen\u002Farticles\u002F12627856-publishers-and-developers-faq%23%3A~%3Atext%3DChatGPT%2520automatically%2520includes%2520the%2520UTM%2520parameter%2520utm_source%253Dchatgpt.com%2520in%2520referral%2520URLs%252C%2520enabling%2520clear%2520tracking%2520and%2520analysis%2520of%2520inbound%2520traffic%2520from%2520ChatGPT%2520search%2520results.",[33],[17,4697,4698],{},"Referral traffic and crawler logs answer different questions. Logs tell you whether OpenAI can reach the site. Referral data tells you whether users actually clicked through from ChatGPT. Neither alone proves how often a page was considered, ranked, quoted, or omitted.",[12,4700,4702],{"id":4701},"common-mistakes","Common Mistakes",[17,4704,4705,4706,4708],{},"The most important mistake is treating ChatGPT Search access as identical to Google indexing. It is not. A website can permit Googlebot while blocking ",[129,4707,4107],{}," at robots.txt or infrastructure level.",[17,4710,4711],{},"Another mistake is allowing the user agent in robots.txt while a WAF silently rejects the same crawler. The reverse can also happen: the network permits the request, but robots.txt says not to crawl the content.",[17,4713,4714,4715,4717,4718,35],{},"Finally, blocking ",[129,4716,4149],{}," does not automatically opt a site out of ChatGPT Search. OpenAI intentionally separates the training and search controls. (",[29,4719,4275],{"href":4273,"rel":4720},[33],[12,4722,887],{"id":886},[17,4724,4725],{},"Treat the audit as two separate gates:",[17,4727,4728],{},[21,4729,4730],{},"Crawler policy → infrastructure access.",[17,4732,4733,4734,4736],{},"First establish that ",[129,4735,4107],{}," is permitted by robots.txt. Then establish that a legitimate request from OpenAI’s published SearchBot infrastructure can actually reach the page without security or application barriers.",[17,4738,4739],{},"Only after these checks pass should you investigate content relevance, authority, page quality, entity clarity, or other visibility questions. Otherwise, you may spend time “optimizing for ChatGPT” while the crawler cannot reliably access the site at all.",[12,4741,907],{"id":906},[220,4743,4745],{"id":4744},"does-allowing-oai-searchbot-guarantee-chatgpt-visibility","Does allowing OAI-SearchBot guarantee ChatGPT visibility?",[17,4747,4748,4749,35],{},"No. It establishes eligibility for crawling and inclusion, but OpenAI says placement is not guaranteed. (",[29,4750,4122],{"href":4120,"rel":4751},[33],[909,4753,4755],{"id":4754},"do-i-need-to-allow-gptbot","Do I need to allow GPTBot?",[17,4757,4758,4759,35],{},"Not for ChatGPT Search eligibility. OpenAI documents GPTBot and OAI-SearchBot as independent controls. (",[29,4760,4275],{"href":4273,"rel":4761},[33],[909,4763,4765],{"id":4764},"can-i-block-training-but-allow-search","Can I block training but allow Search?",[17,4767,4768,4769,4771,4772,239,4774,35],{},"Yes. You can allow ",[129,4770,4107],{}," while disallowing ",[129,4773,4149],{},[29,4775,4275],{"href":4273,"rel":4776},[33],[909,4778,4780],{"id":4779},"should-i-hard-code-searchbot-ip-addresses","Should I hard-code SearchBot IP addresses?",[17,4782,4783,4784,4786,4787,35],{},"Prefer OpenAI’s published ",[129,4785,4436],{}," as the source of truth because crawler infrastructure can change. (",[29,4788,4791],{"href":4789,"rel":4790},"https:\u002F\u002Fopenai.com\u002Fsearchbot.json",[33],"openai.com",[909,4793,4795],{"id":4794},"how-quickly-do-robotstxt-changes-apply","How quickly do robots.txt changes apply?",[17,4797,4798,4799,35],{},"OpenAI says its Search systems may take approximately 24 hours to adjust after a robots.txt update. (",[29,4800,4275],{"href":4273,"rel":4801},[33],[12,4803,960],{"id":959},[17,4805,4806,4807],{},"A ChatGPT Search eligibility audit is primarily an access audit. The essential question is not “Have we added enough AI SEO markup?” It is: ",[21,4808,4809],{},"Can OAI-SearchBot legally and technically reach the content?",[17,4811,4812],{},"Check robots.txt, verify OpenAI’s current SearchBot IP ranges against your infrastructure policy, inspect WAF and server responses, keep GPTBot controls separate, and measure both crawler activity and referral traffic. Once those foundations work, search visibility becomes a relevance and selection problem rather than an access problem.",[12,4814,976],{"id":975},[978,4816,4817,4831,4845,4859,4873,4887],{},[981,4818,4819,4822,4823,749,4828,35],{},[21,4820,4821],{},"OpenAI — “Searching the web with ChatGPT.”"," Updated August 2026. Eligibility guidance, ranking disclaimer, and SearchBot infrastructure requirement. ",[29,4824,4827],{"href":4825,"rel":4826},"https:\u002F\u002Fhelp.openai.com\u002Fen\u002Farticles\u002F9237897?utm_source=chatgpt.com",[33],"OpenAI: Searching the web with ChatGPT",[29,4829,4122],{"href":4120,"rel":4830},[33],[981,4832,4833,4836,4837,749,4842,35],{},[21,4834,4835],{},"OpenAI — “Overview of OpenAI Crawlers.”"," Current developer documentation. Definitions and controls for OAI-SearchBot, GPTBot and ChatGPT-User; approximately 24-hour robots.txt adjustment note. ",[29,4838,4841],{"href":4839,"rel":4840},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fbots?utm_source=chatgpt.com",[33],"OpenAI Crawlers documentation",[29,4843,4275],{"href":4273,"rel":4844},[33],[981,4846,4847,4850,4851,749,4856,35],{},[21,4848,4849],{},"OpenAI — “Publishers and Developers – FAQ.”"," Updated August 2026. Publisher discovery guidance and ChatGPT referral tracking. ",[29,4852,4855],{"href":4853,"rel":4854},"https:\u002F\u002Fhelp.openai.com\u002Fen\u002Farticles\u002F12627856-publishers-and-developers-faq?utm_source=chatgpt.com",[33],"OpenAI Publishers and Developers FAQ",[29,4857,4122],{"href":4694,"rel":4858},[33],[981,4860,4861,4864,4865,749,4870,35],{},[21,4862,4863],{},"OpenAI — SearchBot published IP ranges."," Current machine-readable source for OAI-SearchBot network prefixes. ",[29,4866,4869],{"href":4867,"rel":4868},"https:\u002F\u002Fopenai.com\u002Fsearchbot.json?utm_source=chatgpt.com",[33],"OpenAI searchbot.json",[29,4871,4791],{"href":4789,"rel":4872},[33],[981,4874,4875,4878,4879,749,4884,35],{},[21,4876,4877],{},"OpenAI — “Advertiser Guidance for Allowing OpenAI Web Crawlers.”"," Updated September 20, 2026. Practical crawler troubleshooting covering WAFs, CDNs, bot protection, CAPTCHAs, 403 responses and rate limiting. ",[29,4880,4883],{"href":4881,"rel":4882},"https:\u002F\u002Fhelp.openai.com\u002Fen\u002Farticles\u002F20001243-advertiser-guidance-for-allowing-openai-web-crawlers?utm_source=chatgpt.com",[33],"OpenAI crawler troubleshooting guidance",[29,4885,4122],{"href":4446,"rel":4886},[33],[981,4888,4889,4892,4893,466,4895,4897,4898,749,4901,35],{},[21,4890,4891],{},"IETF — RFC 9309: Robots Exclusion Protocol."," September 2022. Standards-track definition of robots.txt parsing, user-agent matching, ",[129,4894,4208],{},[129,4896,4211],{},", access behavior and caching. ",[29,4899,1480],{"href":1484,"rel":4900},[33],[29,4902,1486],{"href":1484,"rel":4903},[33],[1067,4905,4906],{},"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 .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":185,"searchDepth":311,"depth":311,"links":4908},[4909,4910,4911,4912,4913,4914,4915,4916,4917,4918,4919,4920,4923,4924],{"id":4100,"depth":311,"text":4101},{"id":1151,"depth":311,"text":1152},{"id":4162,"depth":311,"text":4163},{"id":4263,"depth":311,"text":4264},{"id":4358,"depth":311,"text":4359},{"id":4426,"depth":311,"text":4427},{"id":4498,"depth":311,"text":4499},{"id":4641,"depth":311,"text":4642},{"id":4672,"depth":311,"text":4673},{"id":4701,"depth":311,"text":4702},{"id":886,"depth":311,"text":887},{"id":906,"depth":311,"text":907,"children":4921},[4922],{"id":4744,"depth":325,"text":4745},{"id":959,"depth":311,"text":960},{"id":975,"depth":311,"text":976},"AI","Audit your website for ChatGPT Search eligibility. Check OAI-SearchBot, robots.txt, OpenAI IP ranges, CDN\u002FWAF access, HTTP responses and common crawler blocks.","\u002Fchatchpt-audit.png","Image of Eligibility Audit",{},"\u002Fblog\u002Fen\u002Feligibility-audit",{"title":4095,"description":4926},"eligibility-audit","blog\u002Fen\u002Feligibility-audit","YoyJOM7665oOAnSOgVvCqn-pQeBisgI_crB-_bMymlI",{"id":4936,"title":4937,"author":7,"body":4938,"category":4083,"description":5672,"draft":1097,"extension":1098,"featured":1099,"image":5673,"imageAlt":5674,"locale":1102,"meta":5675,"navigation":1099,"path":5676,"publishedAt":1105,"seo":5677,"slug":4993,"stem":5678,"translationKey":5679,"updatedAt":1105,"__hash__":5680},"blog\u002Fblog\u002Fen\u002Fipv4-vs-ipv6.md","IPv4 vs IPv6: What Modern Websites Need to Know",{"type":9,"value":4939,"toc":5656},[4940,4944,4959,4970,4972,4984,4991,4995,5097,5104,5108,5111,5114,5137,5140,5146,5157,5162,5171,5185,5188,5194,5197,5201,5204,5207,5218,5221,5227,5230,5233,5237,5240,5243,5269,5275,5278,5283,5286,5290,5293,5300,5303,5309,5312,5317,5320,5325,5330,5334,5337,5344,5347,5350,5354,5360,5363,5369,5372,5397,5400,5415,5418,5432,5435,5442,5448,5450,5456,5459,5465,5467,5474,5481,5484,5487,5489,5493,5501,5505,5508,5512,5519,5523,5531,5535,5538,5540,5543,5546,5549,5551,5653],[12,4941,4943],{"id":4942},"ipv4-vs-ipv6-for-modern-websites","IPv4 vs IPv6 for Modern Websites",[17,4945,4946,4947,4950,4951,4954,4955,35],{},"IPv4 and IPv6 do the same fundamental job: they let packets travel between devices across IP networks. The important difference is that IPv4 uses ",[21,4948,4949],{},"32-bit addresses",", while IPv6 uses ",[21,4952,4953],{},"128-bit addresses"," and was designed as IPv4’s successor. That larger address space solves the long-term addressing limitation that has shaped much of today’s Internet infrastructure. (",[29,4956,1486],{"href":4957,"rel":4958},"https:\u002F\u002Fwww.rfc-editor.org\u002Finfo\u002Frfc791\u002F?utm_source=chatgpt.com",[33],[17,4960,4961,4962,4965,4966,4969],{},"For a modern website, however, the practical question is rarely ",[21,4963,4964],{},"“IPv4 or IPv6?”"," The better question is ",[21,4967,4968],{},"“Can users reliably reach the site over both?”"," In most public web deployments, supporting both protocols—directly or through a CDN, reverse proxy, or hosting platform—is the safest transition strategy.",[12,4971,1152],{"id":1151},[17,4973,4974,4975,4978,4979,35],{},"IPv4 is still widely used and should not normally be removed from a public website simply because IPv6 is available. IPv6 is the long-term successor to IPv4 and is already a significant part of Internet traffic: Cloudflare Radar currently reports roughly ",[21,4976,4977],{},"41% of HTTP requests"," on its worldwide network using IPv6, although that percentage varies significantly by network and country. (",[29,4980,4983],{"href":4981,"rel":4982},"https:\u002F\u002Fradar.cloudflare.com\u002F?utm_source=chatgpt.com",[33],"radar.cloudflare.com",[17,4985,4986,4987,4990],{},"For most websites, ",[21,4988,4989],{},"dual-stack connectivity","—making the site reachable through both IPv4 and IPv6—is the practical choice. Modern clients can then select an appropriate working path.",[12,4992,4994],{"id":4993},"ipv4-vs-ipv6","IPv4 vs IPv6",[69,4996,4997,5010],{},[72,4998,4999],{},[75,5000,5001,5004,5007],{},[78,5002,5003],{},"Characteristic",[78,5005,5006],{},"IPv4",[78,5008,5009],{},"IPv6",[85,5011,5012,5023,5038,5053,5064,5075,5086],{},[75,5013,5014,5017,5020],{},[90,5015,5016],{},"Address size",[90,5018,5019],{},"32 bits",[90,5021,5022],{},"128 bits",[75,5024,5025,5028,5033],{},[90,5026,5027],{},"Example",[90,5029,5030],{},[129,5031,5032],{},"192.0.2.10",[90,5034,5035],{},[129,5036,5037],{},"2001:db8::10",[75,5039,5040,5043,5048],{},[90,5041,5042],{},"DNS record",[90,5044,5045],{},[129,5046,5047],{},"A",[90,5049,5050],{},[129,5051,5052],{},"AAAA",[75,5054,5055,5058,5061],{},[90,5056,5057],{},"Address availability",[90,5059,5060],{},"Highly constrained",[90,5062,5063],{},"Vastly larger address space",[75,5065,5066,5069,5072],{},[90,5067,5068],{},"Broadcast",[90,5070,5071],{},"Supported",[90,5073,5074],{},"Replaced by multicast mechanisms",[75,5076,5077,5080,5083],{},[90,5078,5079],{},"Website support today",[90,5081,5082],{},"Essential in many environments",[90,5084,5085],{},"Increasingly important",[75,5087,5088,5091,5094],{},[90,5089,5090],{},"Typical deployment",[90,5092,5093],{},"IPv4 or dual-stack",[90,5095,5096],{},"Usually dual-stack for public websites",[17,5098,5099,5100,35],{},"IPv6 is not simply IPv4 with longer addresses. Its specification also changes parts of packet handling and simplifies the base header design. IPv6 supports unicast, multicast, and anycast addressing, and unlike IPv4 it does not define broadcast addresses. (",[29,5101,1486],{"href":5102,"rel":5103},"https:\u002F\u002Fwww.rfc-editor.org\u002Finfo\u002Frfc8200\u002F?utm_source=chatgpt.com",[33],[12,5105,5107],{"id":5106},"what-changes-for-a-website","What Changes for a Website?",[17,5109,5110],{},"At the application level, surprisingly little.",[17,5112,5113],{},"Your website can still use:",[1640,5115,5116,5119,5122,5125,5128,5131,5134],{},[981,5117,5118],{},"HTTPS",[981,5120,5121],{},"HTTP\u002F2 or HTTP\u002F3",[981,5123,5124],{},"TLS",[981,5126,5127],{},"Nginx or Apache",[981,5129,5130],{},"Node.js, PHP, Python, Go, or another backend",[981,5132,5133],{},"CDNs and reverse proxies",[981,5135,5136],{},"ordinary domain names",[17,5138,5139],{},"The important change happens lower in the network stack.",[17,5141,5142,5143,5145],{},"For IPv4, DNS typically returns an ",[129,5144,5047],{}," record:",[179,5147,5151],{"className":5148,"code":5149,"language":5150,"meta":185,"style":185},"language-dns shiki shiki-themes github-light github-dark","example.com.    A       192.0.2.10\n","dns",[129,5152,5153],{"__ignoreMap":185},[161,5154,5155],{"class":299,"line":300},[161,5156,5149],{},[17,5158,5159,5160,5145],{},"For IPv6, DNS uses an ",[129,5161,5052],{},[179,5163,5165],{"className":5148,"code":5164,"language":5150,"meta":185,"style":185},"example.com.    AAAA    2001:db8::10\n",[129,5166,5167],{"__ignoreMap":185},[161,5168,5169],{"class":299,"line":300},[161,5170,5164],{},[17,5172,5173,5174,5176,5177,5179,5180,35],{},"A hostname can publish both records. Cloudflare's DNS documentation likewise defines ",[129,5175,5047],{}," records as mappings to IPv4 addresses and ",[129,5178,5052],{}," records as mappings to IPv6 addresses. (",[29,5181,5184],{"href":5182,"rel":5183},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fdns\u002Fmanage-dns-records\u002Freference\u002Fdns-record-types\u002F?utm_source=chatgpt.com",[33],"developers.cloudflare.com",[17,5186,5187],{},"This means the URL does not change:",[179,5189,5192],{"className":5190,"code":5191,"language":184,"meta":185},[182],"https:\u002F\u002Fexample.com\u002F\n",[129,5193,5191],{"__ignoreMap":185},[17,5195,5196],{},"The browser resolves the hostname and determines which network path to use.",[12,5198,5200],{"id":5199},"how-dual-stack-connections-work","How Dual-Stack Connections Work",[17,5202,5203],{},"A common misconception is that a browser simply tries IPv6 first and waits for it to fail before falling back to IPv4.",[17,5205,5206],{},"Modern networking is more sophisticated.",[17,5208,5209,5210,5213,5214,35],{},"RFC 8305 defines ",[21,5211,5212],{},"Happy Eyeballs Version 2",", an approach designed for hosts that may have multiple IPv4 and IPv6 addresses. Clients can attempt connection paths in a way that reduces visible delays when one address family is unavailable, broken, or substantially worse than another. (",[29,5215,1486],{"href":5216,"rel":5217},"https:\u002F\u002Fwww.rfc-editor.org\u002Frfc\u002Frfc8305.html?utm_source=chatgpt.com",[33],[17,5219,5220],{},"Conceptually:",[179,5222,5225],{"className":5223,"code":5224,"language":184,"meta":185},[182],"Browser\n   |\n   +---- IPv6 ----\\\n   |               > Website\n   +---- IPv4 ----\u002F\n",[129,5226,5224],{"__ignoreMap":185},[17,5228,5229],{},"The user should not have to understand which protocol ultimately succeeds.",[17,5231,5232],{},"This is one reason a broken IPv6 deployment can be worse than having no IPv6 deployment at all: advertising IPv6 connectivity that does not actually work introduces another potentially failing network path.",[12,5234,5236],{"id":5235},"is-ipv6-faster","Is IPv6 Faster?",[17,5238,5239],{},"Not inherently.",[17,5241,5242],{},"IPv6 can be faster on one network and slower on another. Actual performance depends on factors including:",[1640,5244,5245,5248,5251,5254,5257,5260,5263,5266],{},[981,5246,5247],{},"ISP routing",[981,5249,5250],{},"peering",[981,5252,5253],{},"CDN topology",[981,5255,5256],{},"server location",[981,5258,5259],{},"packet loss",[981,5261,5262],{},"network congestion",[981,5264,5265],{},"IPv4 NAT infrastructure",[981,5267,5268],{},"IPv6 deployment quality",[17,5270,5271,5272,35],{},"Happy Eyeballs exists partly because IPv4 and IPv6 paths may have different connectivity and performance characteristics. (",[29,5273,1486],{"href":5216,"rel":5274},[33],[17,5276,5277],{},"Therefore:",[17,5279,5280],{},[21,5281,5282],{},"IPv6 support is not itself a performance optimization.",[17,5284,5285],{},"Measure the actual routes your users receive instead of assuming one protocol will always have lower latency.",[12,5287,5289],{"id":5288},"does-ipv6-improve-seo","Does IPv6 Improve SEO?",[17,5291,5292],{},"There is no documented basis for treating IPv6 itself as an SEO ranking advantage.",[17,5294,5295,5296,35],{},"Google's published technical requirements for Search focus on whether Googlebot can access the page, whether the server returns a successful HTTP status, and whether the page contains indexable content. IPv6 is not listed as a technical requirement there. (",[29,5297,157],{"href":5298,"rel":5299},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fessentials\u002Ftechnical?authuser=1&utm_source=chatgpt.com",[33],[17,5301,5302],{},"The SEO concern is therefore indirect.",[17,5304,5305,5306,35],{},"If a networking problem makes your website inaccessible, unstable, or slow for users or crawlers, that infrastructure problem can matter. Google explicitly identifies server and network problems as possible causes of crawling failures. (",[29,5307,157],{"href":1144,"rel":5308},[33],[17,5310,5311],{},"So the useful SEO principle is not:",[1501,5313,5314],{},[17,5315,5316],{},"Enable IPv6 to rank higher.",[17,5318,5319],{},"It is:",[1501,5321,5322],{},[17,5323,5324],{},"Make every advertised network path reliable.",[17,5326,5327],{},[161,5328,5329],{},"INTERNAL LINK: How Google Crawling Works",[12,5331,5333],{"id":5332},"ipv6-only-networks","IPv6-Only Networks",[17,5335,5336],{},"IPv6-only networks also exist.",[17,5338,5339,5340,35],{},"When they need to reach IPv4-only destinations, translation technologies such as NAT64 and DNS64 may be used. DNS64 can synthesize IPv6 DNS answers from IPv4 records so IPv6-only clients can connect through a NAT64 gateway. (",[29,5341,5184],{"href":5342,"rel":5343},"https:\u002F\u002Fdevelopers.cloudflare.com\u002F1.1.1.1\u002Finfrastructure\u002Fipv6-networks\u002F?utm_source=chatgpt.com",[33],[17,5345,5346],{},"That compatibility layer is useful, but a website that supports IPv6 directly does not have to rely on every visitor's network successfully providing such translation.",[17,5348,5349],{},"This is another practical reason to make modern public services IPv6-capable while retaining IPv4 compatibility where needed.",[12,5351,5353],{"id":5352},"how-to-enable-ipv6-safely","How to Enable IPv6 Safely",[17,5355,5356,5357,5359],{},"Do not begin by adding an ",[129,5358,5052],{}," record.",[17,5361,5362],{},"First confirm that the entire path works:",[179,5364,5367],{"className":5365,"code":5366,"language":184,"meta":185},[182],"Internet\n   ↓\nDNS\n   ↓\nCDN \u002F Load Balancer\n   ↓\nFirewall\n   ↓\nReverse Proxy\n   ↓\nApplication\n",[129,5368,5366],{"__ignoreMap":185},[17,5370,5371],{},"Then verify:",[179,5373,5375],{"className":3564,"code":5374,"language":3566,"meta":185,"style":185},"dig A example.com\ndig AAAA example.com\n",[129,5376,5377,5388],{"__ignoreMap":185},[161,5378,5379,5382,5385],{"class":299,"line":300},[161,5380,5381],{"class":314},"dig",[161,5383,5384],{"class":321}," A",[161,5386,5387],{"class":321}," example.com\n",[161,5389,5390,5392,5395],{"class":299,"line":311},[161,5391,5381],{"class":314},[161,5393,5394],{"class":321}," AAAA",[161,5396,5387],{"class":321},[17,5398,5399],{},"Test IPv4 explicitly:",[179,5401,5403],{"className":3564,"code":5402,"language":3566,"meta":185,"style":185},"curl -4 https:\u002F\u002Fexample.com\u002F\n",[129,5404,5405],{"__ignoreMap":185},[161,5406,5407,5409,5412],{"class":299,"line":300},[161,5408,4460],{"class":314},[161,5410,5411],{"class":384}," -4",[161,5413,5414],{"class":321}," https:\u002F\u002Fexample.com\u002F\n",[17,5416,5417],{},"Then IPv6:",[179,5419,5421],{"className":3564,"code":5420,"language":3566,"meta":185,"style":185},"curl -6 https:\u002F\u002Fexample.com\u002F\n",[129,5422,5423],{"__ignoreMap":185},[161,5424,5425,5427,5430],{"class":299,"line":300},[161,5426,4460],{"class":314},[161,5428,5429],{"class":384}," -6",[161,5431,5414],{"class":321},[17,5433,5434],{},"Both should return the expected application response.",[17,5436,5437,5438,5441],{},"Also check monitoring, firewall rules, rate limiting, IP allowlists, application logs, fraud detection, and analytics systems. Software that assumes every client address looks like ",[129,5439,5440],{},"192.0.2.1"," can fail when it encounters an address such as:",[179,5443,5446],{"className":5444,"code":5445,"language":184,"meta":185},[182],"2001:db8:85a3::8a2e:370:7334\n",[129,5447,5445],{"__ignoreMap":185},[12,5449,4702],{"id":4701},[17,5451,5452,5453,5455],{},"The most dangerous mistake is publishing an ",[129,5454,5052],{}," record simply because the hosting dashboard displays an IPv6 address. DNS availability does not prove end-to-end connectivity.",[17,5457,5458],{},"Another mistake is assuming NAT provides security. Firewall policy and exposure control should be deliberate regardless of which IP version is used.",[17,5460,5461,5462,35],{},"Finally, do not disable IPv4 merely to make an infrastructure stack appear “modern.” IPv6 adoption is substantial but incomplete. Cloudflare's current global measurements still show considerable traffic arriving over IPv4. (",[29,5463,4983],{"href":4981,"rel":5464},[33],[12,5466,887],{"id":886},[17,5468,5469,5470,5473],{},"For an ordinary public website in 2026, prefer ",[21,5471,5472],{},"tested dual-stack availability"," when your hosting architecture supports it reliably.",[17,5475,5476,5477,35],{},"Use IPv4 and IPv6 together, or let a capable CDN or edge platform provide both client-facing protocols. Cloudflare, for example, enables IPv6 compatibility for proxied domains by default and can advertise IPv6 connectivity alongside IPv4. (",[29,5478,5184],{"href":5479,"rel":5480},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fnetwork\u002Fipv6-compatibility\u002F?utm_source=chatgpt.com",[33],[17,5482,5483],{},"More importantly, treat IPv6 as a real production path: monitor it, test it during deployments, include it in firewall policy, and verify it from external networks.",[17,5485,5486],{},"Do not deploy IPv6 merely to check a box.",[12,5488,907],{"id":906},[909,5490,5492],{"id":5491},"is-ipv4-obsolete","Is IPv4 obsolete?",[17,5494,5495,5496,35],{},"No. IPv4 remains heavily used, even though its address-space limitations drove the development and adoption of IPv6. ARIN, for example, still operates a waiting-list process for limited returned IPv4 address space. (",[29,5497,5500],{"href":5498,"rel":5499},"https:\u002F\u002Fwww.arin.net\u002Fannouncements\u002F20260702\u002F?utm_source=chatgpt.com",[33],"arin.net",[909,5502,5504],{"id":5503},"should-every-website-support-ipv6","Should every website support IPv6?",[17,5506,5507],{},"It is increasingly useful, particularly for long-lived infrastructure. But working IPv4-only connectivity is preferable to a misconfigured IPv6 deployment.",[909,5509,5511],{"id":5510},"can-ipv4-and-ipv6-run-together","Can IPv4 and IPv6 run together?",[17,5513,5514,5515,5518],{},"Yes. This is normally called ",[21,5516,5517],{},"dual-stack networking",", and it is a common transition model.",[909,5520,5522],{"id":5521},"do-i-need-separate-domains","Do I need separate domains?",[17,5524,5525,5526,420,5528,5530],{},"No. The same hostname can have both ",[129,5527,5047],{},[129,5529,5052],{}," DNS records.",[909,5532,5534],{"id":5533},"will-enabling-ipv6-improve-core-web-vitals","Will enabling IPv6 improve Core Web Vitals?",[17,5536,5537],{},"Not automatically. IPv6 may produce a different network route, but the resulting latency depends on the actual ISP, routing, peering, CDN, and server path.",[12,5539,960],{"id":959},[17,5541,5542],{},"IPv6 is not a new version of your website. It is another way for traffic to reach it.",[17,5544,5545],{},"IPv4 remains important, while IPv6 has become too widely deployed to treat as an experimental technology. The practical architecture for most modern websites is therefore not an ideological choice between the two.",[17,5547,5548],{},"Support both where possible, advertise only connectivity that actually works, and measure IPv4 and IPv6 as separate network paths.",[12,5550,976],{"id":975},[978,5552,5553,5563,5573,5584,5595,5604,5613,5623,5633,5643],{},[981,5554,5555,5558,5559],{},[21,5556,5557],{},"IETF \u002F RFC Editor — RFC 8200: Internet Protocol, Version 6 (IPv6) Specification",", July 2017. ",[29,5560,5562],{"href":5102,"rel":5561},[33],"RFC 8200",[981,5564,5565,5568,5569],{},[21,5566,5567],{},"IETF \u002F RFC Editor — RFC 791: Internet Protocol",", September 1981. ",[29,5570,5572],{"href":4957,"rel":5571},[33],"RFC 791",[981,5574,5575,5578,5579],{},[21,5576,5577],{},"IETF \u002F RFC Editor — RFC 4291: IP Version 6 Addressing Architecture",", February 2006. ",[29,5580,5583],{"href":5581,"rel":5582},"https:\u002F\u002Fwww.rfc-editor.org\u002Finfo\u002Frfc4291\u002F?utm_source=chatgpt.com",[33],"RFC 4291",[981,5585,5586,5589,5590],{},[21,5587,5588],{},"IETF \u002F RFC Editor — RFC 8305: Happy Eyeballs Version 2",", December 2017. ",[29,5591,5594],{"href":5592,"rel":5593},"https:\u002F\u002Fwww.rfc-editor.org\u002Finfo\u002Frfc8305\u002F?utm_source=chatgpt.com",[33],"RFC 8305",[981,5596,5597,1057,5600],{},[21,5598,5599],{},"Google Search Central — Google Search Technical Requirements",[29,5601,5603],{"href":5298,"rel":5602},[33],"Google Search technical requirements",[981,5605,5606,1057,5609],{},[21,5607,5608],{},"Google Search Central — How Google Search Works",[29,5610,5612],{"href":1144,"rel":5611},[33],"How Google Search works",[981,5614,5615,5618,5619],{},[21,5616,5617],{},"Cloudflare — IPv6 Compatibility",", updated August 25, 2026. ",[29,5620,5622],{"href":5479,"rel":5621},[33],"Cloudflare IPv6 compatibility",[981,5624,5625,5628,5629],{},[21,5626,5627],{},"Cloudflare — DNS Record Types",", updated June 2, 2026. ",[29,5630,5632],{"href":5182,"rel":5631},[33],"Cloudflare DNS record types",[981,5634,5635,5638,5639],{},[21,5636,5637],{},"Cloudflare Radar — Worldwide Adoption & Usage",", accessed September 20, 2026. ",[29,5640,5642],{"href":4981,"rel":5641},[33],"Cloudflare Radar",[981,5644,5645,5648,5649],{},[21,5646,5647],{},"ARIN — IPv4 Waiting List Distribution",", July 2, 2026. ",[29,5650,5652],{"href":5498,"rel":5651},[33],"ARIN IPv4 Waiting List Distribution",[1067,5654,5655],{},"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 .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":185,"searchDepth":311,"depth":311,"links":5657},[5658,5659,5660,5661,5662,5663,5664,5665,5666,5667,5668,5669,5670,5671],{"id":4942,"depth":311,"text":4943},{"id":1151,"depth":311,"text":1152},{"id":4993,"depth":311,"text":4994},{"id":5106,"depth":311,"text":5107},{"id":5199,"depth":311,"text":5200},{"id":5235,"depth":311,"text":5236},{"id":5288,"depth":311,"text":5289},{"id":5332,"depth":311,"text":5333},{"id":5352,"depth":311,"text":5353},{"id":4701,"depth":311,"text":4702},{"id":886,"depth":311,"text":887},{"id":906,"depth":311,"text":907},{"id":959,"depth":311,"text":960},{"id":975,"depth":311,"text":976},"Understand IPv4 vs IPv6 for modern websites, including DNS, dual-stack hosting, performance, SEO implications, testing, and deployment best practices.","\u002Fipv4-vs-ipv6.png","Image of IPv6 and IPv6",{},"\u002Fblog\u002Fen\u002Fipv4-vs-ipv6",{"title":4937,"description":5672},"blog\u002Fen\u002Fipv4-vs-ipv6","ipv4-vs-ipv6.md","71QWXD9OPDjblsbzNeVafH0MAw0RPrvR6Mm2yk3SMcY",{"id":5682,"title":5683,"author":7,"body":5684,"category":4083,"description":6920,"draft":1097,"extension":1098,"featured":1099,"image":6921,"imageAlt":6922,"locale":1102,"meta":6923,"navigation":1099,"path":6924,"publishedAt":6925,"seo":6926,"slug":6927,"stem":6928,"translationKey":6929,"updatedAt":6925,"__hash__":6930},"blog\u002Fblog\u002Fen\u002Fcsp-guide.md","Content Security Policy (CSP): Practical Engineering Guide",{"type":9,"value":5685,"toc":6899},[5686,5690,5698,5709,5713,5720,5731,5738,5741,5871,5898,5902,5905,5936,5939,5942,5947,5950,5955,5958,5964,5967,5976,5988,5992,5995,6020,6026,6029,6063,6066,6075,6078,6086,6089,6093,6096,6106,6112,6121,6124,6134,6137,6145,6148,6151,6154,6163,6170,6172,6181,6183,6214,6221,6242,6245,6249,6254,6256,6313,6316,6328,6334,6337,6344,6347,6356,6359,6362,6393,6396,6484,6502,6511,6515,6518,6521,6547,6554,6557,6562,6565,6569,6580,6612,6627,6630,6637,6640,6676,6679,6693,6697,6711,6717,6719,6722,6737,6740,6743,6745,6749,6755,6762,6767,6771,6777,6781,6784,6788,6791,6793,6796,6799,6801,6896],[12,5687,5689],{"id":5688},"content-security-policy-a-practical-engineering-guide","Content Security Policy: A Practical Engineering Guide",[17,5691,5692,5693,35],{},"Content Security Policy (CSP) is a browser-enforced security mechanism that lets a website define which resources may load or execute and which security-sensitive behaviors are permitted. Its most important practical use is reducing the damage caused by cross-site scripting (XSS): even if malicious HTML reaches a page, a strong CSP can prevent the injected JavaScript from executing. CSP Level 3 is the current W3C specification line; as of September 2026, it remains a Working Draft, with the current W3C draft dated August 13, 2026. (",[29,5694,5697],{"href":5695,"rel":5696},"https:\u002F\u002Fwww.w3.org\u002FTR\u002FCSP\u002Fall\u002F?utm_source=chatgpt.com",[33],"w3.org",[17,5699,5700,5701,5704,5705,35],{},"CSP should not be treated as a replacement for proper escaping, sanitization, secure templating, or fixing XSS vulnerabilities. It is ",[21,5702,5703],{},"defense in depth",": an additional enforcement layer provided by the browser. (",[29,5706,34],{"href":5707,"rel":5708},"https:\u002F\u002Fweb.dev\u002Farticles\u002Fstrict-csp?utm_source=chatgpt.com",[33],[12,5710,5712],{"id":5711},"what-is-csp","What Is CSP?",[17,5714,5715,5716,5719],{},"A Content Security Policy is usually sent through the HTTP ",[129,5717,5718],{},"Content-Security-Policy"," response header:",[179,5721,5725],{"className":5722,"code":5723,"language":5724,"meta":185,"style":185},"language-http shiki shiki-themes github-light github-dark","Content-Security-Policy: default-src 'self'\n","http",[129,5726,5727],{"__ignoreMap":185},[161,5728,5729],{"class":299,"line":300},[161,5730,5723],{},[17,5732,5733,5734,5737],{},"This tells the browser that resources governed by ",[129,5735,5736],{},"default-src"," should normally come from the same origin as the page.",[17,5739,5740],{},"A policy can contain many directives, each controlling a different capability:",[69,5742,5743,5753],{},[72,5744,5745],{},[75,5746,5747,5750],{},[78,5748,5749],{},"Directive",[78,5751,5752],{},"Controls",[85,5754,5755,5765,5775,5784,5797,5807,5817,5827,5837,5851,5861],{},[75,5756,5757,5762],{},[90,5758,5759],{},[129,5760,5761],{},"script-src",[90,5763,5764],{},"JavaScript execution and loading",[75,5766,5767,5772],{},[90,5768,5769],{},[129,5770,5771],{},"style-src",[90,5773,5774],{},"CSS loading and inline styles",[75,5776,5777,5782],{},[90,5778,5779],{},[129,5780,5781],{},"img-src",[90,5783,2914],{},[75,5785,5786,5791],{},[90,5787,5788],{},[129,5789,5790],{},"connect-src",[90,5792,5793,5796],{},[129,5794,5795],{},"fetch()",", XHR, WebSocket and similar connections",[75,5798,5799,5804],{},[90,5800,5801],{},[129,5802,5803],{},"font-src",[90,5805,5806],{},"Fonts",[75,5808,5809,5814],{},[90,5810,5811],{},[129,5812,5813],{},"frame-src",[90,5815,5816],{},"Frames the page may load",[75,5818,5819,5824],{},[90,5820,5821],{},[129,5822,5823],{},"worker-src",[90,5825,5826],{},"Workers and service workers",[75,5828,5829,5834],{},[90,5830,5831],{},[129,5832,5833],{},"object-src",[90,5835,5836],{},"Plugin\u002Fobject resources",[75,5838,5839,5844],{},[90,5840,5841],{},[129,5842,5843],{},"base-uri",[90,5845,5846,5847,5850],{},"Allowed ",[129,5848,5849],{},"\u003Cbase>"," URLs",[75,5852,5853,5858],{},[90,5854,5855],{},[129,5856,5857],{},"form-action",[90,5859,5860],{},"Form submission destinations",[75,5862,5863,5868],{},[90,5864,5865],{},[129,5866,5867],{},"frame-ancestors",[90,5869,5870],{},"Sites allowed to embed the page",[17,5872,5873,5875,5876,5878,5879,5881,5882,5884,5885,513,5887,520,5889,5891,5892,239,5894,35],{},[129,5874,5736],{}," acts as a fallback for many fetch directives. For example, if ",[129,5877,5781],{}," is absent, images can fall back to ",[129,5880,5736],{},". This does ",[21,5883,151],{}," apply universally: ",[129,5886,5867],{},[129,5888,5857],{},[129,5890,5843],{},", for example, do not inherit from ",[129,5893,5736],{},[29,5895,5697],{"href":5896,"rel":5897},"https:\u002F\u002Fwww.w3.org\u002FTR\u002FCSP\u002F?utm_source=chatgpt.com",[33],[12,5899,5901],{"id":5900},"why-csp-matters","Why CSP Matters",[17,5903,5904],{},"Consider a vulnerable page that accidentally renders attacker-controlled HTML:",[179,5906,5908],{"className":292,"code":5907,"language":294,"meta":185,"style":185},"\u003Cscript>\n  stealSession();\n\u003C\u002Fscript>\n",[129,5909,5910,5919,5927],{"__ignoreMap":185},[161,5911,5912,5914,5917],{"class":299,"line":300},[161,5913,304],{"class":303},[161,5915,5916],{"class":307},"script",[161,5918,361],{"class":303},[161,5920,5921,5924],{"class":299,"line":311},[161,5922,5923],{"class":314},"  stealSession",[161,5925,5926],{"class":303},"();\n",[161,5928,5929,5932,5934],{"class":299,"line":325},[161,5930,5931],{"class":303},"\u003C\u002F",[161,5933,5916],{"class":307},[161,5935,361],{"class":303},[17,5937,5938],{},"Without additional protection, the browser may execute it.",[17,5940,5941],{},"A strong CSP changes the question from:",[1501,5943,5944],{},[17,5945,5946],{},"“Is this valid JavaScript?”",[17,5948,5949],{},"to:",[1501,5951,5952],{},[17,5953,5954],{},"“Has this page explicitly authorized this JavaScript?”",[17,5956,5957],{},"That distinction is why CSP can materially reduce the impact of many XSS vulnerabilities.",[17,5959,5960,5961,174],{},"The difficult part is deciding ",[21,5962,5963],{},"how scripts become trusted",[17,5965,5966],{},"Older CSP configurations commonly relied on domain allowlists:",[179,5968,5970],{"className":5722,"code":5969,"language":5724,"meta":185,"style":185},"script-src 'self' https:\u002F\u002Fcdn.example.com\n",[129,5971,5972],{"__ignoreMap":185},[161,5973,5974],{"class":299,"line":300},[161,5975,5969],{},[17,5977,5978,5979,5982,5983,35],{},"This is better than allowing arbitrary scripts, but large host-based allowlists can become difficult to reason about and may contain origins that themselves provide ways to execute attacker-controlled code. Modern CSP guidance therefore favors nonce- or hash-based ",[21,5980,5981],{},"strict CSP"," for script execution. (",[29,5984,5987],{"href":5985,"rel":5986},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FHTTP\u002FGuides\u002FCSP?utm_source=chatgpt.com",[33],"developer.mozilla.org",[12,5989,5991],{"id":5990},"strict-csp","Strict CSP",[17,5993,5994],{},"A basic nonce-based strict policy can look like this:",[179,5996,5998],{"className":5722,"code":5997,"language":5724,"meta":185,"style":185},"Content-Security-Policy:\n  script-src 'nonce-RANDOM_VALUE' 'strict-dynamic';\n  object-src 'none';\n  base-uri 'none';\n",[129,5999,6000,6005,6010,6015],{"__ignoreMap":185},[161,6001,6002],{"class":299,"line":300},[161,6003,6004],{},"Content-Security-Policy:\n",[161,6006,6007],{"class":299,"line":311},[161,6008,6009],{},"  script-src 'nonce-RANDOM_VALUE' 'strict-dynamic';\n",[161,6011,6012],{"class":299,"line":325},[161,6013,6014],{},"  object-src 'none';\n",[161,6016,6017],{"class":299,"line":336},[161,6018,6019],{},"  base-uri 'none';\n",[17,6021,6022,6023,174],{},"The important part is the ",[21,6024,6025],{},"nonce",[17,6027,6028],{},"The server generates a fresh unpredictable value for each response:",[179,6030,6032],{"className":292,"code":6031,"language":294,"meta":185,"style":185},"\u003Cscript nonce=\"RANDOM_VALUE\" src=\"\u002Fapp.js\">\u003C\u002Fscript>\n",[129,6033,6034],{"__ignoreMap":185},[161,6035,6036,6038,6040,6043,6045,6048,6051,6053,6056,6059,6061],{"class":299,"line":300},[161,6037,304],{"class":303},[161,6039,5916],{"class":307},[161,6041,6042],{"class":314}," nonce",[161,6044,318],{"class":303},[161,6046,6047],{"class":321},"\"RANDOM_VALUE\"",[161,6049,6050],{"class":314}," src",[161,6052,318],{"class":303},[161,6054,6055],{"class":321},"\"\u002Fapp.js\"",[161,6057,6058],{"class":303},">\u003C\u002F",[161,6060,5916],{"class":307},[161,6062,361],{"class":303},[17,6064,6065],{},"The same value appears in the CSP header:",[179,6067,6069],{"className":5722,"code":6068,"language":5724,"meta":185,"style":185},"script-src 'nonce-RANDOM_VALUE'\n",[129,6070,6071],{"__ignoreMap":185},[161,6072,6073],{"class":299,"line":300},[161,6074,6068],{},[17,6076,6077],{},"The browser executes the script because the values match. An injected script without the correct nonce is blocked.",[17,6079,6080,6081,239,6083,35],{},"For this design to provide meaningful protection, the nonce must be unpredictable and regenerated for every response. web.dev recommends a cryptographically strong value, ideally at least ",[21,6082,5022],{},[29,6084,34],{"href":5707,"rel":6085},[33],[17,6087,6088],{},"Do not generate one nonce during application startup and reuse it indefinitely. A nonce that remains constant stops functioning as a meaningful one-time authorization token.",[12,6090,6092],{"id":6091},"nonces-vs-hashes","Nonces vs Hashes",[17,6094,6095],{},"Nonces and hashes solve similar problems but suit different architectures.",[17,6097,6098,6101,6102,6105],{},[21,6099,6100],{},"Nonces are usually easier for dynamically rendered HTML."," The server generates a fresh value during each request and injects it into approved ",[129,6103,6104],{},"\u003Cscript>"," elements.",[17,6107,6108,6111],{},[21,6109,6110],{},"Hashes work well for stable or statically generated HTML."," Instead of generating a random value, you calculate a cryptographic hash of an authorized script:",[179,6113,6115],{"className":5722,"code":6114,"language":5724,"meta":185,"style":185},"script-src 'sha256-AbCdEf...'\n",[129,6116,6117],{"__ignoreMap":185},[161,6118,6119],{"class":299,"line":300},[161,6120,6114],{},[17,6122,6123],{},"The browser hashes the script and executes it only if the value matches the policy.",[17,6125,6126,6127,6130,6131,35],{},"CSP supports SHA-256, SHA-384, and SHA-512 hash source expressions. Changing even a small part of an inline script changes its hash, so build systems using hash-based CSP generally need to regenerate the policy when script content changes. MDN also documents additional requirements when hashes are used to authorize external scripts, including the corresponding ",[129,6128,6129],{},"integrity"," attribute. (",[29,6132,5987],{"href":5985,"rel":6133},[33],[17,6135,6136],{},"For an SSR application, a nonce is often the simpler engineering choice. For static HTML where per-response mutation is undesirable, hashes may fit better.",[12,6138,6140,6141,6144],{"id":6139},"what-strict-dynamic-does","What ",[129,6142,6143],{},"strict-dynamic"," Does",[17,6146,6147],{},"Modern applications frequently have a trusted bootstrap script that loads other scripts dynamically.",[17,6149,6150],{},"Without additional handling, those secondary scripts may be blocked.",[17,6152,6153],{},"Adding:",[179,6155,6157],{"className":5722,"code":6156,"language":5724,"meta":185,"style":185},"'strict-dynamic'\n",[129,6158,6159],{"__ignoreMap":185},[161,6160,6161],{"class":299,"line":300},[161,6162,6156],{},[17,6164,6165,6166,35],{},"allows trust established by a valid nonce or hash to propagate to scripts loaded by that trusted script. (",[29,6167,5987],{"href":6168,"rel":6169},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FHTTP\u002FReference\u002FHeaders\u002FContent-Security-Policy\u002Fscript-src?utm_source=chatgpt.com",[33],[17,6171,1399],{},[179,6173,6175],{"className":5722,"code":6174,"language":5724,"meta":185,"style":185},"script-src 'nonce-abc123' 'strict-dynamic'\n",[129,6176,6177],{"__ignoreMap":185},[161,6178,6179],{"class":299,"line":300},[161,6180,6174],{},[17,6182,4469],{},[179,6184,6186],{"className":292,"code":6185,"language":294,"meta":185,"style":185},"\u003Cscript nonce=\"abc123\" src=\"\u002Fbootstrap.js\">\u003C\u002Fscript>\n",[129,6187,6188],{"__ignoreMap":185},[161,6189,6190,6192,6194,6196,6198,6201,6203,6205,6208,6210,6212],{"class":299,"line":300},[161,6191,304],{"class":303},[161,6193,5916],{"class":307},[161,6195,6042],{"class":314},[161,6197,318],{"class":303},[161,6199,6200],{"class":321},"\"abc123\"",[161,6202,6050],{"class":314},[161,6204,318],{"class":303},[161,6206,6207],{"class":321},"\"\u002Fbootstrap.js\"",[161,6209,6058],{"class":303},[161,6211,5916],{"class":307},[161,6213,361],{"class":303},[17,6215,6216,6217,6220],{},"permit ",[129,6218,6219],{},"\u002Fbootstrap.js"," to execute and can allow scripts that it subsequently creates and loads.",[17,6222,6223,6224,513,6227,6230,6231,6233,6234,6237,6238,35],{},"There is an important consequence: in browsers applying CSP Level 3 semantics, host expressions such as ",[129,6225,6226],{},"'self'",[129,6228,6229],{},"https:"," and explicit host allowlists in that ",[129,6232,5761],{}," directive are ignored when ",[129,6235,6236],{},"'strict-dynamic'"," is active with valid nonce\u002Fhash trust. That makes the trusted script chain itself an important security boundary. (",[29,6239,5987],{"href":6240,"rel":6241},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FHTTP\u002FReference\u002FHeaders\u002FContent-Security-Policy?utm_source=chatgpt.com",[33],[17,6243,6244],{},"If trusted JavaScript dynamically constructs script URLs from attacker-controlled input, CSP cannot automatically repair that design.",[12,6246,6248],{"id":6247},"a-practical-policy","A Practical Policy",[17,6250,6251,6252,174],{},"A real application usually needs more than ",[129,6253,5761],{},[17,6255,1399],{},[179,6257,6259],{"className":5722,"code":6258,"language":5724,"meta":185,"style":185},"Content-Security-Policy:\n  default-src 'self';\n  script-src 'nonce-{NONCE}' 'strict-dynamic';\n  style-src 'self';\n  img-src 'self' data: https:;\n  font-src 'self';\n  connect-src 'self' https:\u002F\u002Fapi.example.com;\n  object-src 'none';\n  base-uri 'none';\n  form-action 'self';\n  frame-ancestors 'none';\n",[129,6260,6261,6265,6270,6275,6280,6285,6290,6295,6299,6303,6308],{"__ignoreMap":185},[161,6262,6263],{"class":299,"line":300},[161,6264,6004],{},[161,6266,6267],{"class":299,"line":311},[161,6268,6269],{},"  default-src 'self';\n",[161,6271,6272],{"class":299,"line":325},[161,6273,6274],{},"  script-src 'nonce-{NONCE}' 'strict-dynamic';\n",[161,6276,6277],{"class":299,"line":336},[161,6278,6279],{},"  style-src 'self';\n",[161,6281,6282],{"class":299,"line":347},[161,6283,6284],{},"  img-src 'self' data: https:;\n",[161,6286,6287],{"class":299,"line":358},[161,6288,6289],{},"  font-src 'self';\n",[161,6291,6292],{"class":299,"line":809},[161,6293,6294],{},"  connect-src 'self' https:\u002F\u002Fapi.example.com;\n",[161,6296,6297],{"class":299,"line":821},[161,6298,6014],{},[161,6300,6301],{"class":299,"line":833},[161,6302,6019],{},[161,6304,6305],{"class":299,"line":842},[161,6306,6307],{},"  form-action 'self';\n",[161,6309,6310],{"class":299,"line":3064},[161,6311,6312],{},"  frame-ancestors 'none';\n",[17,6314,6315],{},"This should be treated as an architectural example, not a policy to paste blindly into every site.",[17,6317,6318,6321,6322,6324,6325,35],{},[129,6319,6320],{},"frame-ancestors 'none'",", for example, prevents other pages from embedding the document and can help defend against UI-redressing attacks. But an application intentionally embedded by customers may instead require specific parent origins. The directive does not inherit from ",[129,6323,5736],{},", so it must be declared separately when required. (",[29,6326,5697],{"href":5896,"rel":6327},[33],[17,6329,6330,6331,6333],{},"Similarly, ",[129,6332,5790],{}," must include APIs, WebSocket endpoints or other network destinations actually used by the application.",[17,6335,6336],{},"The goal is not to create the longest possible CSP. It is to describe the application's legitimate behavior as narrowly and accurately as practical.",[12,6338,6340,6341],{"id":6339},"avoid-unsafe-inline","Avoid ",[129,6342,6343],{},"unsafe-inline",[17,6345,6346],{},"A common response to CSP errors is:",[179,6348,6350],{"className":5722,"code":6349,"language":5724,"meta":185,"style":185},"script-src 'self' 'unsafe-inline'\n",[129,6351,6352],{"__ignoreMap":185},[161,6353,6354],{"class":299,"line":300},[161,6355,6349],{},[17,6357,6358],{},"That frequently defeats one of CSP's most valuable protections because arbitrary inline JavaScript may execute.",[17,6360,6361],{},"A better approach is to refactor patterns such as:",[179,6363,6365],{"className":292,"code":6364,"language":294,"meta":185,"style":185},"\u003Cbutton onclick=\"save()\">Save\u003C\u002Fbutton>\n",[129,6366,6367],{"__ignoreMap":185},[161,6368,6369,6371,6374,6376,6378,6380,6383,6386,6389,6391],{"class":299,"line":300},[161,6370,304],{"class":303},[161,6372,6373],{"class":307},"button",[161,6375,2308],{"class":314},[161,6377,318],{"class":303},[161,6379,2313],{"class":321},[161,6381,6382],{"class":314},"save",[161,6384,6385],{"class":321},"()\"",[161,6387,6388],{"class":303},">Save\u003C\u002F",[161,6390,6373],{"class":307},[161,6392,361],{"class":303},[17,6394,6395],{},"into JavaScript event registration:",[179,6397,6399],{"className":292,"code":6398,"language":294,"meta":185,"style":185},"\u003Cbutton id=\"save\">Save\u003C\u002Fbutton>\n\n\u003Cscript nonce=\"{NONCE}\">\ndocument\n  .getElementById('save')\n  .addEventListener('click', save);\n\u003C\u002Fscript>\n",[129,6400,6401,6421,6425,6440,6445,6461,6476],{"__ignoreMap":185},[161,6402,6403,6405,6407,6410,6412,6415,6417,6419],{"class":299,"line":300},[161,6404,304],{"class":303},[161,6406,6373],{"class":307},[161,6408,6409],{"class":314}," id",[161,6411,318],{"class":303},[161,6413,6414],{"class":321},"\"save\"",[161,6416,6388],{"class":303},[161,6418,6373],{"class":307},[161,6420,361],{"class":303},[161,6422,6423],{"class":299,"line":311},[161,6424,3024],{"emptyLinePlaceholder":1099},[161,6426,6427,6429,6431,6433,6435,6438],{"class":299,"line":325},[161,6428,304],{"class":303},[161,6430,5916],{"class":307},[161,6432,6042],{"class":314},[161,6434,318],{"class":303},[161,6436,6437],{"class":321},"\"{NONCE}\"",[161,6439,361],{"class":303},[161,6441,6442],{"class":299,"line":336},[161,6443,6444],{"class":303},"document\n",[161,6446,6447,6450,6453,6455,6458],{"class":299,"line":347},[161,6448,6449],{"class":303},"  .",[161,6451,6452],{"class":314},"getElementById",[161,6454,573],{"class":303},[161,6456,6457],{"class":321},"'save'",[161,6459,6460],{"class":303},")\n",[161,6462,6463,6465,6468,6470,6473],{"class":299,"line":358},[161,6464,6449],{"class":303},[161,6466,6467],{"class":314},"addEventListener",[161,6469,573],{"class":303},[161,6471,6472],{"class":321},"'click'",[161,6474,6475],{"class":303},", save);\n",[161,6477,6478,6480,6482],{"class":299,"line":809},[161,6479,5931],{"class":303},[161,6481,5916],{"class":307},[161,6483,361],{"class":303},[17,6485,6486,6487,6490,6491,6494,6495,6498,6499,35],{},"Strict CSP also normally prevents JavaScript URLs such as ",[129,6488,6489],{},"href=\"javascript:...\""," and blocks string-to-code execution such as ",[129,6492,6493],{},"eval()"," unless ",[129,6496,6497],{},"'unsafe-eval'"," is explicitly permitted. (",[29,6500,34],{"href":5707,"rel":6501},[33],[17,6503,6504,6505,624,6508,6510],{},"Adding ",[129,6506,6507],{},"'unsafe-inline'",[129,6509,6497],{}," simply to silence CSP errors should therefore trigger investigation rather than becoming the default fix.",[12,6512,6514],{"id":6513},"roll-out-with-report-only","Roll Out With Report-Only",[17,6516,6517],{},"Deploying a strict policy directly to production can break analytics, payment widgets, authentication flows, customer-support tools, API calls or application code that was never designed for CSP.",[17,6519,6520],{},"Use:",[179,6522,6524],{"className":5722,"code":6523,"language":5724,"meta":185,"style":185},"Content-Security-Policy-Report-Only:\n  default-src 'self';\n  script-src 'nonce-{NONCE}' 'strict-dynamic';\n  object-src 'none';\n  base-uri 'none';\n",[129,6525,6526,6531,6535,6539,6543],{"__ignoreMap":185},[161,6527,6528],{"class":299,"line":300},[161,6529,6530],{},"Content-Security-Policy-Report-Only:\n",[161,6532,6533],{"class":299,"line":311},[161,6534,6269],{},[161,6536,6537],{"class":299,"line":325},[161,6538,6274],{},[161,6540,6541],{"class":299,"line":336},[161,6542,6014],{},[161,6544,6545],{"class":299,"line":347},[161,6546,6019],{},[17,6548,6549,6550,35],{},"Report-only mode evaluates the policy without enforcing the blocks. Browser console messages and CSP reports reveal what the proposed policy would reject. (",[29,6551,5987],{"href":6552,"rel":6553},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FSecurity\u002FPractical_implementation_guides\u002FCSP?utm_source=chatgpt.com",[33],[17,6555,6556],{},"A practical rollout becomes:",[17,6558,6559],{},[21,6560,6561],{},"Observe → classify violations → fix legitimate dependencies → tighten the policy → enforce → continue monitoring.",[17,6563,6564],{},"Do not automatically add every reported hostname to an allowlist. A violation may reveal obsolete code, an unexpected third-party dependency, a browser extension, an attempted injection or a genuine configuration requirement.",[12,6566,6568],{"id":6567},"csp-reporting","CSP Reporting",[17,6570,6571,6572,6575,6576,6579],{},"Modern CSP reporting uses the Reporting API with a ",[129,6573,6574],{},"Reporting-Endpoints"," header and the CSP ",[129,6577,6578],{},"report-to"," directive:",[179,6581,6583],{"className":5722,"code":6582,"language":5724,"meta":185,"style":185},"Reporting-Endpoints:\n  csp=\"https:\u002F\u002Fexample.com\u002Fcsp-reports\"\n\nContent-Security-Policy:\n  default-src 'self';\n  report-to csp;\n",[129,6584,6585,6590,6595,6599,6603,6607],{"__ignoreMap":185},[161,6586,6587],{"class":299,"line":300},[161,6588,6589],{},"Reporting-Endpoints:\n",[161,6591,6592],{"class":299,"line":311},[161,6593,6594],{},"  csp=\"https:\u002F\u002Fexample.com\u002Fcsp-reports\"\n",[161,6596,6597],{"class":299,"line":325},[161,6598,3024],{"emptyLinePlaceholder":1099},[161,6600,6601],{"class":299,"line":336},[161,6602,6004],{},[161,6604,6605],{"class":299,"line":347},[161,6606,6269],{},[161,6608,6609],{"class":299,"line":358},[161,6610,6611],{},"  report-to csp;\n",[17,6613,6614,6617,6618,6620,6621,6623,6624,35],{},[129,6615,6616],{},"report-uri"," is deprecated by CSP Level 3 in favor of ",[129,6619,6578],{},". However, current MDN guidance still shows both where compatibility with browsers lacking complete ",[129,6622,6578],{}," support is required. (",[29,6625,5697],{"href":5896,"rel":6626},[33],[17,6628,6629],{},"Reports should also be treated as untrusted input. Logging infrastructure should validate, rate-limit and safely store them rather than assuming every report is trustworthy.",[12,6631,6633,6634],{"id":6632},"header-vs-meta","Header vs ",[129,6635,6636],{},"\u003Cmeta>",[17,6638,6639],{},"CSP can also be delivered through:",[179,6641,6643],{"className":292,"code":6642,"language":294,"meta":185,"style":185},"\u003Cmeta\n  http-equiv=\"Content-Security-Policy\"\n  content=\"default-src 'self'\"\n>\n",[129,6644,6645,6652,6662,6672],{"__ignoreMap":185},[161,6646,6647,6649],{"class":299,"line":300},[161,6648,304],{"class":303},[161,6650,6651],{"class":307},"meta\n",[161,6653,6654,6657,6659],{"class":299,"line":311},[161,6655,6656],{"class":314},"  http-equiv",[161,6658,318],{"class":303},[161,6660,6661],{"class":321},"\"Content-Security-Policy\"\n",[161,6663,6664,6667,6669],{"class":299,"line":325},[161,6665,6666],{"class":314},"  content",[161,6668,318],{"class":303},[161,6670,6671],{"class":321},"\"default-src 'self'\"\n",[161,6673,6674],{"class":299,"line":336},[161,6675,361],{"class":303},[17,6677,6678],{},"but an HTTP header is generally preferable for production.",[17,6680,6681,6682,513,6684,520,6686,6689,6690,35],{},"Meta-delivered CSP has important limitations. It cannot provide report-only policies, and CSP Level 3 specifies that directives including ",[129,6683,5867],{},[129,6685,6616],{},[129,6687,6688],{},"sandbox"," are not supported through the meta mechanism. A meta policy also cannot retroactively control resources processed before the browser encounters it. (",[29,6691,5697],{"href":5896,"rel":6692},[33],[12,6694,6696],{"id":6695},"common-csp-mistakes","Common CSP Mistakes",[17,6698,6699,6700,6702,6703,6706,6707,420,6709,174],{},"The most common engineering mistakes are not syntax errors but trust-model errors: treating a huge hostname list as strong protection, reusing nonce values, automatically adding domains after every violation, enabling ",[129,6701,6507],{}," to make errors disappear, or assuming ",[129,6704,6705],{},"default-src 'none'"," also configures directives such as ",[129,6708,5867],{},[129,6710,5857],{},[17,6712,6713,6714,35],{},"Another subtle mistake is delivering multiple CSP policies and expecting the second one to loosen the first. Multiple enforced policies are applied together: a request must satisfy all applicable policies. A second header cannot simply override an earlier restrictive policy. (",[29,6715,5697],{"href":5896,"rel":6716},[33],[12,6718,887],{"id":886},[17,6720,6721],{},"Start from the application's real resource graph rather than copying a generic CSP generator result.",[17,6723,6724,6725,6727,6728,513,6730,513,6732,520,6734,6736],{},"For dynamically rendered applications, prefer a properly generated per-response nonce and a strict ",[129,6726,5761],{},". For static applications, investigate a hash-based policy. Explicitly define security-sensitive directives such as ",[129,6729,5833],{},[129,6731,5843],{},[129,6733,5857],{},[129,6735,5867],{}," according to the product's actual requirements.",[17,6738,6739],{},"Deploy the proposed policy in report-only mode first, investigate violations, remove incompatible JavaScript patterns, then enable enforcement.",[17,6741,6742],{},"Most importantly, keep CSP in the correct place in the security model: it is a browser-enforced containment mechanism, not permission to leave XSS vulnerabilities unfixed.",[12,6744,907],{"id":906},[909,6746,6748],{"id":6747},"does-csp-prevent-all-xss","Does CSP prevent all XSS?",[17,6750,6751,6752,35],{},"No. CSP can substantially restrict script execution and reduce the impact of many XSS vulnerabilities, but bypasses remain possible when trusted scripts themselves expose exploitable behavior. Input handling, context-aware output encoding, sanitization and secure application design remain necessary. (",[29,6753,34],{"href":5707,"rel":6754},[33],[909,6756,6758,6759,6761],{"id":6757},"should-every-website-use-default-src-none","Should every website use ",[129,6760,6705],{},"?",[17,6763,6764,6765,174],{},"Not automatically. It is a strong starting posture because resources must then be deliberately permitted, but the resulting directives still need to match the application's architecture. Some directives do not inherit from ",[129,6766,5736],{},[909,6768,6770],{"id":6769},"should-i-use-a-nonce-or-a-hash","Should I use a nonce or a hash?",[17,6772,6773,6774,35],{},"Use a nonce when the server can generate and modify HTML for every response. Hashes are often more practical for stable static HTML. (",[29,6775,5987],{"href":5985,"rel":6776},[33],[909,6778,6780],{"id":6779},"can-csp-be-configured-in-nginx","Can CSP be configured in Nginx?",[17,6782,6783],{},"Yes. Nginx can send CSP headers, but nonce-based CSP usually requires coordination with the application or rendering layer because a fresh nonce must appear in both the response header and authorized HTML.",[909,6785,6787],{"id":6786},"how-do-i-know-whether-csp-works","How do I know whether CSP works?",[17,6789,6790],{},"Inspect the actual response headers, test expected application flows, watch browser DevTools for CSP violations, collect reports during report-only deployment, deliberately test prohibited resources, and repeat those tests after enforcement.",[12,6792,960],{"id":959},[17,6794,6795],{},"A useful CSP is not merely a list of trusted domains. It is an explicit browser-enforced trust model.",[17,6797,6798],{},"The strongest practical approach for many modern applications is a strict policy based on cryptographic nonces or hashes, supported by directives that constrain framing, form submissions, plugins and other resources. Deploy it gradually, measure violations before enforcement, and treat every exception as an architectural decision rather than another hostname to append.",[12,6800,976],{"id":975},[978,6802,6803,6816,6829,6841,6853,6865,6881],{},[981,6804,6805,6808,6809,6460,6812],{},[21,6806,6807],{},"W3C — Content Security Policy Level 3",", Working Draft, August 13, 2026. (",[29,6810,5697],{"href":5896,"rel":6811},[33],[29,6813,6815],{"href":5896,"rel":6814},[33],"W3C CSP Level 3 specification",[981,6817,6818,6821,6822,6460,6825],{},[21,6819,6820],{},"MDN Web Docs — Content Security Policy (CSP)",", accessed September 19, 2026. (",[29,6823,5987],{"href":5985,"rel":6824},[33],[29,6826,6828],{"href":5985,"rel":6827},[33],"MDN CSP Guide",[981,6830,6831,6821,6834,6460,6837],{},[21,6832,6833],{},"MDN Web Docs — Content-Security-Policy header",[29,6835,5987],{"href":6240,"rel":6836},[33],[29,6838,6840],{"href":6240,"rel":6839},[33],"MDN CSP Header Reference",[981,6842,6843,6821,6846,6460,6849],{},[21,6844,6845],{},"web.dev — Mitigate cross-site scripting (XSS) with a strict Content Security Policy (CSP)",[29,6847,34],{"href":5707,"rel":6848},[33],[29,6850,6852],{"href":5707,"rel":6851},[33],"web.dev Strict CSP Guide",[981,6854,6855,6821,6858,6460,6861],{},[21,6856,6857],{},"MDN Web Docs — Content Security Policy implementation",[29,6859,5987],{"href":6552,"rel":6860},[33],[29,6862,6864],{"href":6552,"rel":6863},[33],"MDN CSP Implementation Guide",[981,6866,6867,6821,6873,6460,6877],{},[21,6868,6869,6870,6872],{},"MDN Web Docs — ",[129,6871,5867],{}," directive",[29,6874,5987],{"href":6875,"rel":6876},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FHTTP\u002FReference\u002FHeaders\u002FContent-Security-Policy\u002Fframe-ancestors?utm_source=chatgpt.com",[33],[29,6878,6880],{"href":6875,"rel":6879},[33],"MDN frame-ancestors Reference",[981,6882,6883,6821,6888,6460,6892],{},[21,6884,6869,6885],{},[129,6886,6887],{},"Content-Security-Policy-Report-Only",[29,6889,5987],{"href":6890,"rel":6891},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FHTTP\u002FReference\u002FHeaders\u002FContent-Security-Policy-Report-Only?utm_source=chatgpt.com",[33],[29,6893,6895],{"href":6890,"rel":6894},[33],"MDN CSP Report-Only Reference",[1067,6897,6898],{},"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 .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":185,"searchDepth":311,"depth":311,"links":6900},[6901,6902,6903,6904,6905,6906,6908,6909,6911,6912,6913,6915,6916,6917,6918,6919],{"id":5688,"depth":311,"text":5689},{"id":5711,"depth":311,"text":5712},{"id":5900,"depth":311,"text":5901},{"id":5990,"depth":311,"text":5991},{"id":6091,"depth":311,"text":6092},{"id":6139,"depth":311,"text":6907},"What strict-dynamic Does",{"id":6247,"depth":311,"text":6248},{"id":6339,"depth":311,"text":6910},"Avoid unsafe-inline",{"id":6513,"depth":311,"text":6514},{"id":6567,"depth":311,"text":6568},{"id":6632,"depth":311,"text":6914},"Header vs \u003Cmeta>",{"id":6695,"depth":311,"text":6696},{"id":886,"depth":311,"text":887},{"id":906,"depth":311,"text":907},{"id":959,"depth":311,"text":960},{"id":975,"depth":311,"text":976},"Learn how Content Security Policy works, how strict CSP uses nonces and hashes, how to deploy it safely, diagnose violations, and avoid common CSP mistakes.","\u002Fcsp-guide.png","Image of CSP",{},"\u002Fblog\u002Fen\u002Fcsp-guide","2026-09-19",{"title":5683,"description":6920},"csp-guide","blog\u002Fen\u002Fcsp-guide","content-security-policy","8JqZxZsLmTafoA3nSncdbeBRdng4dtViqE3fp9iX5GY",{"id":6932,"title":6933,"author":7,"body":6934,"category":4083,"description":7653,"draft":1097,"extension":1098,"featured":1099,"image":7654,"imageAlt":7655,"locale":1102,"meta":7656,"navigation":1099,"path":7657,"publishedAt":6925,"seo":7658,"slug":7659,"stem":7660,"translationKey":7659,"updatedAt":6925,"__hash__":7661},"blog\u002Fblog\u002Fen\u002Fhsts-explained.md","HSTS Explained: Benefits, Risks and Safe Deployment",{"type":9,"value":6935,"toc":7636},[6936,6940,6943,6958,6968,6970,6973,6976,6985,6998,7001,7003,7070,7084,7088,7091,7097,7104,7107,7113,7116,7119,7124,7128,7131,7140,7149,7156,7159,7163,7166,7169,7175,7182,7190,7200,7210,7214,7217,7220,7229,7232,7235,7244,7247,7255,7261,7272,7276,7279,7287,7308,7311,7320,7329,7333,7336,7347,7368,7374,7378,7381,7395,7410,7413,7421,7427,7429,7435,7441,7456,7462,7464,7467,7479,7482,7484,7488,7491,7495,7501,7505,7508,7517,7523,7527,7533,7535,7538,7541,7550,7552,7634],[12,6937,6939],{"id":6938},"hsts-explained-security-benefit-and-deployment-risk","HSTS Explained: Security Benefit and Deployment Risk",[17,6941,6942],{},"HSTS is one of the simplest HTTP security mechanisms to configure—and one of the easiest to deploy too aggressively.",[17,6944,6945,6946,6949,6950,6953,6954,35],{},"HTTP Strict Transport Security, or ",[21,6947,6948],{},"HSTS",", tells a browser that a domain must be accessed only over HTTPS. Once the browser has learned that policy, an attempt to open ",[129,6951,6952],{},"http:\u002F\u002Fexample.com"," is upgraded to HTTPS before an insecure HTTP request is sent. HSTS also prevents users from bypassing certificate errors for that host. (",[29,6955,1486],{"href":6956,"rel":6957},"https:\u002F\u002Fwww.rfc-editor.org\u002Finfo\u002Frfc6797\u002F?utm_source=chatgpt.com",[33],[17,6959,6960,6961,513,6964,6967],{},"The security benefit is significant: HSTS reduces the opportunity for HTTPS downgrade and SSL-stripping attacks. The deployment risk is equally important: a long ",[129,6962,6963],{},"max-age",[129,6965,6966],{},"includeSubDomains",", or HSTS preloading can make misconfigured or HTTP-only hosts inaccessible until the underlying HTTPS problem is fixed.",[12,6969,1152],{"id":1151},[17,6971,6972],{},"HSTS is an HTTP response header that tells supporting browsers to use HTTPS for a domain for a specified period.",[17,6974,6975],{},"A typical policy looks like this:",[179,6977,6979],{"className":5722,"code":6978,"language":5724,"meta":185,"style":185},"Strict-Transport-Security: max-age=31536000; includeSubDomains\n",[129,6980,6981],{"__ignoreMap":185},[161,6982,6983],{"class":299,"line":300},[161,6984,6978],{},[17,6986,6987,6988,6991,6992,6994,6995,35],{},"Here, ",[129,6989,6990],{},"max-age=31536000"," means the browser remembers the HSTS policy for approximately one year. ",[129,6993,6966],{}," extends that policy to subdomains. Browsers only accept the HSTS header over a secure connection; an HSTS header received over plain HTTP is ignored. (",[29,6996,1486],{"href":6956,"rel":6997},[33],[17,6999,7000],{},"HSTS strengthens HTTPS deployment. It does not replace HTTPS, TLS certificates, redirects, or correct server configuration.",[12,7002,2081],{"id":2080},[69,7004,7005,7018],{},[72,7006,7007],{},[75,7008,7009,7012,7015],{},[78,7010,7011],{},"Feature",[78,7013,7014],{},"What It Does",[78,7016,7017],{},"Main Risk",[85,7019,7020,7032,7044,7057],{},[75,7021,7022,7026,7029],{},[90,7023,7024],{},[129,7025,6963],{},[90,7027,7028],{},"Stores the HSTS policy for a number of seconds",[90,7030,7031],{},"Mistakes can persist until the policy expires",[75,7033,7034,7038,7041],{},[90,7035,7036],{},[129,7037,6966],{},[90,7039,7040],{},"Extends HSTS to subdomains",[90,7042,7043],{},"HTTP-only subdomains can become inaccessible",[75,7045,7046,7051,7054],{},[90,7047,7048],{},[129,7049,7050],{},"preload",[90,7052,7053],{},"Signals intent to participate in browser preload programs",[90,7055,7056],{},"Creates a longer-term domain-wide commitment",[75,7058,7059,7064,7067],{},[90,7060,7061],{},[129,7062,7063],{},"max-age=0",[90,7065,7066],{},"Removes a dynamically learned HSTS policy",[90,7068,7069],{},"Browser must first reach the site securely to receive it",[17,7071,7072,7073,420,7075,7077,7078,7080,7081,35],{},"RFC 6797 defines ",[129,7074,6963],{},[129,7076,6966],{},". The ",[129,7079,7050],{}," mechanism is an additional browser ecosystem feature rather than part of the HSTS specification itself. (",[29,7082,1486],{"href":6956,"rel":7083},[33],[12,7085,7087],{"id":7086},"why-hsts-matters","Why HSTS Matters",[17,7089,7090],{},"Consider a website that redirects HTTP visitors to HTTPS:",[179,7092,7095],{"className":7093,"code":7094,"language":184,"meta":185},[182],"http:\u002F\u002Fexample.com\n        ↓\n301 redirect\n        ↓\nhttps:\u002F\u002Fexample.com\n",[129,7096,7094],{"__ignoreMap":185},[17,7098,7099,7100,35],{},"That redirect helps normal users reach HTTPS, but the initial HTTP request is still unencrypted. An attacker controlling the network could potentially interfere before the HTTPS connection is established. MDN describes this as the first-connection window in which SSL stripping remains possible. (",[29,7101,5987],{"href":7102,"rel":7103},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FSecurity\u002FDefenses\u002FTransport_Layer_Security?utm_source=chatgpt.com",[33],[17,7105,7106],{},"After a browser learns an HSTS policy, the sequence changes:",[179,7108,7111],{"className":7109,"code":7110,"language":184,"meta":185},[182],"User requests http:\u002F\u002Fexample.com\n        ↓\nBrowser sees stored HSTS policy\n        ↓\nBrowser changes request to HTTPS\n        ↓\nHTTPS connection\n",[129,7112,7110],{"__ignoreMap":185},[17,7114,7115],{},"The insecure request is avoided.",[17,7117,7118],{},"This distinction matters: an HTTP-to-HTTPS redirect happens after an HTTP request reaches the server, while HSTS can cause the browser to upgrade the request locally before sending it.",[17,7120,7121],{},[161,7122,7123],{},"INTERNAL LINK: How HTTPS and TLS Work",[12,7125,7127],{"id":7126},"how-hsts-works","How HSTS Works",[17,7129,7130],{},"When an HTTPS response contains:",[179,7132,7134],{"className":5722,"code":7133,"language":5724,"meta":185,"style":185},"Strict-Transport-Security: max-age=31536000\n",[129,7135,7136],{"__ignoreMap":185},[161,7137,7138],{"class":299,"line":300},[161,7139,7133],{},[17,7141,7142,7143,7145,7146,35],{},"the browser records that host as an HSTS host. The ",[129,7144,6963],{}," value acts as a time-to-live measured from when the browser receives the header. Future qualifying HTTP requests are upgraded to HTTPS. Each later HSTS response can refresh the expiration time. (",[29,7147,1486],{"href":6956,"rel":7148},[33],[17,7150,7151,7152,35],{},"There is another important behavior: TLS certificate errors become non-bypassable for an HSTS host. A user normally presented with a certificate warning may sometimes have an option to continue. HSTS intentionally removes that escape route because allowing the user through would undermine the security policy. (",[29,7153,5987],{"href":7154,"rel":7155},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FHTTP\u002FReference\u002FHeaders\u002FStrict-Transport-Security?utm_source=chatgpt.com",[33],[17,7157,7158],{},"That is useful during an attack—but painful during an operational mistake.",[12,7160,7162],{"id":7161},"the-deployment-risk","The Deployment Risk",[17,7164,7165],{},"The biggest HSTS mistake is treating the strongest configuration as the default starting point.",[17,7167,7168],{},"Imagine this domain structure:",[179,7170,7173],{"className":7171,"code":7172,"language":184,"meta":185},[182],"example.com\nwww.example.com\napi.example.com\nlegacy.example.com\ninternal.example.com\n",[129,7174,7172],{"__ignoreMap":185},[17,7176,7177,7178,7181],{},"Suppose ",[129,7179,7180],{},"legacy.example.com"," still works only over HTTP. Enabling this immediately on the parent domain would be dangerous:",[179,7183,7184],{"className":5722,"code":6978,"language":5724,"meta":185,"style":185},[129,7185,7186],{"__ignoreMap":185},[161,7187,7188],{"class":299,"line":300},[161,7189,6978],{},[17,7191,7192,7193,7196,7197,7199],{},"A browser that receives the policy can begin requiring HTTPS for descendants of ",[129,7194,7195],{},"example.com",". If ",[129,7198,7180],{}," cannot serve valid HTTPS, users may no longer be able to access it.",[17,7201,7202,7203,7205,7206,35],{},"This is why ",[129,7204,6966],{}," should be enabled only after the relevant subdomain inventory has been checked and HTTPS support has been verified. MDN specifically warns that the directive can disable access to subdomains that do not yet support HTTPS. (",[29,7207,5987],{"href":7208,"rel":7209},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FSecurity\u002FPractical_implementation_guides\u002FTLS?utm_source=chatgpt.com",[33],[12,7211,7213],{"id":7212},"safer-deployment","Safer Deployment",[17,7215,7216],{},"A safer rollout is progressive rather than immediate.",[17,7218,7219],{},"Start by confirming that the main domain works correctly over HTTPS. Then use a short HSTS lifetime, for example:",[179,7221,7223],{"className":5722,"code":7222,"language":5724,"meta":185,"style":185},"Strict-Transport-Security: max-age=300\n",[129,7224,7225],{"__ignoreMap":185},[161,7226,7227],{"class":299,"line":300},[161,7228,7222],{},[17,7230,7231],{},"This gives a five-minute policy window.",[17,7233,7234],{},"After confirming certificate renewal, redirects, CDN behavior, application routes, error responses and other infrastructure, increase the duration gradually:",[179,7236,7238],{"className":5722,"code":7237,"language":5724,"meta":185,"style":185},"Strict-Transport-Security: max-age=86400\n",[129,7239,7240],{"__ignoreMap":185},[161,7241,7242],{"class":299,"line":300},[161,7243,7237],{},[17,7245,7246],{},"Then, after further validation:",[179,7248,7249],{"className":5722,"code":7133,"language":5724,"meta":185,"style":185},[129,7250,7251],{"__ignoreMap":185},[161,7252,7253],{"class":299,"line":300},[161,7254,7133],{},[17,7256,7257,7258,7260],{},"Only add ",[129,7259,6966],{}," when HTTPS is reliably supported throughout the intended subdomain tree.",[17,7262,7263,7264,7266,7267,35],{},"This gradual increase is a SeoNest deployment recommendation rather than a requirement of RFC 6797. The current HSTS preload service also advises operators to ramp up ",[129,7265,6963],{}," before submitting a domain for preloading. (",[29,7268,7271],{"href":7269,"rel":7270},"https:\u002F\u002Fhstspreload.org\u002F?domain=pocketbase.io&utm_source=chatgpt.com",[33],"hstspreload.org",[12,7273,7275],{"id":7274},"hsts-preloading","HSTS Preloading",[17,7277,7278],{},"Normal HSTS has a limitation: a browser must usually receive the HSTS header before it knows the policy. A new browser profile therefore still has an initial connection window.",[17,7280,7281,7282,35],{},"HSTS preloading addresses this by shipping a list of HSTS domains with browsers. Chromium documents that Chrome maintains such a preload list and that other browsers use lists based on it. (",[29,7283,7286],{"href":7284,"rel":7285},"https:\u002F\u002Fwww.chromium.org\u002Fhsts\u002F?utm_source=chatgpt.com",[33],"chromium.org",[17,7288,7289,7290,7292,7293,513,7295,7297,7298,7300,7301,7304,7305,35],{},"The current submission requirements at ",[129,7291,7271],{}," include a valid certificate, HTTP-to-HTTPS redirection on the same host when HTTP is served, HTTPS support across subdomains, ",[129,7294,6966],{},[129,7296,7050],{},", and a ",[129,7299,6963],{}," of at least ",[129,7302,7303],{},"31536000"," seconds. (",[29,7306,7271],{"href":7269,"rel":7307},[33],[17,7309,7310],{},"A typical preload-ready header is:",[179,7312,7314],{"className":5722,"code":7313,"language":5724,"meta":185,"style":185},"Strict-Transport-Security: max-age=63072000; includeSubDomains; preload\n",[129,7315,7316],{"__ignoreMap":185},[161,7317,7318],{"class":299,"line":300},[161,7319,7313],{},[17,7321,7322,7323,7325,7326,35],{},"But preloading should not be enabled casually. The preload service explicitly warns projects not to enable ",[129,7324,7050],{}," by default and notes that removal can be slow. Its current guidance recommends HSTS itself while taking a more cautious position on HSTS preloading. (",[29,7327,7271],{"href":7269,"rel":7328},[33],[12,7330,7332],{"id":7331},"nginx-example","Nginx Example",[17,7334,7335],{},"For Nginx:",[179,7337,7341],{"className":7338,"code":7339,"language":7340,"meta":185,"style":185},"language-nginx shiki shiki-themes github-light github-dark","add_header Strict-Transport-Security \"max-age=31536000\" always;\n","nginx",[129,7342,7343],{"__ignoreMap":185},[161,7344,7345],{"class":299,"line":300},[161,7346,7339],{},[17,7348,190,7349,7351,7352,7355,7356,624,7359,7362,7363,35],{},[129,7350,3538],{}," parameter makes Nginx add the header regardless of response status. Nginx also has specific inheritance behavior for ",[129,7353,7354],{},"add_header",", so nested ",[129,7357,7358],{},"server",[129,7360,7361],{},"location"," configuration should be reviewed rather than assuming the header is inherited everywhere. (",[29,7364,7367],{"href":7365,"rel":7366},"https:\u002F\u002Fnginx.org\u002Fen\u002Fdocs\u002Fhttp\u002Fngx_http_headers_module.html?utm_source=chatgpt.com",[33],"nginx.org",[17,7369,7370,7371,35],{},"Do not send HSTS from an HTTP-only endpoint expecting the browser to trust it. Browsers intentionally ignore HSTS headers delivered over insecure HTTP. (",[29,7372,5987],{"href":7154,"rel":7373},[33],[12,7375,7377],{"id":7376},"verify-the-deployment","Verify the Deployment",[17,7379,7380],{},"Check the HTTPS response headers directly:",[179,7382,7384],{"className":3564,"code":7383,"language":3566,"meta":185,"style":185},"curl -I https:\u002F\u002Fexample.com\n",[129,7385,7386],{"__ignoreMap":185},[161,7387,7388,7390,7392],{"class":299,"line":300},[161,7389,4460],{"class":314},[161,7391,4463],{"class":384},[161,7393,7394],{"class":321}," https:\u002F\u002Fexample.com\n",[17,7396,7397,7400,7401,7404,7405,35],{},[129,7398,7399],{},"curl -I"," retrieves the HTTP response headers, allowing you to confirm that ",[129,7402,7403],{},"Strict-Transport-Security"," is actually present. (",[29,7406,7409],{"href":7407,"rel":7408},"https:\u002F\u002Fcurl.se\u002Fdocs\u002Ftutorial.html?utm_source=chatgpt.com",[33],"curl.se",[17,7411,7412],{},"Look for:",[179,7414,7415],{"className":5722,"code":7133,"language":5724,"meta":185,"style":185},[129,7416,7417],{"__ignoreMap":185},[161,7418,7419],{"class":299,"line":300},[161,7420,7133],{},[17,7422,7423,7424,7426],{},"Also test redirects, error responses, important subdomains and certificate validity. If you plan to use ",[129,7425,6966],{},", testing only the apex domain is not enough.",[12,7428,859],{"id":858},[17,7430,7431,7434],{},[21,7432,7433],{},"HSTS redirects HTTP to HTTPS on the server.","\nNot exactly. Once the policy is known, the browser can upgrade the request before making the insecure HTTP connection.",[17,7436,7437,7440],{},[21,7438,7439],{},"HSTS fixes an expired certificate.","\nNo. It makes certificate failures stricter. A broken certificate can therefore make an HSTS-protected site completely inaccessible until the certificate problem is fixed.",[17,7442,7443,7446,7447,7449,7450,7452,7453,35],{},[21,7444,7445],{},"Removing the header immediately disables HSTS.","\nNo. A previously stored policy remains active until its ",[129,7448,6963],{}," expires. Sending ",[129,7451,7063],{}," removes a dynamic HSTS policy when the browser successfully receives that response over HTTPS. (",[29,7454,1486],{"href":6956,"rel":7455},[33],[17,7457,7458,7461],{},[21,7459,7460],{},"Every HTTPS site should immediately use preload.","\nHSTS and HSTS preloading are separate decisions. Preloading creates a stronger operational commitment and should follow a deliberate review of the entire domain namespace.",[12,7463,887],{"id":886},[17,7465,7466],{},"Enable HSTS after HTTPS is already stable—not as a way to make an unstable HTTPS deployment secure.",[17,7468,7469,7470,7472,7473,7475,7476,7478],{},"Start with the main hostname and a short ",[129,7471,6963],{},". Validate certificates, redirects, CDN behavior, application errors and renewal automation. Increase ",[129,7474,6963],{}," gradually. Add ",[129,7477,6966],{}," only after verifying the relevant subdomains. Treat preloading as a separate infrastructure decision because its consequences extend beyond a normal response header.",[17,7480,7481],{},"The goal is not to configure the strongest-looking header. It is to create an HTTPS policy your infrastructure can reliably honor.",[12,7483,907],{"id":906},[909,7485,7487],{"id":7486},"does-hsts-improve-seo","Does HSTS improve SEO?",[17,7489,7490],{},"HSTS is primarily a transport-security mechanism. Google has not documented HSTS itself as a direct ranking factor in the sources used for this article. Its value should therefore be evaluated mainly in terms of HTTPS security and deployment reliability, not assumed ranking improvements.",[909,7492,7494],{"id":7493},"does-hsts-affect-the-first-visit","Does HSTS affect the first visit?",[17,7496,7497,7498,35],{},"Ordinary dynamically learned HSTS cannot fully protect a browser that has never learned the site's policy. Preloading can remove that initial gap for included domains. (",[29,7499,5987],{"href":7102,"rel":7500},[33],[909,7502,7504],{"id":7503},"can-hsts-be-disabled","Can HSTS be disabled?",[17,7506,7507],{},"For a dynamically stored policy, the server can send:",[179,7509,7511],{"className":5722,"code":7510,"language":5724,"meta":185,"style":185},"Strict-Transport-Security: max-age=0\n",[129,7512,7513],{"__ignoreMap":185},[161,7514,7515],{"class":299,"line":300},[161,7516,7510],{},[17,7518,7519,7520,35],{},"over HTTPS. The browser then removes that host's stored HSTS policy as defined by RFC 6797. (",[29,7521,1486],{"href":6956,"rel":7522},[33],[909,7524,7526],{"id":7525},"should-apis-use-hsts","Should APIs use HSTS?",[17,7528,7529,7530,7532],{},"If an API hostname is accessed by user agents that implement HSTS, it can benefit from the same transport policy. Whether ",[129,7531,6966],{}," should be applied at a parent domain still depends on the HTTPS readiness of the wider domain tree.",[12,7534,960],{"id":959},[17,7536,7537],{},"HSTS closes an important weakness in ordinary HTTP-to-HTTPS redirection by telling browsers to require HTTPS in future connections. Its strength comes from persistence: browsers remember the policy and refuse insecure fallback.",[17,7539,7540],{},"That persistence is also the deployment risk.",[17,7542,7543,7544,7546,7547,7549],{},"Use HSTS deliberately. Stabilize HTTPS first, start with a manageable ",[129,7545,6963],{},", expand coverage only after testing, and approach ",[129,7548,6966],{}," and preloading as infrastructure commitments rather than harmless header options.",[12,7551,976],{"id":975},[978,7553,7554,7568,7577,7586,7595,7604,7618],{},[981,7555,7556,7559,7560,513,7562,7564,7565,35],{},[21,7557,7558],{},"RFC Editor — RFC 6797: HTTP Strict Transport Security (HSTS)",", November 2012. Defines HSTS processing, ",[129,7561,6963],{},[129,7563,6966],{},", expiration and removal behavior. (",[29,7566,1486],{"href":6956,"rel":7567},[33],[981,7569,7570,7573,7574,35],{},[21,7571,7572],{},"MDN Web Docs — Strict-Transport-Security header."," Practical browser behavior, syntax, certificate handling, subdomains and preload context. (",[29,7575,5987],{"href":7154,"rel":7576},[33],[981,7578,7579,7582,7583,35],{},[21,7580,7581],{},"MDN Web Docs — Transport Layer Security."," HTTPS upgrade behavior, SSL stripping and the first-connection limitation of dynamically learned HSTS. (",[29,7584,5987],{"href":7102,"rel":7585},[33],[981,7587,7588,7591,7592,35],{},[21,7589,7590],{},"Chromium — HTTP Strict Transport Security."," Chromium's description of HSTS behavior and browser preload lists. (",[29,7593,7286],{"href":7284,"rel":7594},[33],[981,7596,7597,7600,7601,35],{},[21,7598,7599],{},"HSTS Preload List Submission — hstspreload.org."," Current preload requirements, operational warnings and submission guidance. (",[29,7602,7271],{"href":7269,"rel":7603},[33],[981,7605,7606,7609,7610,513,7612,7614,7615,35],{},[21,7607,7608],{},"NGINX — ngx_http_headers_module."," Official documentation for ",[129,7611,7354],{},[129,7613,3538],{}," and header inheritance. (",[29,7616,7367],{"href":7365,"rel":7617},[33],[981,7619,7620,7623,7624,466,7627,7630,7631,35],{},[21,7621,7622],{},"curl — Tutorial."," Official documentation for using ",[129,7625,7626],{},"-I",[129,7628,7629],{},"--head"," to inspect HTTP headers. (",[29,7632,7409],{"href":7407,"rel":7633},[33],[1067,7635,4906],{},{"title":185,"searchDepth":311,"depth":311,"links":7637},[7638,7639,7640,7641,7642,7643,7644,7645,7646,7647,7648,7649,7650,7651,7652],{"id":6938,"depth":311,"text":6939},{"id":1151,"depth":311,"text":1152},{"id":2080,"depth":311,"text":2081},{"id":7086,"depth":311,"text":7087},{"id":7126,"depth":311,"text":7127},{"id":7161,"depth":311,"text":7162},{"id":7212,"depth":311,"text":7213},{"id":7274,"depth":311,"text":7275},{"id":7331,"depth":311,"text":7332},{"id":7376,"depth":311,"text":7377},{"id":858,"depth":311,"text":859},{"id":886,"depth":311,"text":887},{"id":906,"depth":311,"text":907},{"id":959,"depth":311,"text":960},{"id":975,"depth":311,"text":976},"Learn how HSTS forces HTTPS, prevents downgrade attacks, how max-age, includeSubDomains and preload work, and why careless deployment can break access to a site.","\u002Fhsts-explained.png","Image of HSTS",{},"\u002Fblog\u002Fen\u002Fhsts-explained",{"title":6933,"description":7653},"hsts-explained","blog\u002Fen\u002Fhsts-explained","4znvyUGbUeSMoZa-B-mt5xGC8yoQxZAWhl4hwun0RF4",{"id":7663,"title":7664,"author":7,"body":7665,"category":2018,"description":8340,"draft":1097,"extension":1098,"featured":1099,"image":8341,"imageAlt":8342,"locale":1102,"meta":8343,"navigation":1099,"path":8344,"publishedAt":6925,"seo":8345,"slug":7721,"stem":8346,"translationKey":7721,"updatedAt":6925,"__hash__":8347},"blog\u002Fblog\u002Fen\u002Fkeywords-vs-entities.md","Keywords vs Entities: What Is the Difference in SEO?",{"type":9,"value":7666,"toc":8320},[7667,7671,7678,7688,7691,7693,7698,7713,7716,7719,7723,7805,7808,7810,7823,7830,7833,7837,7840,7843,7846,7849,7854,7857,7880,7883,7890,7894,7897,7900,7905,7916,7919,7924,7927,7930,7935,7939,7942,7945,7948,7951,7956,7959,7970,7973,7976,7980,7983,7986,7988,8050,8056,8062,8067,8071,8074,8081,8095,8101,8108,8111,8116,8118,8122,8125,8129,8132,8135,8139,8142,8146,8152,8155,8157,8160,8163,8166,8169,8175,8177,8181,8184,8188,8191,8195,8207,8211,8214,8218,8221,8223,8229,8235,8238,8244,8249,8251,8317],[12,7668,7670],{"id":7669},"keywords-vs-entities-what-is-the-difference","Keywords vs Entities: What Is the Difference?",[17,7672,7673,7674,7677],{},"SEO discussions increasingly use the word ",[21,7675,7676],{},"entity",", sometimes as if entities have replaced keywords. That creates a false choice.",[17,7679,7680,7681,7684,7685,7687],{},"Keywords and entities describe different things. A ",[21,7682,7683],{},"keyword"," is a word or phrase people use to express a search need or that appears in content. An ",[21,7686,7676],{}," is a distinct thing or concept that can be identified and connected to other things: a person, company, product, location, event, organization, or similar subject.",[17,7689,7690],{},"Modern search systems use both language and meaning. Google still advises publishers to consider the words people may search for, while also documenting systems that understand concepts, intent, and real-world entities.",[12,7692,1152],{"id":1151},[17,7694,7695],{},[21,7696,7697],{},"Keywords represent language. Entities represent meaning and identity.",[17,7699,7700,7701,7704,7705,7708,7709,7712],{},"For example, ",[129,7702,7703],{},"apple laptop"," is a keyword phrase. ",[21,7706,7707],{},"Apple Inc."," is an entity, ",[21,7710,7711],{},"MacBook Pro"," is another entity, and the relationship between them can be expressed as Apple manufacturing the MacBook Pro.",[17,7714,7715],{},"A search engine does not have to rely only on exact word matching. It can analyze the words in a query, infer their meaning, identify relevant concepts or entities, and retrieve pages that satisfy the search intent.",[17,7717,7718],{},"That does not make keywords obsolete. It means exact wording is only one part of understanding relevance.",[12,7720,7722],{"id":7721},"keywords-vs-entities","Keywords vs Entities",[69,7724,7725,7737],{},[72,7726,7727],{},[75,7728,7729,7731,7734],{},[78,7730],{},[78,7732,7733],{},"Keywords",[78,7735,7736],{},"Entities",[85,7738,7739,7750,7762,7772,7783,7794],{},[75,7740,7741,7744,7747],{},[90,7742,7743],{},"Represents",[90,7745,7746],{},"Words or phrases",[90,7748,7749],{},"Identifiable things or concepts",[75,7751,7752,7754,7759],{},[90,7753,5027],{},[90,7755,7756],{},[129,7757,7758],{},"iphone repair london",[90,7760,7761],{},"iPhone, Apple Inc., London",[75,7763,7764,7767,7769],{},[90,7765,7766],{},"Depends on wording",[90,7768,2106],{},[90,7770,7771],{},"Identity can remain the same across different names",[75,7773,7774,7777,7780],{},[90,7775,7776],{},"Can have relationships",[90,7778,7779],{},"Mainly through language\u002Fcontext",[90,7781,7782],{},"Yes, explicitly or implicitly",[75,7784,7785,7788,7791],{},[90,7786,7787],{},"Main SEO use",[90,7789,7790],{},"Search demand, terminology, page relevance",[90,7792,7793],{},"Topic clarity, identity, context, relationships",[75,7795,7796,7799,7802],{},[90,7797,7798],{},"Structured data required?",[90,7800,7801],{},"No",[90,7803,7804],{},"No, although structured data can provide explicit information",[17,7806,7807],{},"The distinction matters because the same entity can be described with several different strings.",[17,7809,1399],{},[17,7811,7812,513,7815,7818,7819,7822],{},[21,7813,7814],{},"International Business Machines",[21,7816,7817],{},"IBM",", and potentially context-dependent references such as ",[21,7820,7821],{},"the company"," can all refer to the same organization.",[17,7824,7825,7826,7829],{},"Conversely, the same keyword can have different meanings. ",[129,7827,7828],{},"Java"," could refer to a programming language, an Indonesian island, or coffee depending on the query.",[17,7831,7832],{},"This ambiguity is one reason search systems need more than literal string matching.",[12,7834,7836],{"id":7835},"how-keywords-work","How Keywords Work",[17,7838,7839],{},"Keywords help connect the language used by a searcher with the language and subject matter of a page.",[17,7841,7842],{},"Google's SEO Starter Guide explicitly advises site owners to think about the terms different users might search for. An expert and a beginner may describe the same subject differently. However, Google also says publishers do not need to anticipate every possible variation because its language-matching systems can relate pages to queries even when the exact terms do not appear.",[17,7844,7845],{},"This changes how keyword optimization should be approached.",[17,7847,7848],{},"A page about HTTP caching does not need to repeat:",[17,7850,7851],{},[129,7852,7853],{},"HTTP caching",[17,7855,7856],{},"in every heading and paragraph. It might naturally discuss:",[1640,7858,7859,7862,7865,7868,7871,7874,7877],{},[981,7860,7861],{},"browser cache",[981,7863,7864],{},"Cache-Control",[981,7866,7867],{},"cached responses",[981,7869,7870],{},"freshness",[981,7872,7873],{},"validators",[981,7875,7876],{},"ETag",[981,7878,7879],{},"revalidation",[17,7881,7882],{},"These terms help explain the actual subject rather than artificially increasing the frequency of one phrase.",[17,7884,7885,7886,7889],{},"Keyword research therefore remains useful for understanding ",[21,7887,7888],{},"how people express demand",", but keyword repetition is not a substitute for useful content.",[12,7891,7893],{"id":7892},"how-entities-work","How Entities Work",[17,7895,7896],{},"Google introduced its Knowledge Graph in 2012 as a system for understanding real-world people, places, and things and the relationships between them rather than treating searches only as strings of characters.",[17,7898,7899],{},"Consider:",[17,7901,7902],{},[21,7903,7904],{},"Christopher Nolan → directed → Inception",[17,7906,7907,7908,7911,7912,7915],{},"The entity ",[21,7909,7910],{},"Christopher Nolan"," has an identity. ",[21,7913,7914],{},"Inception"," has another identity. The relationship between them carries information that neither name communicates by itself.",[17,7917,7918],{},"This creates something closer to a graph:",[17,7920,7921],{},[21,7922,7923],{},"Director → Movie → Actor → Character → Award",[17,7925,7926],{},"The connections add context.",[17,7928,7929],{},"Schema.org uses a similar graph-oriented model for structured data: entities have types and properties, and those properties can connect one entity to another.",[17,7931,7932],{},[161,7933,7934],{},"INTERNAL LINK: What Is Entity SEO?",[12,7936,7938],{"id":7937},"search-is-not-exact-matching","Search Is Not Exact Matching",[17,7940,7941],{},"The shift toward richer language understanding does not mean Google stopped matching words.",[17,7943,7944],{},"Instead, several mechanisms can operate together.",[17,7946,7947],{},"Google documents BERT as a system that helps understand how combinations of words express different meanings and intent. Its ranking-systems documentation also describes neural matching as helping relate concepts in queries to relevant pages.",[17,7949,7950],{},"That distinction explains searches such as:",[17,7952,7953],{},[21,7954,7955],{},"“laptop that lasts all day without charging”",[17,7957,7958],{},"A relevant page might primarily use terms such as:",[17,7960,7961,513,7964,542,7967],{},[21,7962,7963],{},"battery life",[21,7965,7966],{},"18-hour battery",[21,7968,7969],{},"power efficiency",[17,7971,7972],{},"rather than repeating the exact query.",[17,7974,7975],{},"The words still matter, but search systems can attempt to understand what those words mean.",[12,7977,7979],{"id":7978},"where-structured-data-fits","Where Structured Data Fits",[17,7981,7982],{},"Structured data is often associated with entity SEO, but the two should not be treated as synonyms.",[17,7984,7985],{},"Google describes structured data as a standardized way to provide explicit clues about the meaning and classification of page content. It can describe objects such as organizations, people, products, recipes, events, and their properties.",[17,7987,1399],{},[179,7989,7993],{"className":7990,"code":7991,"language":7992,"meta":185,"style":185},"language-json shiki shiki-themes github-light github-dark","{\n  \"@context\": \"https:\u002F\u002Fschema.org\",\n  \"@type\": \"Organization\",\n  \"name\": \"Example Company\",\n  \"url\": \"https:\u002F\u002Fexample.com\"\n}\n","json",[129,7994,7995,8000,8012,8024,8036,8046],{"__ignoreMap":185},[161,7996,7997],{"class":299,"line":300},[161,7998,7999],{"class":303},"{\n",[161,8001,8002,8005,8007,8010],{"class":299,"line":311},[161,8003,8004],{"class":384},"  \"@context\"",[161,8006,387],{"class":303},[161,8008,8009],{"class":321},"\"https:\u002F\u002Fschema.org\"",[161,8011,830],{"class":303},[161,8013,8014,8017,8019,8022],{"class":299,"line":325},[161,8015,8016],{"class":384},"  \"@type\"",[161,8018,387],{"class":303},[161,8020,8021],{"class":321},"\"Organization\"",[161,8023,830],{"class":303},[161,8025,8026,8029,8031,8034],{"class":299,"line":336},[161,8027,8028],{"class":384},"  \"name\"",[161,8030,387],{"class":303},[161,8032,8033],{"class":321},"\"Example Company\"",[161,8035,830],{"class":303},[161,8037,8038,8041,8043],{"class":299,"line":347},[161,8039,8040],{"class":384},"  \"url\"",[161,8042,387],{"class":303},[161,8044,8045],{"class":321},"\"https:\u002F\u002Fexample.com\"\n",[161,8047,8048],{"class":299,"line":358},[161,8049,413],{"class":303},[17,8051,8052,8053,174],{},"This markup explicitly says that the described object is an ",[129,8054,8055],{},"Organization",[17,8057,8058,8059,8061],{},"But adding Schema.org markup does ",[21,8060,151],{}," automatically establish authority, guarantee a Knowledge Panel, or guarantee higher rankings. Google states that structured data can help it understand content and can make pages eligible for certain search features, but even valid markup does not guarantee those features will appear.",[17,8063,8064],{},[161,8065,8066],{},"INTERNAL LINK: Structured Data Explained",[12,8068,8070],{"id":8069},"should-you-optimize-for-keywords-or-entities","Should You Optimize for Keywords or Entities?",[17,8072,8073],{},"In practice, these are complementary rather than competing strategies.",[17,8075,8076,8077,8080],{},"Use ",[21,8078,8079],{},"keyword research"," to understand:",[1640,8082,8083,8086,8089,8092],{},[981,8084,8085],{},"what people search for,",[981,8087,8088],{},"which terminology they use,",[981,8090,8091],{},"what questions they ask,",[981,8093,8094],{},"and what intent sits behind those searches.",[17,8096,8097,8098,174],{},"Then build content around the ",[21,8099,8100],{},"actual subject and its relationships",[17,8102,8103,8104,8107],{},"For example, a page targeting ",[129,8105,8106],{},"largest contentful paint"," should not simply repeat that phrase. A strong explanation will naturally establish relationships with Core Web Vitals, rendering, the LCP element, resource loading, images, fonts, servers, and performance measurement where those subjects are relevant.",[17,8109,8110],{},"That produces a more complete representation of the topic for readers and gives search systems more context to work with.",[17,8112,8113],{},[161,8114,8115],{},"INTERNAL LINK: Semantic SEO Explained",[12,8117,859],{"id":858},[220,8119,8121],{"id":8120},"entities-replaced-keywords","“Entities replaced keywords”",[17,8123,8124],{},"No. Google still explicitly discusses the words people use when searching. Its systems have simply become more capable of understanding relationships between different expressions, concepts, and meanings.",[220,8126,8128],{"id":8127},"mentioning-more-entities-improves-rankings","“Mentioning more entities improves rankings”",[17,8130,8131],{},"There is no documented rule saying that adding a larger number of entity names will improve rankings.",[17,8133,8134],{},"Unnecessary entity mentions can become another form of stuffing. Every person, product, organization, technology, or concept should appear because it improves the explanation.",[220,8136,8138],{"id":8137},"structured-data-creates-entities","“Structured data creates entities”",[17,8140,8141],{},"Structured data describes information in a machine-readable format. It can clarify identity and relationships, but markup alone should not be treated as proof that a search engine will recognize something as a particular Knowledge Graph entity.",[220,8143,8145],{"id":8144},"entity-seo-is-a-google-ranking-factor","“Entity SEO is a Google ranking factor”",[17,8147,8148,8149],{},"Google publicly documents entity-understanding technologies and systems such as the Knowledge Graph, but it does not document a standalone ranking factor named ",[21,8150,8151],{},"“entity SEO.”",[17,8153,8154],{},"Treat entity SEO as an industry framework for thinking about meaning, identity, relationships, and semantic clarity—not as a documented Google ranking score.",[12,8156,887],{"id":886},[17,8158,8159],{},"Do not choose between keywords and entities.",[17,8161,8162],{},"Start with search intent and keyword research to understand the user's language. Then explain the subject accurately enough that its important entities, attributes, and relationships become naturally clear.",[17,8164,8165],{},"Use structured data where it correctly describes visible page content and where the markup is relevant. Do not add entities merely to make a page appear “semantically optimized.”",[17,8167,8168],{},"The objective is not maximum keyword density or maximum entity density.",[17,8170,8171,8172,174],{},"It is ",[21,8173,8174],{},"clear, complete, useful information",[12,8176,907],{"id":906},[909,8178,8180],{"id":8179},"is-an-entity-the-same-as-a-keyword","Is an entity the same as a keyword?",[17,8182,8183],{},"No. A keyword is a word or phrase. An entity represents an identifiable subject. A keyword may refer to an entity, but the two concepts are not interchangeable.",[909,8185,8187],{"id":8186},"can-one-entity-have-several-keywords","Can one entity have several keywords?",[17,8189,8190],{},"Yes. Different names, abbreviations, spelling variations, and query phrases can refer to the same underlying entity.",[909,8192,8194],{"id":8193},"can-one-keyword-refer-to-several-entities","Can one keyword refer to several entities?",[17,8196,8197,8198,513,8201,542,8203,8206],{},"Yes. Words can be ambiguous. ",[129,8199,8200],{},"Apple",[129,8202,7828],{},[129,8204,8205],{},"Mercury",", for example, can refer to different subjects depending on context.",[909,8208,8210],{"id":8209},"are-keywords-still-important-for-seo","Are keywords still important for SEO?",[17,8212,8213],{},"Yes. Understanding the terminology users search with remains useful. Google itself advises considering different search terms while noting that exact wording for every query variation is unnecessary.",[909,8215,8217],{"id":8216},"does-schemaorg-improve-entity-seo","Does Schema.org improve entity SEO?",[17,8219,8220],{},"Schema.org can explicitly describe entities and their properties, which may make information easier for machines to interpret. However, valid structured data does not by itself guarantee rankings, rich results, or entity recognition.",[12,8222,960],{"id":959},[17,8224,8225,8226,174],{},"Keywords tell you ",[21,8227,8228],{},"how people talk about a subject",[17,8230,8231,8232,174],{},"Entities help represent ",[21,8233,8234],{},"what the subject actually is and how it relates to other things",[17,8236,8237],{},"Modern SEO therefore should not abandon keywords in favor of entities. It should combine user language, clear intent, accurate information, meaningful relationships, and technically sound machine-readable data where appropriate.",[17,8239,8240,8241,174],{},"The progression is not ",[21,8242,8243],{},"keywords → entities",[17,8245,8171,8246,174],{},[21,8247,8248],{},"strings plus meaning",[12,8250,976],{"id":975},[978,8252,8253,8264,8275,8286,8297,8306],{},[981,8254,8255,8258,8259],{},[21,8256,8257],{},"Google Search Central — SEO Starter Guide"," — guidance on anticipating search terminology and Google's language-matching systems. ",[29,8260,8263],{"href":8261,"rel":8262},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Ffundamentals\u002Fseo-starter-guide?utm_source=chatgpt.com",[33],"Google SEO Starter Guide",[981,8265,8266,8269,8270],{},[21,8267,8268],{},"Google — “Introducing the Knowledge Graph: things, not strings”"," — May 16, 2012. Introduction to Google's entity-and-relationship model for Search. ",[29,8271,8274],{"href":8272,"rel":8273},"https:\u002F\u002Fblog.google\u002Fproducts-and-platforms\u002Fproducts\u002Fsearch\u002Fintroducing-knowledge-graph-things-not\u002F?utm_source=chatgpt.com",[33],"Google Knowledge Graph announcement",[981,8276,8277,8280,8281],{},[21,8278,8279],{},"Google Search Central — A Guide to Google Search Ranking Systems"," — documentation covering systems including BERT and neural matching. ",[29,8282,8285],{"href":8283,"rel":8284},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Franking-systems-guide?utm_source=chatgpt.com",[33],"Google Search ranking systems guide",[981,8287,8288,8291,8292],{},[21,8289,8290],{},"Google Search Central — Introduction to Structured Data Markup"," — documentation on structured data, page meaning, classification, and Search features. ",[29,8293,8296],{"href":8294,"rel":8295},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Fintro-structured-data?utm_source=chatgpt.com",[33],"Google structured data documentation",[981,8298,8299,8302,8303],{},[21,8300,8301],{},"Google Search Central — In-depth Guide to How Google Search Works"," — documentation covering crawling, indexing, understanding page content, and serving relevant results. ",[29,8304,5612],{"href":1144,"rel":8305},[33],[981,8307,8308,8311,8312],{},[21,8309,8310],{},"Schema.org — Data Model and Style Guide"," — documentation describing types, properties, entities, and graph relationships. ",[29,8313,8316],{"href":8314,"rel":8315},"https:\u002F\u002Fschema.org\u002Fdocs\u002Fdatamodel.html?utm_source=chatgpt.com",[33],"Schema.org data model",[1067,8318,8319],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}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 .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":185,"searchDepth":311,"depth":311,"links":8321},[8322,8323,8324,8325,8326,8327,8328,8329,8330,8336,8337,8338,8339],{"id":7669,"depth":311,"text":7670},{"id":1151,"depth":311,"text":1152},{"id":7721,"depth":311,"text":7722},{"id":7835,"depth":311,"text":7836},{"id":7892,"depth":311,"text":7893},{"id":7937,"depth":311,"text":7938},{"id":7978,"depth":311,"text":7979},{"id":8069,"depth":311,"text":8070},{"id":858,"depth":311,"text":859,"children":8331},[8332,8333,8334,8335],{"id":8120,"depth":325,"text":8121},{"id":8127,"depth":325,"text":8128},{"id":8137,"depth":325,"text":8138},{"id":8144,"depth":325,"text":8145},{"id":886,"depth":311,"text":887},{"id":906,"depth":311,"text":907},{"id":959,"depth":311,"text":960},{"id":975,"depth":311,"text":976},"Learn the difference between keywords and entities in SEO, how search engines use language and meaning, and why modern SEO needs both.","\u002Fkeywords-and-entities.png","Images of Keyword and entities",{},"\u002Fblog\u002Fen\u002Fkeywords-vs-entities",{"title":7664,"description":8340},"blog\u002Fen\u002Fkeywords-vs-entities","O4dR8wNIv8erjcpdJwc2KQrEjAqzMe6VjepB2fUEbVU",{"id":8349,"title":8350,"author":7,"body":8351,"category":4083,"description":9527,"draft":1097,"extension":1098,"featured":1099,"image":9528,"imageAlt":9529,"locale":1102,"meta":9530,"navigation":1099,"path":9531,"publishedAt":6925,"seo":9532,"slug":9533,"stem":9534,"translationKey":9533,"updatedAt":6925,"__hash__":9535},"blog\u002Fblog\u002Fen\u002Fnuxt-rendering-modes.md","Nuxt 4 Rendering Modes",{"type":9,"value":8352,"toc":9508},[8353,8356,8359,8375,8377,8384,8387,8422,8431,8435,8547,8553,8557,8571,8574,8591,8599,8601,8734,8737,8743,8747,8750,8760,8765,8769,8772,8813,8819,8822,8836,8839,8842,8846,8849,8855,8861,8864,8869,8873,8876,8882,8885,8888,8904,8907,8924,8931,8934,8948,8951,8961,8965,8968,8971,8988,8991,9004,9006,9127,9130,9136,9139,9143,9146,9149,9152,9177,9180,9183,9186,9188,9213,9219,9222,9227,9231,9237,9243,9249,9252,9256,9259,9264,9267,9272,9275,9278,9284,9287,9289,9296,9302,9305,9312,9314,9317,9320,9326,9329,9331,9335,9347,9351,9354,9358,9367,9371,9377,9381,9384,9386,9389,9392,9398,9403,9405,9505],[12,8354,8350],{"id":8355},"nuxt-4-rendering-modes",[17,8357,8358],{},"Nuxt 4 can render the same application in several different ways, and choosing the wrong strategy can create unnecessary server costs, slower initial loading, stale content, or avoidable SEO complexity.",[17,8360,8361,8362,8365,8366,8369,8370,35],{},"The important distinction is that Nuxt does not force an entire website into one rendering strategy. Universal rendering is the default, but individual routes can be prerendered, cached, rendered on demand, or moved to client-side rendering through hybrid rendering and ",[129,8363,8364],{},"routeRules",". Edge rendering adds another option for ",[1625,8367,8368],{},"where"," server rendering happens rather than introducing a completely different rendering model. (",[29,8371,8374],{"href":8372,"rel":8373},"https:\u002F\u002Fnuxt.com\u002Fdocs\u002F4.x\u002Fguide\u002Fconcepts\u002Frendering?utm_source=chatgpt.com",[33],"nuxt.com",[12,8376,1152],{"id":1151},[17,8378,8379,8380,8383],{},"By default, Nuxt 4 uses ",[21,8381,8382],{},"universal rendering",". Nuxt generates the initial HTML on the server, sends it to the browser, and Vue then hydrates that HTML so the page becomes interactive.",[17,8385,8386],{},"You can instead use:",[1640,8388,8389,8398,8404,8410,8416],{},[981,8390,8391,8394,8395],{},[21,8392,8393],{},"Client-side rendering (CSR)"," with ",[129,8396,8397],{},"ssr: false",[981,8399,8400,8403],{},[21,8401,8402],{},"Prerendering"," to generate HTML during the build",[981,8405,8406,8409],{},[21,8407,8408],{},"SWR"," to cache rendered responses and refresh them in the background",[981,8411,8412,8415],{},[21,8413,8414],{},"ISR"," to persist generated pages in supported CDN environments",[981,8417,8418,8421],{},[21,8419,8420],{},"Hybrid rendering"," to combine these strategies route by route",[17,8423,8424,8425,8427,8428,35],{},"Nuxt's ",[129,8426,8364],{}," configuration is what makes that mixture possible. (",[29,8429,8374],{"href":8372,"rel":8430},[33],[12,8432,8434],{"id":8433},"rendering-modes-compared","Rendering Modes Compared",[69,8436,8437,8454],{},[72,8438,8439],{},[75,8440,8441,8444,8447,8451],{},[78,8442,8443],{},"Strategy",[78,8445,8446],{},"HTML created",[78,8448,8450],{"align":8449},"right","Server required at runtime?",[78,8452,8453],{},"Good fit",[85,8455,8456,8469,8483,8495,8507,8520,8534],{},[75,8457,8458,8461,8464,8466],{},[90,8459,8460],{},"Universal SSR",[90,8462,8463],{},"On request",[90,8465,2106],{"align":8449},[90,8467,8468],{},"Dynamic public websites",[75,8470,8471,8474,8477,8480],{},[90,8472,8473],{},"CSR",[90,8475,8476],{},"In the browser",[90,8478,8479],{"align":8449},"No for page rendering",[90,8481,8482],{},"Dashboards, internal apps",[75,8484,8485,8487,8490,8492],{},[90,8486,8402],{},[90,8488,8489],{},"At build time",[90,8491,7801],{"align":8449},[90,8493,8494],{},"Stable content",[75,8496,8497,8499,8502,8504],{},[90,8498,8408],{},[90,8500,8501],{},"On demand, then cached",[90,8503,2106],{"align":8449},[90,8505,8506],{},"Content that changes periodically",[75,8508,8509,8511,8514,8517],{},[90,8510,8414],{},[90,8512,8513],{},"On demand, then CDN-cached",[90,8515,8516],{"align":8449},"Platform-dependent",[90,8518,8519],{},"Large semi-static sites",[75,8521,8522,8525,8528,8531],{},[90,8523,8524],{},"Hybrid",[90,8526,8527],{},"Depends on route",[90,8529,8530],{"align":8449},"Depends",[90,8532,8533],{},"Most mixed-content applications",[75,8535,8536,8539,8542,8544],{},[90,8537,8538],{},"Edge rendering",[90,8540,8541],{},"On an edge runtime",[90,8543,2106],{"align":8449},[90,8545,8546],{},"Latency-sensitive server rendering",[17,8548,8549,8550],{},"The table simplifies deployment details, but the central idea is useful: ",[21,8551,8552],{},"the best rendering strategy can be different for different URLs in the same Nuxt application.",[12,8554,8556],{"id":8555},"universal-rendering","Universal Rendering",[17,8558,8559,8560,8563,8564,239,8567,35],{},"Universal rendering is Nuxt's default behavior. The Nuxt configuration option ",[129,8561,8562],{},"ssr"," defaults to ",[129,8565,8566],{},"true",[29,8568,8374],{"href":8569,"rel":8570},"https:\u002F\u002Fnuxt.com\u002Fdocs\u002F4.x\u002Fapi\u002Fnuxt-config?utm_source=chatgpt.com",[33],[17,8572,8573],{},"When someone requests a page:",[978,8575,8576,8579,8582,8585,8588],{},[981,8577,8578],{},"Nuxt executes the Vue application on the server.",[981,8580,8581],{},"The server produces HTML.",[981,8583,8584],{},"The browser receives and displays that HTML.",[981,8586,8587],{},"The client-side JavaScript loads.",[981,8589,8590],{},"Vue hydrates the existing HTML and attaches interactivity.",[17,8592,8593,8594,35],{},"Hydration does not mean replacing the whole server-rendered page. Vue connects its application to the existing DOM and attaches the behavior required for buttons, state changes, navigation, and other interactive features. (",[29,8595,8598],{"href":8596,"rel":8597},"https:\u002F\u002Fvuejs.org\u002Fguide\u002Fscaling-up\u002Fssr?utm_source=chatgpt.com",[33],"vuejs.org",[17,8600,1399],{},[179,8602,8606],{"className":8603,"code":8604,"language":8605,"meta":185,"style":185},"language-vue shiki shiki-themes github-light github-dark","\u003Cscript setup lang=\"ts\">\nconst count = ref(0)\n\nfunction increment() {\n  count.value++\n}\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Cbutton @click=\"increment\">\n    Count: {{ count }}\n  \u003C\u002Fbutton>\n\u003C\u002Ftemplate>\n","vue",[129,8607,8608,8627,8647,8651,8662,8670,8674,8682,8686,8695,8712,8717,8726],{"__ignoreMap":185},[161,8609,8610,8612,8614,8617,8620,8622,8625],{"class":299,"line":300},[161,8611,304],{"class":303},[161,8613,5916],{"class":307},[161,8615,8616],{"class":314}," setup",[161,8618,8619],{"class":314}," lang",[161,8621,318],{"class":303},[161,8623,8624],{"class":321},"\"ts\"",[161,8626,361],{"class":303},[161,8628,8629,8631,8634,8637,8640,8642,8645],{"class":299,"line":311},[161,8630,752],{"class":393},[161,8632,8633],{"class":384}," count",[161,8635,8636],{"class":393}," =",[161,8638,8639],{"class":314}," ref",[161,8641,573],{"class":303},[161,8643,8644],{"class":384},"0",[161,8646,6460],{"class":303},[161,8648,8649],{"class":299,"line":325},[161,8650,3024],{"emptyLinePlaceholder":1099},[161,8652,8653,8656,8659],{"class":299,"line":336},[161,8654,8655],{"class":393},"function",[161,8657,8658],{"class":314}," increment",[161,8660,8661],{"class":303},"() {\n",[161,8663,8664,8667],{"class":299,"line":347},[161,8665,8666],{"class":303},"  count.value",[161,8668,8669],{"class":393},"++\n",[161,8671,8672],{"class":299,"line":358},[161,8673,413],{"class":303},[161,8675,8676,8678,8680],{"class":299,"line":809},[161,8677,5931],{"class":303},[161,8679,5916],{"class":307},[161,8681,361],{"class":303},[161,8683,8684],{"class":299,"line":821},[161,8685,3024],{"emptyLinePlaceholder":1099},[161,8687,8688,8690,8693],{"class":299,"line":833},[161,8689,304],{"class":303},[161,8691,8692],{"class":307},"template",[161,8694,361],{"class":303},[161,8696,8697,8700,8702,8705,8707,8710],{"class":299,"line":842},[161,8698,8699],{"class":303},"  \u003C",[161,8701,6373],{"class":307},[161,8703,8704],{"class":314}," @click",[161,8706,318],{"class":303},[161,8708,8709],{"class":321},"\"increment\"",[161,8711,361],{"class":303},[161,8713,8714],{"class":299,"line":3064},[161,8715,8716],{"class":303},"    Count: {{ count }}\n",[161,8718,8719,8722,8724],{"class":299,"line":3070},[161,8720,8721],{"class":303},"  \u003C\u002F",[161,8723,6373],{"class":307},[161,8725,361],{"class":303},[161,8727,8728,8730,8732],{"class":299,"line":3075},[161,8729,5931],{"class":303},[161,8731,8692],{"class":307},[161,8733,361],{"class":303},[17,8735,8736],{},"The initial button markup can be produced by the server. The click interaction becomes functional after hydration in the browser.",[17,8738,8739,8740,35],{},"Universal rendering works particularly well for public content such as product pages, blogs, marketing sites, marketplaces, and other pages where immediately available HTML is valuable. (",[29,8741,8374],{"href":8372,"rel":8742},[33],[220,8744,8746],{"id":8745},"hydration-has-constraints","Hydration Has Constraints",[17,8748,8749],{},"Because much of the application executes once on the server and again in the browser, both environments should initially produce compatible markup.",[17,8751,8752,8753,8756,8757,35],{},"Random values, browser-only APIs, invalid HTML structure, or timezone-dependent output can create ",[21,8754,8755],{},"hydration mismatches"," when the client's expected DOM differs from the server-generated HTML. Vue attempts to recover from such mismatches, but recovery can introduce extra work and should generally be avoided. (",[29,8758,8598],{"href":8596,"rel":8759},[33],[17,8761,8762],{},[161,8763,8764],{},"INTERNAL LINK: Nuxt Hydration Mismatch Explained",[12,8766,8768],{"id":8767},"client-side-rendering","Client-Side Rendering",[17,8770,8771],{},"You can disable server-side HTML rendering globally:",[179,8773,8777],{"className":8774,"code":8775,"language":8776,"meta":185,"style":185},"language-ts shiki shiki-themes github-light github-dark","\u002F\u002F nuxt.config.ts\nexport default defineNuxtConfig({\n  ssr: false,\n})\n","ts",[129,8778,8779,8785,8798,8808],{"__ignoreMap":185},[161,8780,8781],{"class":299,"line":300},[161,8782,8784],{"class":8783},"sJ8bj","\u002F\u002F nuxt.config.ts\n",[161,8786,8787,8790,8793,8796],{"class":299,"line":311},[161,8788,8789],{"class":393},"export",[161,8791,8792],{"class":393}," default",[161,8794,8795],{"class":314}," defineNuxtConfig",[161,8797,818],{"class":303},[161,8799,8800,8803,8806],{"class":299,"line":325},[161,8801,8802],{"class":303},"  ssr: ",[161,8804,8805],{"class":384},"false",[161,8807,830],{"class":303},[161,8809,8810],{"class":299,"line":336},[161,8811,8812],{"class":303},"})\n",[17,8814,8815,8816,35],{},"With client-side rendering, the browser receives the application shell and JavaScript creates the interface in the browser instead of Nuxt producing the page content through SSR. (",[29,8817,8374],{"href":8372,"rel":8818},[33],[17,8820,8821],{},"This can be useful for applications such as:",[1640,8823,8824,8827,8830,8833],{},[981,8825,8826],{},"authenticated dashboards,",[981,8828,8829],{},"back-office systems,",[981,8831,8832],{},"highly interactive tools,",[981,8834,8835],{},"interfaces where public search indexing is irrelevant.",[17,8837,8838],{},"CSR also removes many server\u002Fbrowser compatibility concerns because page rendering happens entirely in the browser.",[17,8840,8841],{},"The trade-off is that users may need to download, parse, and execute JavaScript before the main interface appears. The result therefore depends more heavily on JavaScript execution and the user's device.",[909,8843,8845],{"id":8844},"csr-and-seo","CSR and SEO",[17,8847,8848],{},"It is inaccurate to say that Google simply cannot index client-rendered JavaScript.",[17,8850,8851,8852,35],{},"Google documents a crawling, rendering, and indexing process in which its Web Rendering Service can execute JavaScript. However, pages whose meaningful content exists only after client-side execution depend on that rendering stage. Google also notes that server-side rendering or prerendering remains useful for users and crawlers, and that not every crawler necessarily executes JavaScript. (",[29,8853,157],{"href":2807,"rel":8854},[33],[17,8856,8857,8858],{},"The practical distinction is therefore not ",[21,8859,8860],{},"\"SSR is indexed, CSR is not.\"",[17,8862,8863],{},"It is closer to:",[17,8865,8866],{},[21,8867,8868],{},"Server-rendered or prerendered content reduces the amount of work required before useful page content exists in the received HTML.",[17,8870,8871],{},[161,8872,2342],{},[12,8874,8402],{"id":8875},"prerendering",[17,8877,8878,8879,174],{},"Prerendering moves rendering from request time to ",[21,8880,8881],{},"build time",[17,8883,8884],{},"Instead of generating a page every time someone requests it, Nuxt generates an HTML file during deployment and serves that already-built output later.",[17,8886,8887],{},"Nuxt supports prerendering with commands such as:",[179,8889,8891],{"className":3564,"code":8890,"language":3566,"meta":185,"style":185},"npx nuxt generate\n",[129,8892,8893],{"__ignoreMap":185},[161,8894,8895,8898,8901],{"class":299,"line":300},[161,8896,8897],{"class":314},"npx",[161,8899,8900],{"class":321}," nuxt",[161,8902,8903],{"class":321}," generate\n",[17,8905,8906],{},"or:",[179,8908,8910],{"className":3564,"code":8909,"language":3566,"meta":185,"style":185},"npx nuxt build --prerender\n",[129,8911,8912],{"__ignoreMap":185},[161,8913,8914,8916,8918,8921],{"class":299,"line":300},[161,8915,8897],{"class":314},[161,8917,8900],{"class":321},[161,8919,8920],{"class":321}," build",[161,8922,8923],{"class":384}," --prerender\n",[17,8925,8926,8927,35],{},"Nuxt's prerender crawler starts from discoverable routes and follows links to find additional pages that can be generated. Routes can also be configured explicitly. (",[29,8928,8374],{"href":8929,"rel":8930},"https:\u002F\u002Fnuxt.com\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fprerendering?utm_source=chatgpt.com",[33],[17,8932,8933],{},"Prerendering is especially useful when the same content can safely be served to everyone until the next deployment—for example:",[1640,8935,8936,8939,8942,8945],{},[981,8937,8938],{},"an About page,",[981,8940,8941],{},"documentation,",[981,8943,8944],{},"many blog articles,",[981,8946,8947],{},"landing pages.",[17,8949,8950],{},"The limitation is freshness. If the source content changes after the build, the generated HTML does not automatically change unless another mechanism regenerates it.",[17,8952,8953,8954,8957,8958,35],{},"A fully static ",[129,8955,8956],{},"nuxt generate"," deployment also does not include a runtime Nuxt server, so server endpoints from the application cannot operate there in the same way they do with a server deployment. (",[29,8959,8374],{"href":8372,"rel":8960},[33],[12,8962,8964],{"id":8963},"hybrid-rendering","Hybrid Rendering",[17,8966,8967],{},"Real applications rarely fit perfectly into \"everything dynamic\" or \"everything static.\"",[17,8969,8970],{},"Consider an e-commerce website:",[1640,8972,8973,8976,8979,8982,8985],{},[981,8974,8975],{},"homepage: mostly stable,",[981,8977,8978],{},"product pages: periodically updated,",[981,8980,8981],{},"account area: highly interactive,",[981,8983,8984],{},"checkout: personalized and dynamic,",[981,8986,8987],{},"blog: changes occasionally.",[17,8989,8990],{},"Rendering all of those routes identically would be unnecessary.",[17,8992,8993,8994,420,8997,8999,9000,35],{},"Nuxt solves this with ",[21,8995,8996],{},"hybrid rendering",[129,8998,8364],{},". Nitro, Nuxt's server engine, applies the appropriate behavior according to the requested route. (",[29,9001,8374],{"href":9002,"rel":9003},"https:\u002F\u002Fnuxt.com\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fserver?utm_source=chatgpt.com",[33],[17,9005,1399],{},[179,9007,9009],{"className":8774,"code":9008,"language":8776,"meta":185,"style":185},"\u002F\u002F nuxt.config.ts\nexport default defineNuxtConfig({\n  routeRules: {\n    '\u002F': { prerender: true },\n\n    '\u002Fproducts\u002F**': {\n      swr: 3600,\n    },\n\n    '\u002Fblog\u002F**': {\n      isr: 3600,\n    },\n\n    '\u002Fadmin\u002F**': {\n      ssr: false,\n    },\n  },\n})\n",[129,9010,9011,9015,9025,9030,9043,9047,9055,9065,9070,9074,9081,9090,9094,9098,9105,9114,9118,9123],{"__ignoreMap":185},[161,9012,9013],{"class":299,"line":300},[161,9014,8784],{"class":8783},[161,9016,9017,9019,9021,9023],{"class":299,"line":311},[161,9018,8789],{"class":393},[161,9020,8792],{"class":393},[161,9022,8795],{"class":314},[161,9024,818],{"class":303},[161,9026,9027],{"class":299,"line":325},[161,9028,9029],{"class":303},"  routeRules: {\n",[161,9031,9032,9035,9038,9040],{"class":299,"line":336},[161,9033,9034],{"class":321},"    '\u002F'",[161,9036,9037],{"class":303},": { prerender: ",[161,9039,8566],{"class":384},[161,9041,9042],{"class":303}," },\n",[161,9044,9045],{"class":299,"line":347},[161,9046,3024],{"emptyLinePlaceholder":1099},[161,9048,9049,9052],{"class":299,"line":358},[161,9050,9051],{"class":321},"    '\u002Fproducts\u002F**'",[161,9053,9054],{"class":303},": {\n",[161,9056,9057,9060,9063],{"class":299,"line":809},[161,9058,9059],{"class":303},"      swr: ",[161,9061,9062],{"class":384},"3600",[161,9064,830],{"class":303},[161,9066,9067],{"class":299,"line":821},[161,9068,9069],{"class":303},"    },\n",[161,9071,9072],{"class":299,"line":833},[161,9073,3024],{"emptyLinePlaceholder":1099},[161,9075,9076,9079],{"class":299,"line":842},[161,9077,9078],{"class":321},"    '\u002Fblog\u002F**'",[161,9080,9054],{"class":303},[161,9082,9083,9086,9088],{"class":299,"line":3064},[161,9084,9085],{"class":303},"      isr: ",[161,9087,9062],{"class":384},[161,9089,830],{"class":303},[161,9091,9092],{"class":299,"line":3070},[161,9093,9069],{"class":303},[161,9095,9096],{"class":299,"line":3075},[161,9097,3024],{"emptyLinePlaceholder":1099},[161,9099,9100,9103],{"class":299,"line":3080},[161,9101,9102],{"class":321},"    '\u002Fadmin\u002F**'",[161,9104,9054],{"class":303},[161,9106,9107,9110,9112],{"class":299,"line":3086},[161,9108,9109],{"class":303},"      ssr: ",[161,9111,8805],{"class":384},[161,9113,830],{"class":303},[161,9115,9116],{"class":299,"line":3091},[161,9117,9069],{"class":303},[161,9119,9120],{"class":299,"line":3096},[161,9121,9122],{"class":303},"  },\n",[161,9124,9125],{"class":299,"line":3101},[161,9126,8812],{"class":303},[17,9128,9129],{},"Here the website effectively contains several rendering strategies inside one Nuxt application.",[17,9131,9132,9133,35],{},"The homepage is generated at build time. Product pages can be cached and refreshed. Blog pages can use ISR on compatible deployment platforms. The admin interface skips SSR and behaves as a client-rendered application. (",[29,9134,8374],{"href":8372,"rel":9135},[33],[17,9137,9138],{},"That is one of the most important architectural advantages of Nuxt's rendering system.",[12,9140,9142],{"id":9141},"swr-vs-isr","SWR vs ISR",[17,9144,9145],{},"SWR and ISR are closely related, but they should not automatically be treated as interchangeable names.",[909,9147,8408],{"id":9148},"swr",[17,9150,9151],{},"With:",[179,9153,9155],{"className":8774,"code":9154,"language":8776,"meta":185,"style":185},"'\u002Fproducts\u002F**': {\n  swr: 3600,\n}\n",[129,9156,9157,9164,9173],{"__ignoreMap":185},[161,9158,9159,9162],{"class":299,"line":300},[161,9160,9161],{"class":321},"'\u002Fproducts\u002F**'",[161,9163,9054],{"class":303},[161,9165,9166,9169,9171],{"class":299,"line":311},[161,9167,9168],{"class":303},"  swr: ",[161,9170,9062],{"class":384},[161,9172,830],{"class":303},[161,9174,9175],{"class":299,"line":325},[161,9176,413],{"class":303},[17,9178,9179],{},"Nuxt can cache the rendered response for a configured TTL. Once the cached response becomes stale, the existing response can still be served while a newer version is regenerated in the background.",[17,9181,9182],{},"The objective is to avoid rendering the same expensive page on every request while still allowing it to refresh.",[909,9184,8414],{"id":9185},"isr",[17,9187,1399],{},[179,9189,9191],{"className":8774,"code":9190,"language":8776,"meta":185,"style":185},"'\u002Fblog\u002F**': {\n  isr: 3600,\n}\n",[129,9192,9193,9200,9209],{"__ignoreMap":185},[161,9194,9195,9198],{"class":299,"line":300},[161,9196,9197],{"class":321},"'\u002Fblog\u002F**'",[161,9199,9054],{"class":303},[161,9201,9202,9205,9207],{"class":299,"line":311},[161,9203,9204],{"class":303},"  isr: ",[161,9206,9062],{"class":384},[161,9208,830],{"class":303},[161,9210,9211],{"class":299,"line":325},[161,9212,413],{"class":303},[17,9214,9215,9216,35],{},"Nuxt documents ISR as having similar regeneration behavior, but with integration into the CDN cache on supported platforms. The Nuxt rendering documentation currently identifies Netlify and Vercel support for this route-rule behavior. (",[29,9217,8374],{"href":8372,"rel":9218},[33],[17,9220,9221],{},"Deployment platform therefore matters. Do not select ISR merely because the acronym sounds preferable to SWR.",[17,9223,9224],{},[161,9225,9226],{},"INTERNAL LINK: ISR vs SWR in Nuxt",[12,9228,9230],{"id":9229},"edge-rendering","Edge Rendering",[17,9232,9233,9234],{},"Edge-side rendering is often grouped with Nuxt rendering modes, but Nuxt itself makes an important distinction: ",[21,9235,9236],{},"edge rendering is more accurately a deployment target than a separate rendering mode.",[17,9238,9239,9240,35],{},"The page is still server-rendered. The difference is that execution happens in an edge environment closer to the requester rather than exclusively on one traditional origin server. (",[29,9241,8374],{"href":8372,"rel":9242},[33],[17,9244,9245,9246,35],{},"Nitro is what allows Nuxt applications to target multiple server environments, including conventional servers, serverless platforms, and edge runtimes. (",[29,9247,8374],{"href":9002,"rel":9248},[33],[17,9250,9251],{},"Edge deployment can reduce network distance, but it does not automatically make every application faster. Database location, API calls, runtime restrictions, cache strategy, and cold-start behavior still matter.",[12,9253,9255],{"id":9254},"choosing-a-strategy","Choosing a Strategy",[17,9257,9258],{},"A useful decision process is to ask two questions for each route:",[17,9260,9261],{},[21,9262,9263],{},"Does this page need request-specific HTML?",[17,9265,9266],{},"If no, prerendering may be enough.",[17,9268,9269],{},[21,9270,9271],{},"How quickly must changes become visible?",[17,9273,9274],{},"If content changes only with deployments, prerender it. If it changes occasionally, caching through SWR or ISR may be appropriate. If it must reflect each request, normal SSR may be simpler. If it is private and highly interactive, client-side rendering can be reasonable.",[17,9276,9277],{},"This often leads to an architecture such as:",[179,9279,9282],{"className":9280,"code":9281,"language":184,"meta":185},[182],"Marketing pages  → prerender\nBlog             → prerender or ISR\nProduct catalog  → SWR \u002F ISR\nSearch results   → SSR\nUser dashboard   → CSR or SSR\nAccount data     → dynamic server APIs\n",[129,9283,9281],{"__ignoreMap":185},[17,9285,9286],{},"There is no universal rule requiring one rendering strategy for the entire project.",[12,9288,4702],{"id":4701},[17,9290,9291,9292,9295],{},"One common mistake is treating ",[21,9293,9294],{},"SSR and static generation as competing frameworks",". They are rendering strategies that Nuxt can combine.",[17,9297,9298,9299,9301],{},"Another is enabling ",[129,9300,8397],{}," globally because one browser-dependent component causes problems. A client-only component or route-specific configuration may solve the actual problem without converting the entire public website to CSR.",[17,9303,9304],{},"The opposite mistake is rendering every request dynamically even when the output rarely changes. That spends server resources producing HTML that could have been generated or cached once.",[17,9306,9307,9308,9311],{},"Finally, do not confuse ",[21,9309,9310],{},"edge rendering with prerendering",". A prerendered page is generated before the request. An edge-rendered page may still be generated dynamically when a request arrives.",[12,9313,887],{"id":886},[17,9315,9316],{},"Start with Nuxt's default universal rendering unless the application's requirements give you a clear reason not to.",[17,9318,9319],{},"Then optimize at the route level:",[179,9321,9324],{"className":9322,"code":9323,"language":184,"meta":185},[182],"Static enough?      → prerender\nReusable briefly?   → SWR\nCDN regeneration?   → ISR where supported\nRequest-specific?   → SSR\nPrivate app UI?      → consider CSR\n",[129,9325,9323],{"__ignoreMap":185},[17,9327,9328],{},"Measure the actual behavior after deployment rather than assuming that one architecture is inherently faster. Response caching, JavaScript size, API latency, hydration cost, CDN configuration, and data dependencies can matter as much as the rendering label itself.",[12,9330,907],{"id":906},[909,9332,9334],{"id":9333},"is-nuxt-4-ssr-by-default","Is Nuxt 4 SSR by default?",[17,9336,9337,9338,9340,9341,9343,9344,35],{},"Yes. Nuxt's ",[129,9339,8562],{}," configuration defaults to ",[129,9342,8566],{},", and its standard model uses universal rendering. (",[29,9345,8374],{"href":8569,"rel":9346},[33],[909,9348,9350],{"id":9349},"is-prerendering-the-same-as-ssr","Is prerendering the same as SSR?",[17,9352,9353],{},"Not exactly. Both can produce HTML before the browser renders the application, but SSR normally creates HTML in response to a request, while prerendering creates it during the build.",[909,9355,9357],{"id":9356},"can-one-nuxt-site-use-multiple-modes","Can one Nuxt site use multiple modes?",[17,9359,9360,9361,9363,9364,35],{},"Yes. Hybrid rendering and ",[129,9362,8364],{}," allow different routes to use prerendering, caching, SSR, or client-side rendering. (",[29,9365,8374],{"href":8372,"rel":9366},[33],[909,9368,9370],{"id":9369},"does-csr-prevent-google-indexing","Does CSR prevent Google indexing?",[17,9372,9373,9374,35],{},"No. Google can execute JavaScript during its rendering process. However, server-rendered or prerendered HTML reduces reliance on client-side execution, and other crawlers may have different JavaScript capabilities. (",[29,9375,157],{"href":2807,"rel":9376},[33],[909,9378,9380],{"id":9379},"is-edge-rendering-another-form-of-static-generation","Is edge rendering another form of static generation?",[17,9382,9383],{},"No. Edge rendering describes where server-side execution occurs. Static generation describes when HTML is generated.",[12,9385,960],{"id":959},[17,9387,9388],{},"Nuxt 4 rendering is best understood as a toolbox rather than a single SSR-versus-SPA switch.",[17,9390,9391],{},"Universal rendering is the default foundation. Prerendering removes unnecessary request-time work for stable pages. SWR and ISR reuse generated responses when content does not need to be rebuilt on every request. CSR remains useful for browser-focused application areas. Hybrid rendering connects those strategies so each route can use the behavior that matches its actual requirements.",[17,9393,9394,9395],{},"The question is therefore not ",[21,9396,9397],{},"\"Which Nuxt rendering mode is best?\"",[17,9399,8171,9400],{},[21,9401,9402],{},"\"What does this particular route need?\"",[12,9404,976],{"id":975},[978,9406,9407,9420,9433,9448,9464,9477,9490],{},[981,9408,9409,9412,9413,6460,9416],{},[21,9410,9411],{},"Nuxt — Rendering Modes, Nuxt 4 documentation."," Primary reference for universal rendering, CSR, hybrid rendering, route rules, SWR, ISR and edge-side rendering. (",[29,9414,8374],{"href":8372,"rel":9415},[33],[29,9417,9419],{"href":8372,"rel":9418},[33],"Nuxt: Rendering Modes",[981,9421,9422,9425,9426,6460,9429],{},[21,9423,9424],{},"Nuxt — Prerendering, Nuxt 4 documentation."," Primary reference for build-time generation and prerender crawling. (",[29,9427,8374],{"href":8929,"rel":9428},[33],[29,9430,9432],{"href":8929,"rel":9431},[33],"Nuxt: Prerendering",[981,9434,9435,9438,9439,239,9441,6460,9444],{},[21,9436,9437],{},"Nuxt — Server, Nuxt 4 documentation."," Reference for Nitro, universal deployment and hybrid ",[129,9440,8364],{},[29,9442,8374],{"href":9002,"rel":9443},[33],[29,9445,9447],{"href":9002,"rel":9446},[33],"Nuxt: Server",[981,9449,9450,9453,9454,9456,9457,6460,9460],{},[21,9451,9452],{},"Nuxt — Configuration Reference, Nuxt 4."," Reference for the ",[129,9455,8562],{}," configuration option and its default value. (",[29,9458,8374],{"href":8569,"rel":9459},[33],[29,9461,9463],{"href":8569,"rel":9462},[33],"Nuxt: Configuration Reference",[981,9465,9466,9469,9470,6460,9473],{},[21,9467,9468],{},"Vue.js — Server-Side Rendering."," Reference for Vue SSR, client hydration and hydration mismatches. (",[29,9471,8598],{"href":8596,"rel":9472},[33],[29,9474,9476],{"href":8596,"rel":9475},[33],"Vue.js: Server-Side Rendering",[981,9478,9479,9482,9483,6460,9486],{},[21,9480,9481],{},"Google Search Central — Understand the JavaScript SEO Basics."," Reference for Google's crawling, JavaScript rendering and indexing process. (",[29,9484,157],{"href":2807,"rel":9485},[33],[29,9487,9489],{"href":2807,"rel":9488},[33],"Google: JavaScript SEO Basics",[981,9491,9492,9495,9496,6460,9500],{},[21,9493,9494],{},"Google Search Central — Dynamic Rendering as a Workaround."," Reference for Google's current preference for SSR, static rendering or hydration rather than dynamic rendering workarounds. (",[29,9497,157],{"href":9498,"rel":9499},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fcrawling-indexing\u002Fjavascript\u002Fdynamic-rendering?authuser=683989221&utm_source=chatgpt.com",[33],[29,9501,9504],{"href":9502,"rel":9503},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fcrawling-indexing\u002Fjavascript\u002Fdynamic-rendering?utm_source=chatgpt.com",[33],"Google: Dynamic Rendering",[1067,9506,9507],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}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 .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":185,"searchDepth":311,"depth":311,"links":9509},[9510,9511,9512,9513,9516,9517,9518,9519,9520,9521,9522,9523,9524,9525,9526],{"id":8355,"depth":311,"text":8350},{"id":1151,"depth":311,"text":1152},{"id":8433,"depth":311,"text":8434},{"id":8555,"depth":311,"text":8556,"children":9514},[9515],{"id":8745,"depth":325,"text":8746},{"id":8767,"depth":311,"text":8768},{"id":8875,"depth":311,"text":8402},{"id":8963,"depth":311,"text":8964},{"id":9141,"depth":311,"text":9142},{"id":9229,"depth":311,"text":9230},{"id":9254,"depth":311,"text":9255},{"id":4701,"depth":311,"text":4702},{"id":886,"depth":311,"text":887},{"id":906,"depth":311,"text":907},{"id":959,"depth":311,"text":960},{"id":975,"depth":311,"text":976},"Understand Nuxt 4 rendering modes, including SSR, CSR, prerendering, SWR, ISR, hybrid rendering and edge rendering, with practical examples and routeRules.","\u002Frendering-mode.png","Image of Nuxt 4 Rendering Modes",{},"\u002Fblog\u002Fen\u002Fnuxt-rendering-modes",{"title":8350,"description":9527},"nuxt-rendering-modes","blog\u002Fen\u002Fnuxt-rendering-modes","Lc2hrdFBXp-J5ufeQgUER3FhJ70TSvREUEkBMqhOm_c",{"id":9537,"title":9538,"author":7,"body":9539,"category":2018,"description":10294,"draft":1097,"extension":1098,"featured":1099,"image":10295,"imageAlt":10296,"locale":1102,"meta":10297,"navigation":1099,"path":10298,"publishedAt":6925,"seo":10299,"slug":10300,"stem":10301,"translationKey":10300,"updatedAt":6925,"__hash__":10302},"blog\u002Fblog\u002Fen\u002Fproxy-architecture.md","Reverse Proxy Architecture Explained: How It Works",{"type":9,"value":9540,"toc":10276},[9541,9545,9555,9558,9560,9566,9577,9580,9586,9589,9595,9597,9667,9670,9674,9677,9683,9686,9692,9702,9710,9713,9719,9722,9726,9729,9735,9741,9746,9752,9758,9763,9767,9770,9785,9788,9817,9820,9824,9827,9829,9835,9838,9844,9851,9854,9859,9863,9866,9872,9875,9882,9888,9892,9895,9913,9916,10019,10029,10032,10036,10039,10045,10052,10055,10060,10064,10067,10081,10084,10090,10093,10095,10098,10101,10110,10113,10115,10118,10121,10131,10133,10137,10140,10144,10151,10155,10158,10163,10167,10170,10174,10181,10183,10186,10189,10192,10194,10273],[12,9542,9544],{"id":9543},"reverse-proxy-architecture-explained","Reverse Proxy Architecture Explained",[17,9546,9547,9548,9550,9551,9554],{},"A user opens ",[129,9549,7195],{},", but the application that actually generates the response may be running on another port, another server, or one of several backend machines. The user does not need to know that. A ",[21,9552,9553],{},"reverse proxy"," sits between the client and those backend services, receives the public request, decides where it should go, forwards it, and returns the backend response.",[17,9556,9557],{},"That simple position in the request path makes a reverse proxy useful for much more than forwarding traffic. It can centralize HTTPS, route requests, distribute load, cache responses, hide internal services, and provide one controlled entry point into an application architecture.",[12,9559,1152],{"id":1151},[17,9561,1451,9562,9565],{},[21,9563,9564],{},"reverse proxy is a server that accepts requests on behalf of one or more backend servers",". To the client, the reverse proxy behaves like the destination server. Internally, it forwards the request to an appropriate upstream service and sends the resulting response back to the client.",[17,9567,9568,9569,9572,9573,35],{},"HTTP terminology is slightly more precise: RFC 9110 describes a reverse proxy as a type of ",[21,9570,9571],{},"gateway","—an intermediary that appears as an origin server on the client-facing side while forwarding requests toward other servers. (",[29,9574,1486],{"href":9575,"rel":9576},"https:\u002F\u002Fwww.rfc-editor.org\u002Frfc\u002Frfc9110.html?utm_source=chatgpt.com",[33],[17,9578,9579],{},"A typical request therefore looks like this:",[179,9581,9584],{"className":9582,"code":9583,"language":184,"meta":185},[182],"Browser\n   ↓\nReverse Proxy\n   ↓\nApplication Server\n   ↓\nDatabase\n",[129,9585,9583],{"__ignoreMap":185},[17,9587,9588],{},"With multiple applications or servers:",[179,9590,9593],{"className":9591,"code":9592,"language":184,"meta":185},[182],"                    ┌── App Server 1\nClient → Reverse Proxy ── App Server 2\n                    └── API Server\n",[129,9594,9592],{"__ignoreMap":185},[12,9596,2081],{"id":2080},[69,9598,9599,9609],{},[72,9600,9601],{},[75,9602,9603,9606],{},[78,9604,9605],{},"Function",[78,9607,9608],{},"What the reverse proxy can do",[85,9610,9611,9619,9627,9635,9643,9651,9659],{},[75,9612,9613,9616],{},[90,9614,9615],{},"Routing",[90,9617,9618],{},"Send requests to different applications or services",[75,9620,9621,9624],{},[90,9622,9623],{},"Load balancing",[90,9625,9626],{},"Distribute traffic between multiple backend servers",[75,9628,9629,9632],{},[90,9630,9631],{},"TLS termination",[90,9633,9634],{},"Handle HTTPS before forwarding traffic internally",[75,9636,9637,9640],{},[90,9638,9639],{},"Caching",[90,9641,9642],{},"Reuse eligible responses without contacting the origin every time",[75,9644,9645,9648],{},[90,9646,9647],{},"Header handling",[90,9649,9650],{},"Preserve or add information about the original request",[75,9652,9653,9656],{},[90,9654,9655],{},"Isolation",[90,9657,9658],{},"Keep backend servers away from direct public access",[75,9660,9661,9664],{},[90,9662,9663],{},"Observability",[90,9665,9666],{},"Centralize access logs, timing data and request metadata",[17,9668,9669],{},"Not every reverse proxy performs all of these functions. Its behavior depends on configuration and architecture.",[12,9671,9673],{"id":9672},"what-is-a-reverse-proxy","What Is a Reverse Proxy?",[17,9675,9676],{},"Consider a website whose public address is:",[179,9678,9681],{"className":9679,"code":9680,"language":184,"meta":185},[182],"https:\u002F\u002Fexample.com\n",[129,9682,9680],{"__ignoreMap":185},[17,9684,9685],{},"Internally, the actual application might run at:",[179,9687,9690],{"className":9688,"code":9689,"language":184,"meta":185},[182],"http:\u002F\u002F10.0.1.12:8080\n",[129,9691,9689],{"__ignoreMap":185},[17,9693,9694,9695,9698,9699,9701],{},"Instead of exposing ",[129,9696,9697],{},"10.0.1.12:8080"," to users, a reverse proxy listens on the public endpoint. When a request arrives for ",[129,9700,7195],{},", the proxy forwards it to the internal application.",[17,9703,9704,9705,35],{},"NGINX describes this process as receiving a request, sending it to a configured proxied server, retrieving the response, and returning that response to the client. (",[29,9706,9709],{"href":9707,"rel":9708},"https:\u002F\u002Fdocs.nginx.com\u002Fnginx\u002Fadmin-guide\u002Fweb-server\u002Freverse-proxy?utm_source=chatgpt.com",[33],"docs.nginx.com",[17,9711,9712],{},"This creates an important abstraction:",[179,9714,9717],{"className":9715,"code":9716,"language":184,"meta":185},[182],"Public architecture:\nUser → example.com\n\nActual architecture:\nUser → Reverse Proxy → Internal Service\n",[129,9718,9716],{"__ignoreMap":185},[17,9720,9721],{},"The internal service can later move to another machine or be replaced by several servers without requiring users to know the infrastructure changed.",[12,9723,9725],{"id":9724},"reverse-vs-forward-proxy","Reverse vs Forward Proxy",[17,9727,9728],{},"The two terms are easy to confuse.",[17,9730,1451,9731,9734],{},[21,9732,9733],{},"forward proxy"," represents the client. The client deliberately sends traffic through it toward external servers.",[179,9736,9739],{"className":9737,"code":9738,"language":184,"meta":185},[182],"Client → Forward Proxy → Internet\n",[129,9740,9738],{"__ignoreMap":185},[17,9742,1451,9743,9745],{},[21,9744,9553],{}," represents the server side. Clients normally connect to the public service without needing to know which backend ultimately processes the request.",[179,9747,9750],{"className":9748,"code":9749,"language":184,"meta":185},[182],"Internet → Reverse Proxy → Backend\n",[129,9751,9749],{"__ignoreMap":185},[17,9753,9754,9755,35],{},"RFC 9110 distinguishes these intermediary roles and refers to reverse proxies as gateways. (",[29,9756,1486],{"href":9575,"rel":9757},[33],[17,9759,9760],{},[161,9761,9762],{},"INTERNAL LINK: Forward Proxy vs Reverse Proxy",[12,9764,9766],{"id":9765},"how-requests-flow","How Requests Flow",[17,9768,9769],{},"Suppose the browser requests:",[179,9771,9773],{"className":5722,"code":9772,"language":5724,"meta":185,"style":185},"GET \u002Fapi\u002Fproducts HTTP\u002F1.1\nHost: example.com\n",[129,9774,9775,9780],{"__ignoreMap":185},[161,9776,9777],{"class":299,"line":300},[161,9778,9779],{},"GET \u002Fapi\u002Fproducts HTTP\u002F1.1\n",[161,9781,9782],{"class":299,"line":311},[161,9783,9784],{},"Host: example.com\n",[17,9786,9787],{},"The reverse proxy receives the request first. It may then:",[978,9789,9790,9793,9796,9799,9802,9805,9808,9811,9814],{},[981,9791,9792],{},"terminate the TLS connection;",[981,9794,9795],{},"inspect the hostname or URL path;",[981,9797,9798],{},"select an upstream server;",[981,9800,9801],{},"modify or add request headers;",[981,9803,9804],{},"open or reuse a connection to that upstream;",[981,9806,9807],{},"forward the request;",[981,9809,9810],{},"receive the upstream response;",[981,9812,9813],{},"optionally buffer or cache it;",[981,9815,9816],{},"return the response to the client.",[17,9818,9819],{},"A reverse proxy is therefore not merely redirecting the browser. With an HTTP redirect, the client is told to make another request somewhere else. With proxying, the backend communication happens behind the proxy and is normally invisible to the client.",[12,9821,9823],{"id":9822},"routing-and-load-balancing","Routing and Load Balancing",[17,9825,9826],{},"One reverse proxy can expose several internal applications.",[17,9828,1399],{},[179,9830,9833],{"className":9831,"code":9832,"language":184,"meta":185},[182],"example.com\u002F        → frontend\nexample.com\u002Fapi\u002F    → API service\nexample.com\u002Fadmin\u002F  → admin application\n",[129,9834,9832],{"__ignoreMap":185},[17,9836,9837],{},"It can also distribute requests between several instances of the same application:",[179,9839,9842],{"className":9840,"code":9841,"language":184,"meta":185},[182],"              ┌→ app-1\nClient → Proxy ├→ app-2\n              └→ app-3\n",[129,9843,9841],{"__ignoreMap":185},[17,9845,9846,9847,35],{},"NGINX supports server groups for this purpose. Its default HTTP load-balancing method is round-robin when no different method is configured. Other strategies can account for factors such as active connections or configured server weights. (",[29,9848,7367],{"href":9849,"rel":9850},"https:\u002F\u002Fnginx.org\u002Fen\u002Fdocs\u002Fhttp\u002Fload_balancing.html?utm_source=chatgpt.com",[33],[17,9852,9853],{},"Load balancing and reverse proxying are therefore related, but they are not identical concepts. A reverse proxy may forward everything to one backend; a load-balancing reverse proxy chooses between several.",[17,9855,9856],{},[161,9857,9858],{},"INTERNAL LINK: Load Balancing Explained",[12,9860,9862],{"id":9861},"tls-termination","TLS Termination",[17,9864,9865],{},"A common architecture is:",[179,9867,9870],{"className":9868,"code":9869,"language":184,"meta":185},[182],"Browser\n   │ HTTPS\n   ↓\nReverse Proxy\n   │ HTTP or HTTPS\n   ↓\nApplication\n",[129,9871,9869],{"__ignoreMap":185},[17,9873,9874],{},"The public TLS connection can terminate at the reverse proxy. The proxy owns the certificate and performs the TLS handshake, then creates a separate connection toward the backend.",[17,9876,9877,9878,35],{},"NGINX, for example, can listen on HTTPS endpoints using a configured certificate and private key. Modern NGINX documentation lists TLS 1.2 and TLS 1.3 as its default enabled protocol versions. (",[29,9879,7367],{"href":9880,"rel":9881},"https:\u002F\u002Fnginx.org\u002Fen\u002Fdocs\u002Fhttp\u002Fconfiguring_https_servers.html?utm_source=chatgpt.com",[33],[17,9883,9884,9885,9887],{},"Whether the proxy-to-backend connection should also use TLS depends on the trust boundary, network topology and security requirements. “TLS termination at the proxy” does ",[21,9886,151],{}," automatically mean internal traffic should always be unencrypted.",[12,9889,9891],{"id":9890},"preserving-request-information","Preserving Request Information",[17,9893,9894],{},"A backend directly connected to a reverse proxy sees the proxy as its network peer. Without additional metadata, information such as the original client address or protocol may be unavailable to the application.",[17,9896,9897,9898,9901,9902,420,9905,9908,9909,35],{},"RFC 7239 defines the standardized ",[129,9899,9900],{},"Forwarded"," request header for carrying information such as the original requester, host and protocol through proxies. It also notes that non-standard headers including ",[129,9903,9904],{},"X-Forwarded-For",[129,9906,9907],{},"X-Forwarded-Proto"," are commonly used. (",[29,9910,1486],{"href":9911,"rel":9912},"https:\u002F\u002Fwww.rfc-editor.org\u002Frfc\u002Frfc7239.html?utm_source=chatgpt.com",[33],[17,9914,9915],{},"For example, an NGINX configuration might contain:",[179,9917,9919],{"className":7338,"code":9918,"language":7340,"meta":185,"style":185},"upstream app_backend {\n    server app1:8080;\n    server app2:8080;\n}\n\nserver {\n    listen 443 ssl;\n    server_name example.com;\n\n    ssl_certificate     \u002Fetc\u002Fnginx\u002Fexample.com.crt;\n    ssl_certificate_key \u002Fetc\u002Fnginx\u002Fexample.com.key;\n\n    location \u002F {\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n\n        proxy_pass http:\u002F\u002Fapp_backend;\n    }\n}\n",[129,9920,9921,9926,9931,9936,9940,9944,9949,9954,9959,9963,9968,9973,9977,9982,9987,9992,9997,10002,10006,10011,10015],{"__ignoreMap":185},[161,9922,9923],{"class":299,"line":300},[161,9924,9925],{},"upstream app_backend {\n",[161,9927,9928],{"class":299,"line":311},[161,9929,9930],{},"    server app1:8080;\n",[161,9932,9933],{"class":299,"line":325},[161,9934,9935],{},"    server app2:8080;\n",[161,9937,9938],{"class":299,"line":336},[161,9939,413],{},[161,9941,9942],{"class":299,"line":347},[161,9943,3024],{"emptyLinePlaceholder":1099},[161,9945,9946],{"class":299,"line":358},[161,9947,9948],{},"server {\n",[161,9950,9951],{"class":299,"line":809},[161,9952,9953],{},"    listen 443 ssl;\n",[161,9955,9956],{"class":299,"line":821},[161,9957,9958],{},"    server_name example.com;\n",[161,9960,9961],{"class":299,"line":833},[161,9962,3024],{"emptyLinePlaceholder":1099},[161,9964,9965],{"class":299,"line":842},[161,9966,9967],{},"    ssl_certificate     \u002Fetc\u002Fnginx\u002Fexample.com.crt;\n",[161,9969,9970],{"class":299,"line":3064},[161,9971,9972],{},"    ssl_certificate_key \u002Fetc\u002Fnginx\u002Fexample.com.key;\n",[161,9974,9975],{"class":299,"line":3070},[161,9976,3024],{"emptyLinePlaceholder":1099},[161,9978,9979],{"class":299,"line":3075},[161,9980,9981],{},"    location \u002F {\n",[161,9983,9984],{"class":299,"line":3080},[161,9985,9986],{},"        proxy_set_header Host $host;\n",[161,9988,9989],{"class":299,"line":3086},[161,9990,9991],{},"        proxy_set_header X-Real-IP $remote_addr;\n",[161,9993,9994],{"class":299,"line":3091},[161,9995,9996],{},"        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n",[161,9998,9999],{"class":299,"line":3096},[161,10000,10001],{},"        proxy_set_header X-Forwarded-Proto $scheme;\n",[161,10003,10004],{"class":299,"line":3101},[161,10005,3024],{"emptyLinePlaceholder":1099},[161,10007,10008],{"class":299,"line":3107},[161,10009,10010],{},"        proxy_pass http:\u002F\u002Fapp_backend;\n",[161,10012,10013],{"class":299,"line":3112},[161,10014,801],{},[161,10016,10017],{"class":299,"line":3117},[161,10018,413],{},[17,10020,10021,10022,10025,10026,35],{},"NGINX documents ",[129,10023,10024],{},"proxy_set_header"," specifically for controlling request headers passed to upstream servers. (",[29,10027,9709],{"href":9707,"rel":10028},[33],[17,10030,10031],{},"Applications should only trust forwarded client information from known, trusted proxies. Accepting arbitrary client-supplied forwarding headers can produce incorrect client identity or security decisions.",[12,10033,10035],{"id":10034},"reverse-proxy-caching","Reverse Proxy Caching",[17,10037,10038],{},"A reverse proxy can sometimes answer a request from cache instead of contacting the application.",[179,10040,10043],{"className":10041,"code":10042,"language":184,"meta":185},[182],"First request:\nClient → Proxy → Application\n\nLater cache hit:\nClient → Proxy\n",[129,10044,10042],{"__ignoreMap":185},[17,10046,10047,10048,35],{},"RFC 9111 defines shared HTTP caches and explains that reusing stored responses can reduce response time and network traffic. Cacheability still depends on HTTP caching rules and response directives; a proxy should not simply cache every response. (",[29,10049,1486],{"href":10050,"rel":10051},"https:\u002F\u002Fwww.rfc-editor.org\u002Frfc\u002Frfc9111.html?utm_source=chatgpt.com",[33],[17,10053,10054],{},"This distinction matters for authenticated or personalized content. Incorrect cache configuration can expose one user's response to another user or serve stale information.",[17,10056,10057],{},[161,10058,10059],{},"INTERNAL LINK: HTTP Caching Explained",[12,10061,10063],{"id":10062},"diagnosing-proxy-failures","Diagnosing Proxy Failures",[17,10065,10066],{},"Two common reverse-proxy errors reveal where to investigate.",[17,10068,10069,10072,10073,10076,10077,35],{},[21,10070,10071],{},"502 Bad Gateway"," means the gateway or proxy received an invalid response from its upstream server. ",[21,10074,10075],{},"504 Gateway Timeout"," means the gateway did not receive the required upstream response within the allowed time. (",[29,10078,5987],{"href":10079,"rel":10080},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FHTTP\u002FReference\u002FStatus\u002F502?utm_source=chatgpt.com",[33],[17,10082,10083],{},"A useful diagnostic flow is:",[179,10085,10088],{"className":10086,"code":10087,"language":184,"meta":185},[182],"SYMPTOM\n502 \u002F 504\n\n↓ MEASURE\nProxy logs and upstream timing\n\n↓ POSSIBLE CAUSE\nApplication failure\nWrong upstream address\nConnection refused\nDNS failure\nTimeout\nFirewall\u002Fnetwork problem\n\n↓ CONFIRM\nConnect to the upstream directly from the proxy host\n\n↓ FIX\nCorrect the failing layer\n\n↓ RE-MEASURE\nRepeat the request and inspect logs\n",[129,10089,10087],{"__ignoreMap":185},[17,10091,10092],{},"Do not automatically increase timeouts when a 504 appears. A slow database query, overloaded application or failed dependency may be the actual problem.",[12,10094,4702],{"id":4701},[17,10096,10097],{},"One mistake is treating the reverse proxy as an invisible component that needs no monitoring. Once all traffic passes through it, proxy failures can affect every backend behind it.",[17,10099,10100],{},"Another is trusting forwarded IP headers without defining trusted proxy boundaries. The application must understand which intermediary is authorized to provide client information.",[17,10102,10103,10104,10106,10107,35],{},"Caching personalized responses without understanding ",[129,10105,7864],{},", authentication and cache keys is another serious configuration risk. RFC 9111 places explicit restrictions on when shared caches may store and reuse responses. (",[29,10108,1486],{"href":10050,"rel":10109},[33],[17,10111,10112],{},"Finally, adding a reverse proxy does not automatically make an application faster. It introduces another network hop and another component to operate. Performance improvements come from capabilities such as connection management, caching, compression or load distribution—not from the label “reverse proxy” itself.",[12,10114,887],{"id":886},[17,10116,10117],{},"Use a reverse proxy when it provides a clear architectural boundary: public traffic enters through one controlled layer while application services remain independently deployable behind it.",[17,10119,10120],{},"Keep the design simple at first. Configure routing, HTTPS, forwarded headers, logging and sensible upstream timeouts deliberately. Add caching or advanced load balancing only when the application actually needs them.",[17,10122,10123,10124,420,10127,10130],{},"For production systems, monitor both sides of the proxy: ",[21,10125,10126],{},"client → proxy",[21,10128,10129],{},"proxy → upstream",". A total request duration alone cannot tell you which side introduced the delay.",[12,10132,907],{"id":906},[909,10134,10136],{"id":10135},"does-a-reverse-proxy-hide-the-backend-server","Does a reverse proxy hide the backend server?",[17,10138,10139],{},"It can prevent users from directly interacting with the backend endpoint, but that alone is not a complete security boundary. Network rules should also restrict unintended direct access.",[909,10141,10143],{"id":10142},"is-nginx-always-a-reverse-proxy","Is NGINX always a reverse proxy?",[17,10145,10146,10147,35],{},"No. NGINX can operate as a web server, reverse proxy, cache, load balancer and in other roles depending on configuration. (",[29,10148,7367],{"href":10149,"rel":10150},"https:\u002F\u002Fnginx.org\u002Fen\u002F?utm_source=chatgpt.com",[33],[909,10152,10154],{"id":10153},"is-a-cdn-a-reverse-proxy","Is a CDN a reverse proxy?",[17,10156,10157],{},"Many CDN architectures behave as reverse proxies because users connect to the CDN infrastructure while it retrieves or serves content on behalf of an origin. However, CDN architecture includes additional distributed caching and delivery concepts that deserve separate treatment.",[17,10159,10160],{},[161,10161,10162],{},"INTERNAL LINK: How a CDN Works",[909,10164,10166],{"id":10165},"does-a-reverse-proxy-replace-a-load-balancer","Does a reverse proxy replace a load balancer?",[17,10168,10169],{},"Not necessarily. Reverse proxying describes the intermediary relationship, while load balancing describes how traffic is distributed. The same system can perform both functions.",[909,10171,10173],{"id":10172},"can-a-reverse-proxy-handle-websockets","Can a reverse proxy handle WebSockets?",[17,10175,10176,10177,35],{},"Yes, when the proxy supports them and is configured correctly. NGINX, for example, documents special configuration requirements for WebSocket proxying. (",[29,10178,7367],{"href":10179,"rel":10180},"https:\u002F\u002Fnginx.org\u002Fen\u002Fdocs\u002Fhttp\u002Fngx_http_proxy_module.html?utm_source=chatgpt.com",[33],[12,10182,960],{"id":959},[17,10184,10185],{},"A reverse proxy creates a controlled boundary between public clients and backend infrastructure.",[17,10187,10188],{},"Instead of every client connecting directly to every application server, traffic enters through the proxy. That proxy can then route requests, terminate TLS, preserve request metadata, distribute traffic, cache eligible responses and isolate internal services.",[17,10190,10191],{},"The architecture becomes especially valuable as a system grows because the public interface can remain stable while the infrastructure behind it changes.",[12,10193,976],{"id":975},[978,10195,10196,10206,10216,10226,10237,10247,10257],{},[981,10197,10198,10201,10202],{},[21,10199,10200],{},"IETF — RFC 9110: HTTP Semantics",", June 2022. Definition of HTTP intermediaries, gateways and reverse proxies. ",[29,10203,10205],{"href":9575,"rel":10204},[33],"RFC 9110 — HTTP Semantics",[981,10207,10208,10211,10212],{},[21,10209,10210],{},"IETF — RFC 7239: Forwarded HTTP Extension",", June 2014. Standardized forwarding of client, host and protocol information through proxies. ",[29,10213,10215],{"href":9911,"rel":10214},[33],"RFC 7239 — Forwarded HTTP Extension",[981,10217,10218,10221,10222],{},[21,10219,10220],{},"IETF — RFC 9111: HTTP Caching",", June 2022. HTTP cache behavior and shared-cache requirements. ",[29,10223,10225],{"href":10050,"rel":10224},[33],"RFC 9111 — HTTP Caching",[981,10227,10228,10231,10232],{},[21,10229,10230],{},"NGINX Documentation — NGINX Reverse Proxy."," Request forwarding, headers and response buffering. ",[29,10233,10236],{"href":10234,"rel":10235},"https:\u002F\u002Fdocs.nginx.com\u002Fnginx\u002Fadmin-guide\u002Fweb-server\u002Freverse-proxy\u002F?utm_source=chatgpt.com",[33],"NGINX Reverse Proxy documentation",[981,10238,10239,10242,10243],{},[21,10240,10241],{},"NGINX Documentation — Using nginx as HTTP Load Balancer."," Upstream server groups and load-balancing behavior. ",[29,10244,10246],{"href":9849,"rel":10245},[33],"NGINX HTTP Load Balancing documentation",[981,10248,10249,10252,10253],{},[21,10250,10251],{},"NGINX Documentation — Configuring HTTPS Servers."," TLS certificates and HTTPS server configuration. ",[29,10254,10256],{"href":9880,"rel":10255},[33],"NGINX HTTPS documentation",[981,10258,10259,10262,10263,10267,10268],{},[21,10260,10261],{},"MDN Web Docs — 502 Bad Gateway \u002F 504 Gateway Timeout."," Gateway failure semantics and upstream timeout distinction. ",[29,10264,10266],{"href":10079,"rel":10265},[33],"MDN — 502 Bad Gateway"," · ",[29,10269,10272],{"href":10270,"rel":10271},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FHTTP\u002FReference\u002FStatus\u002F504?utm_source=chatgpt.com",[33],"MDN — 504 Gateway Timeout",[1067,10274,10275],{},"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 .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":185,"searchDepth":311,"depth":311,"links":10277},[10278,10279,10280,10281,10282,10283,10284,10285,10286,10287,10288,10289,10290,10291,10292,10293],{"id":9543,"depth":311,"text":9544},{"id":1151,"depth":311,"text":1152},{"id":2080,"depth":311,"text":2081},{"id":9672,"depth":311,"text":9673},{"id":9724,"depth":311,"text":9725},{"id":9765,"depth":311,"text":9766},{"id":9822,"depth":311,"text":9823},{"id":9861,"depth":311,"text":9862},{"id":9890,"depth":311,"text":9891},{"id":10034,"depth":311,"text":10035},{"id":10062,"depth":311,"text":10063},{"id":4701,"depth":311,"text":4702},{"id":886,"depth":311,"text":887},{"id":906,"depth":311,"text":907},{"id":959,"depth":311,"text":960},{"id":975,"depth":311,"text":976},"Learn how reverse proxy architecture works, including request routing, TLS termination, load balancing, forwarded headers, caching, upstream servers and common 502\u002F504 errors.","\u002Freverse-proxy.png","Image of Proxy",{},"\u002Fblog\u002Fen\u002Fproxy-architecture",{"title":9538,"description":10294},"proxy-architecture","blog\u002Fen\u002Fproxy-architecture","D44xFGi5ziyou18TVC9kWvc9EADxLBYzUA1pTl3jqpI",{"id":10304,"title":10305,"author":7,"body":10306,"category":2018,"description":11206,"draft":1097,"extension":1098,"featured":1099,"image":11207,"imageAlt":11208,"locale":1102,"meta":11209,"navigation":1099,"path":11210,"publishedAt":6925,"seo":11211,"slug":11212,"stem":11213,"translationKey":11212,"updatedAt":6925,"__hash__":11214},"blog\u002Fblog\u002Fen\u002Fwhat-entity-seo.md","What Is Entity SEO? Entities, Schema and Search Explained",{"type":9,"value":10307,"toc":11188},[10308,10312,10319,10322,10324,10329,10335,10341,10345,10350,10353,10421,10424,10430,10436,10442,10446,10449,10452,10457,10476,10483,10490,10495,10499,10502,10505,10510,10513,10530,10533,10536,10539,10543,10546,10553,10556,10583,10586,10593,10600,10605,10609,10612,10614,10620,10626,10629,10634,10638,10645,10648,10744,10769,10780,10783,10787,10791,10794,10804,10807,10813,10816,10820,10823,10828,10831,10834,10837,10840,10847,10851,10854,10909,10911,10918,10925,10942,10949,10952,10954,10961,10964,10969,10972,10975,10977,10981,10987,10991,10994,10998,11006,11010,11016,11020,11023,11025,11035,11041,11044,11046,11186],[12,10309,10311],{"id":10310},"what-is-entity-seo","What Is Entity SEO?",[17,10313,10314,10315,35],{},"Search engines do not only process pages as collections of keywords. They also try to understand the real-world things those words refer to: people, companies, products, places, concepts, events, and the relationships between them. Google described this shift when it introduced the Knowledge Graph in 2012 as moving toward understanding “things, not strings.” (",[29,10316,10318],{"href":8272,"rel":10317},[33],"blog.google",[17,10320,10321],{},"Entity SEO is the practical approach of making those identities and relationships easier for search systems to understand. It combines clear content, consistent naming, useful internal relationships, structured data, and reliable identity signals. It is not a separate Google ranking system or a documented shortcut to higher rankings.",[12,10323,1152],{"id":1151},[17,10325,10326],{},[21,10327,10328],{},"Entity SEO is the practice of making the people, organizations, products, places, topics, and other entities connected to a website clear and unambiguous to search engines.",[17,10330,10331,10332],{},"Instead of optimizing only around exact keyword phrases, Entity SEO focuses on questions such as: ",[1625,10333,10334],{},"What is this page about? Which real-world thing does this name refer to? How is it related to other entities? Who created this content?",[17,10336,10337,10338,35],{},"Google's public documentation discusses entities through systems such as the Knowledge Graph and structured data, rather than defining a standalone feature called “Entity SEO.” (",[29,10339,10318],{"href":8272,"rel":10340},[33],[12,10342,10344],{"id":10343},"what-is-an-entity","What Is an Entity?",[17,10346,2196,10347,10349],{},[21,10348,7676],{}," is a distinct thing that can be identified separately from other things.",[17,10351,10352],{},"Examples include:",[69,10354,10355,10364],{},[72,10356,10357],{},[75,10358,10359,10362],{},[78,10360,10361],{},"Entity type",[78,10363,5027],{},[85,10365,10366,10374,10381,10389,10397,10405,10413],{},[75,10367,10368,10371],{},[90,10369,10370],{},"Person",[90,10372,10373],{},"Tim Berners-Lee",[75,10375,10376,10378],{},[90,10377,8055],{},[90,10379,10380],{},"Google",[75,10382,10383,10386],{},[90,10384,10385],{},"Product",[90,10387,10388],{},"iPhone 17",[75,10390,10391,10394],{},[90,10392,10393],{},"Place",[90,10395,10396],{},"Tashkent",[75,10398,10399,10402],{},[90,10400,10401],{},"Technology",[90,10403,10404],{},"PostgreSQL",[75,10406,10407,10410],{},[90,10408,10409],{},"Concept",[90,10411,10412],{},"Search engine optimization",[75,10414,10415,10418],{},[90,10416,10417],{},"Event",[90,10419,10420],{},"Google I\u002FO",[17,10422,10423],{},"The important part is identity.",[17,10425,10426,10427,10429],{},"Consider the word ",[21,10428,8200],{},". It could mean the fruit or Apple Inc. A search system needs enough context to determine which entity is being discussed.",[17,10431,10432,10433,35],{},"Google's Knowledge Graph was explicitly designed around real-world entities and their relationships. Google's Knowledge Graph Search API also represents entities with properties such as names, identifiers, types, descriptions, and URLs. (",[29,10434,10318],{"href":8272,"rel":10435},[33],[17,10437,10438,10439,174],{},"This process of distinguishing one possible entity from another is commonly called ",[21,10440,10441],{},"entity disambiguation",[12,10443,10445],{"id":10444},"why-entity-seo-matters","Why Entity SEO Matters",[17,10447,10448],{},"Traditional keyword matching is still relevant, but words alone can be ambiguous.",[17,10450,10451],{},"Suppose a page says:",[1501,10453,10454],{},[17,10455,10456],{},"Mercury has a very high surface temperature.",[17,10458,10459,10460,10462,10463,513,10466,513,10469,520,10472,10475],{},"The word ",[1625,10461,8205],{}," might represent a planet, a chemical element, a car brand, or another entity. Surrounding concepts such as ",[1625,10464,10465],{},"planet",[1625,10467,10468],{},"Sun",[1625,10470,10471],{},"orbit",[1625,10473,10474],{},"surface temperature"," make the intended entity much clearer.",[17,10477,10478,10479,10482],{},"Entity-oriented optimization therefore improves ",[21,10480,10481],{},"clarity",", not by mechanically adding related words, but by creating enough factual and structural context for a subject to be interpreted correctly.",[17,10484,10485,10486,35],{},"This matters especially for organizations, authors, products, and other named entities. Google explicitly says that Organization structured data can help it understand administrative information about an organization and disambiguate it from other organizations. (",[29,10487,157],{"href":10488,"rel":10489},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Forganization?authuser=19&utm_source=chatgpt.com",[33],[17,10491,10492],{},[161,10493,10494],{},"INTERNAL LINK: How Google Knowledge Graph Works",[12,10496,10498],{"id":10497},"how-entity-seo-works","How Entity SEO Works",[17,10500,10501],{},"A useful way to think about Entity SEO is as a graph.",[17,10503,10504],{},"Imagine an SEO agency called SeoNest:",[17,10506,10507],{},[21,10508,10509],{},"SeoNest → Organization",[17,10511,10512],{},"SeoNest could then be connected to:",[17,10514,10515,10518,10521,10524,10527],{},[21,10516,10517],{},"SeoNest → provides → SEO Engineering",[21,10519,10520],{},"SeoNest → provides → Web Development",[21,10522,10523],{},"SeoNest → publishes → Technical SEO Articles",[21,10525,10526],{},"Article → written by → Author",[21,10528,10529],{},"Author → works with → SeoNest",[17,10531,10532],{},"The individual pages contain information, but their relationships also create context.",[17,10534,10535],{},"Search systems can derive information from page content, site structure, links, structured data, and other signals available across the web. The exact internal mechanisms Google uses to combine every signal are not publicly documented, so it would be incorrect to claim that a specific entity relationship automatically produces a ranking improvement.",[17,10537,10538],{},"The practical goal is simpler: make important relationships explicit and consistent.",[12,10540,10542],{"id":10541},"content-creates-context","Content Creates Context",[17,10544,10545],{},"Entity optimization starts with the visible content.",[17,10547,10548,10549,10552],{},"If a page is about PostgreSQL performance, simply repeating ",[1625,10550,10551],{},"PostgreSQL performance"," dozens of times does not explain the subject particularly well.",[17,10554,10555],{},"A genuinely useful article might naturally discuss:",[1640,10557,10558,10560,10563,10566,10569,10574,10577,10580],{},[981,10559,10404],{},[981,10561,10562],{},"database queries",[981,10564,10565],{},"indexes",[981,10567,10568],{},"query planner",[981,10570,10571],{},[129,10572,10573],{},"EXPLAIN",[981,10575,10576],{},"execution plans",[981,10578,10579],{},"sequential scans",[981,10581,10582],{},"B-tree indexes",[17,10584,10585],{},"These concepts appear because they are necessary to explain the topic, not because an SEO tool produced a list of “semantic keywords.”",[17,10587,10588,10589,35],{},"That distinction is important. Google classifies unnatural repetition intended to manipulate rankings as keyword stuffing. (",[29,10590,157],{"href":10591,"rel":10592},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fessentials\u002Fspam-policies?utm_source=chatgpt.com",[33],[17,10594,10595,10596,10599],{},"Entity SEO should therefore improve semantic clarity through ",[21,10597,10598],{},"better information",", not artificial vocabulary expansion.",[17,10601,10602],{},[161,10603,10604],{},"INTERNAL LINK: What Is Semantic SEO?",[12,10606,10608],{"id":10607},"internal-links-show-relationships","Internal Links Show Relationships",[17,10610,10611],{},"Internal linking can make the relationships between topics easier for both users and crawlers to follow.",[17,10613,1399],{},[179,10615,10618],{"className":10616,"code":10617,"language":184,"meta":185},[182],"Technical SEO\n├── Crawling\n│   ├── robots.txt\n│   └── XML Sitemap\n├── Indexing\n│   ├── Canonical URLs\n│   └── Noindex\n└── Structured Data\n    ├── Organization Schema\n    └── Article Schema\n",[129,10619,10617],{"__ignoreMap":185},[17,10621,10622,10623,10625],{},"This structure communicates something stronger than a disconnected collection of articles. It shows that ",[129,10624,1454],{}," belongs to the broader subject of crawling, while canonicalization belongs primarily to indexing and duplicate URL management.",[17,10627,10628],{},"The goal is not to create hundreds of links between every remotely related page. Links should represent relationships that are genuinely useful to readers.",[17,10630,10631],{},[161,10632,10633],{},"INTERNAL LINK: Internal Linking Architecture for SEO",[12,10635,10637],{"id":10636},"structured-data-makes-entities-explicit","Structured Data Makes Entities Explicit",[17,10639,10640,10641,35],{},"Structured data provides machine-readable information about page content. Google says structured data helps it understand page content and can make pages eligible for certain enhanced Search appearances. (",[29,10642,157],{"href":10643,"rel":10644},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance?utm_source=chatgpt.com",[33],[17,10646,10647],{},"For an organization, a simplified JSON-LD implementation might look like this:",[179,10649,10651],{"className":7990,"code":10650,"language":7992,"meta":185,"style":185},"{\n  \"@context\": \"https:\u002F\u002Fschema.org\",\n  \"@type\": \"Organization\",\n  \"@id\": \"https:\u002F\u002Fexample.com\u002F#organization\",\n  \"name\": \"Example Company\",\n  \"url\": \"https:\u002F\u002Fexample.com\u002F\",\n  \"logo\": \"https:\u002F\u002Fexample.com\u002Flogo.png\",\n  \"sameAs\": [\n    \"https:\u002F\u002Fwww.linkedin.com\u002Fcompany\u002Fexample\"\n  ]\n}\n",[129,10652,10653,10657,10667,10677,10689,10699,10710,10722,10730,10735,10740],{"__ignoreMap":185},[161,10654,10655],{"class":299,"line":300},[161,10656,7999],{"class":303},[161,10658,10659,10661,10663,10665],{"class":299,"line":311},[161,10660,8004],{"class":384},[161,10662,387],{"class":303},[161,10664,8009],{"class":321},[161,10666,830],{"class":303},[161,10668,10669,10671,10673,10675],{"class":299,"line":325},[161,10670,8016],{"class":384},[161,10672,387],{"class":303},[161,10674,8021],{"class":321},[161,10676,830],{"class":303},[161,10678,10679,10682,10684,10687],{"class":299,"line":336},[161,10680,10681],{"class":384},"  \"@id\"",[161,10683,387],{"class":303},[161,10685,10686],{"class":321},"\"https:\u002F\u002Fexample.com\u002F#organization\"",[161,10688,830],{"class":303},[161,10690,10691,10693,10695,10697],{"class":299,"line":347},[161,10692,8028],{"class":384},[161,10694,387],{"class":303},[161,10696,8033],{"class":321},[161,10698,830],{"class":303},[161,10700,10701,10703,10705,10708],{"class":299,"line":358},[161,10702,8040],{"class":384},[161,10704,387],{"class":303},[161,10706,10707],{"class":321},"\"https:\u002F\u002Fexample.com\u002F\"",[161,10709,830],{"class":303},[161,10711,10712,10715,10717,10720],{"class":299,"line":809},[161,10713,10714],{"class":384},"  \"logo\"",[161,10716,387],{"class":303},[161,10718,10719],{"class":321},"\"https:\u002F\u002Fexample.com\u002Flogo.png\"",[161,10721,830],{"class":303},[161,10723,10724,10727],{"class":299,"line":821},[161,10725,10726],{"class":384},"  \"sameAs\"",[161,10728,10729],{"class":303},": [\n",[161,10731,10732],{"class":299,"line":833},[161,10733,10734],{"class":321},"    \"https:\u002F\u002Fwww.linkedin.com\u002Fcompany\u002Fexample\"\n",[161,10736,10737],{"class":299,"line":842},[161,10738,10739],{"class":303},"  ]\n",[161,10741,10742],{"class":299,"line":3064},[161,10743,413],{"class":303},[17,10745,10746,10747,513,10750,513,10753,520,10756,10759,10760,10762,10763,10765,10766,35],{},"Properties such as ",[129,10748,10749],{},"name",[129,10751,10752],{},"url",[129,10754,10755],{},"logo",[129,10757,10758],{},"sameAs"," describe the organization. Google specifically documents ",[129,10761,10752],{}," as helping uniquely identify an organization and supports ",[129,10764,10758],{}," URLs pointing to pages on other sites with additional information about it. (",[29,10767,157],{"href":10488,"rel":10768},[33],[17,10770,10771,10772,10774,10775,35],{},"Schema.org defines ",[129,10773,10758],{}," more strictly as a URL to a reference page that unambiguously indicates the item's identity. (",[29,10776,10779],{"href":10777,"rel":10778},"https:\u002F\u002Fschema.org\u002FsameAs?utm_source=chatgpt.com",[33],"schema.org",[17,10781,10782],{},"Structured data should describe the actual content and entity represented by the page. It should not be used to invent relationships that do not exist.",[17,10784,10785],{},[161,10786,8066],{},[12,10788,10790],{"id":10789},"connect-authors-and-organizations","Connect Authors and Organizations",[17,10792,10793],{},"Entity relationships can also clarify authorship.",[17,10795,10796,10797,10799,10800,35],{},"Google's Article structured data documentation recommends supplying information such as an author's type and a URL or ",[129,10798,10758],{}," value that helps identify that author. Its ProfilePage documentation can represent a person or organization as the main entity of a profile page. (",[29,10801,157],{"href":10802,"rel":10803},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Farticle?authuser=19&utm_source=chatgpt.com",[33],[17,10805,10806],{},"A useful architecture could therefore connect:",[179,10808,10811],{"className":10809,"code":10810,"language":184,"meta":185},[182],"Article\n   ↓ author\nPerson\n   ↓ works for\nOrganization\n",[129,10812,10810],{"__ignoreMap":185},[17,10814,10815],{},"The visible website should support those relationships through author pages, About pages, biographies, and relevant links rather than relying only on hidden markup.",[12,10817,10819],{"id":10818},"entity-seo-is-not-just-schema","Entity SEO Is Not Just Schema",[17,10821,10822],{},"One of the biggest misconceptions is:",[17,10824,10825],{},[21,10826,10827],{},"“Adding Schema.org markup means I have done Entity SEO.”",[17,10829,10830],{},"Structured data is only one component.",[17,10832,10833],{},"A site may contain technically valid Organization schema while its visible content uses inconsistent business names, outdated information, weak author pages, unclear service descriptions, and disconnected articles.",[17,10835,10836],{},"That is still an identity problem.",[17,10838,10839],{},"Conversely, search engines can understand many entities without structured data. Schema is useful because it can make certain facts more explicit, but it does not replace clear content or sound website architecture.",[17,10841,10842,10843,35],{},"Google also does not guarantee that adding structured data will produce a particular Search feature. (",[29,10844,157],{"href":10845,"rel":10846},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Fshipping-policy?utm_source=chatgpt.com",[33],[12,10848,10850],{"id":10849},"a-practical-entity-seo-workflow","A Practical Entity SEO Workflow",[17,10852,10853],{},"Start with the important entities rather than generating a huge list.",[978,10855,10856,10862,10868,10874,10880,10899],{},[981,10857,10858,10861],{},[21,10859,10860],{},"Identify the primary entity.","\nFor a company website, this is usually the organization. For a personal site, it may be a person. For an ecommerce page, it may be a product.",[981,10863,10864,10867],{},[21,10865,10866],{},"Define important relationships.","\nConnect organizations to services, authors to articles, products to brands, and articles to their actual subjects.",[981,10869,10870,10873],{},[21,10871,10872],{},"Remove ambiguity.","\nUse consistent names, descriptions, URLs, organizational information, and author identities.",[981,10875,10876,10879],{},[21,10877,10878],{},"Build useful topic architecture.","\nCreate dedicated pages for subjects that deserve independent treatment and connect them through meaningful internal links.",[981,10881,10882,10885,10886,513,10888,513,10890,513,10893,542,10895,10898],{},[21,10883,10884],{},"Add appropriate structured data.","\nUse supported Schema.org types such as ",[129,10887,8055],{},[129,10889,10370],{},[129,10891,10892],{},"Article",[129,10894,10385],{},[129,10896,10897],{},"ProfilePage"," where they accurately represent the content.",[981,10900,10901,10904,10905,35],{},[21,10902,10903],{},"Validate the implementation.","\nTest Google-supported markup with Google's Rich Results Test and inspect important URLs through Search Console where appropriate. Google recommends validating structured data before deployment and checking how Google sees the page afterward. (",[29,10906,157],{"href":10907,"rel":10908},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Frecipe?utm_source=chatgpt.com",[33],[12,10910,4702],{"id":4701},[17,10912,10913,10914,10917],{},"The first mistake is ",[21,10915,10916],{},"treating entities as synonyms",". Related keywords are words; entities are identifiable things or concepts.",[17,10919,10920,10921,10924],{},"The second is ",[21,10922,10923],{},"creating fake topical relationships",". Mentioning dozens of vaguely related technologies does not automatically establish expertise or relevance.",[17,10926,10927,10928,10938,10939,35],{},"The third is ",[21,10929,10930,10931,10937],{},"using ",[21,10932,10933],{},[21,10934,10935],{},[129,10936,10758],{}," for ordinary related links",". Schema.org defines it as an identity relationship, not a generic “related website” property. (",[29,10940,10779],{"href":10777,"rel":10941},[33],[17,10943,10944,10945,10948],{},"The fourth is ",[21,10946,10947],{},"expecting Schema.org markup to create authority by itself",". Structured data communicates information; it does not make unsupported information true.",[17,10950,10951],{},"Finally, avoid believing that an “entity score” from an SEO tool represents an official Google metric. Google has not publicly documented such a universal Entity SEO score.",[12,10953,887],{"id":886},[17,10955,10956,10957,10960],{},"Treat Entity SEO as an ",[21,10958,10959],{},"information architecture and identity clarity problem",", not a keyword trick.",[17,10962,10963],{},"First make the entity understandable to a human:",[17,10965,10966],{},[21,10967,10968],{},"Who or what is this? What does it do? How is it different from similarly named things? What is it connected to?",[17,10970,10971],{},"Then make the same information technically clear through coherent pages, internal links, stable URLs, accurate authorship, and appropriate structured data.",[17,10973,10974],{},"When those pieces agree, the website forms a much cleaner representation of its subjects without requiring artificial keyword repetition.",[12,10976,907],{"id":906},[909,10978,10980],{"id":10979},"is-entity-seo-a-google-ranking-factor","Is Entity SEO a Google ranking factor?",[17,10982,10983,10984,35],{},"Google does not document “Entity SEO” as a standalone ranking factor. Google does use entity-oriented technologies such as the Knowledge Graph and documents structured data as a way to help it understand page information, but that does not establish a separate Entity SEO ranking factor. (",[29,10985,10318],{"href":8272,"rel":10986},[33],[909,10988,10990],{"id":10989},"is-entity-seo-the-same-as-semantic-seo","Is Entity SEO the same as semantic SEO?",[17,10992,10993],{},"They overlap, but the concepts are not identical. Semantic SEO broadly focuses on meaning, context, and search intent. Entity SEO focuses more specifically on identifiable things and the relationships between them.",[909,10995,10997],{"id":10996},"do-i-need-wikipedia-or-wikidata","Do I need Wikipedia or Wikidata?",[17,10999,11000,11001,239,11003,35],{},"No public Google requirement says an entity must have a Wikipedia or Wikidata page to be understood. Schema.org uses Wikipedia and Wikidata only as examples of pages that may unambiguously identify an entity through ",[129,11002,10758],{},[29,11004,10779],{"href":10777,"rel":11005},[33],[909,11007,11009],{"id":11008},"does-schemaorg-improve-rankings","Does Schema.org improve rankings?",[17,11011,11012,11013,35],{},"Google documents structured data primarily as a way to help it understand content and enable eligible Search features. That documentation does not establish a general ranking boost simply for adding schema markup. (",[29,11014,157],{"href":10643,"rel":11015},[33],[909,11017,11019],{"id":11018},"what-entities-should-a-business-website-define","What entities should a business website define?",[17,11021,11022],{},"Typical entities include the organization, founders or authors when relevant, services or products, locations, and the important subjects the company publishes about. Only relationships that actually exist should be represented.",[12,11024,960],{"id":959},[17,11026,11027,11028,11031,11032],{},"Entity SEO shifts the question from ",[21,11029,11030],{},"“Which keyword should this page repeat?”"," to ",[21,11033,11034],{},"“Which thing does this page describe, and how is that thing connected to everything else?”",[17,11036,11037,11038,35],{},"Google's Knowledge Graph demonstrates why that distinction matters: modern search can model people, places, organizations, concepts, and relationships rather than treating every query as an isolated string of characters. (",[29,11039,10318],{"href":8272,"rel":11040},[33],[17,11042,11043],{},"The practical strategy is therefore straightforward: create accurate content, remove identity ambiguity, build meaningful relationships between pages, and use structured data where it can make those relationships more explicit.",[12,11045,976],{"id":975},[978,11047,11048,11060,11073,11092,11106,11127,11146,11172],{},[981,11049,11050,11053,11054,6460,11057],{},[21,11051,11052],{},"Google — “Introducing the Knowledge Graph: things, not strings,” May 16, 2012."," Explains Google's Knowledge Graph as a model of real-world entities and relationships. (",[29,11055,10318],{"href":8272,"rel":11056},[33],[29,11058,8274],{"href":8272,"rel":11059},[33],[981,11061,11062,11065,11066,6460,11069],{},[21,11063,11064],{},"Google Search Central — Search Appearance documentation."," Documents Google's use of structured data to understand page content and support Search features. (",[29,11067,157],{"href":10643,"rel":11068},[33],[29,11070,11072],{"href":10643,"rel":11071},[33],"Google Search Appearance documentation",[981,11074,11075,11078,11079,513,11081,11083,11084,6460,11087],{},[21,11076,11077],{},"Google Search Central — Organization structured data."," Documents organization identification, disambiguation, ",[129,11080,10752],{},[129,11082,10758],{},", and related properties. (",[29,11085,157],{"href":10488,"rel":11086},[33],[29,11088,11091],{"href":11089,"rel":11090},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Forganization?utm_source=chatgpt.com",[33],"Organization structured data documentation",[981,11093,11094,11097,11098,6460,11102],{},[21,11095,11096],{},"Google Search Central — ProfilePage structured data."," Documents representing a Person or Organization as the main entity of a profile page. (",[29,11099,157],{"href":11100,"rel":11101},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Fprofile-page?utm_source=chatgpt.com",[33],[29,11103,11105],{"href":11100,"rel":11104},[33],"ProfilePage structured data documentation",[981,11107,11108,11111,11112,513,11115,520,11117,239,11119,6460,11122],{},[21,11109,11110],{},"Google Search Central — Article structured data."," Includes Google's author markup guidance for identifying authors with ",[129,11113,11114],{},"type",[129,11116,10752],{},[129,11118,10758],{},[29,11120,157],{"href":10802,"rel":11121},[33],[29,11123,11126],{"href":11124,"rel":11125},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Farticle?utm_source=chatgpt.com",[33],"Article structured data documentation",[981,11128,11129,11138,11139,6460,11142],{},[21,11130,11131,11132,174],{},"Schema.org — ",[21,11133,11134],{},[21,11135,11136],{},[129,11137,10758],{}," Defines the property as a reference URL that unambiguously indicates an item's identity. (",[29,11140,10779],{"href":10777,"rel":11141},[33],[29,11143,11145],{"href":10777,"rel":11144},[33],"Schema.org sameAs definition",[981,11147,11148,11151,11152,513,11155,513,11158,513,11160,520,11163,239,11165,6460,11168],{},[21,11149,11150],{},"Schema.org — Data Model."," Documents relationships such as ",[129,11153,11154],{},"mainEntity",[129,11156,11157],{},"mainEntityOfPage",[129,11159,10758],{},[129,11161,11162],{},"about",[129,11164,10752],{},[29,11166,10779],{"href":8314,"rel":11167},[33],[29,11169,11171],{"href":8314,"rel":11170},[33],"Schema.org Data Model",[981,11173,11174,11177,11178,6460,11182],{},[21,11175,11176],{},"Google — Knowledge Graph Search API."," Documents entities using IDs, names, types, descriptions, URLs, and JSON-LD\u002Fschema.org structures. (",[29,11179,157],{"href":11180,"rel":11181},"https:\u002F\u002Fdevelopers.google.com\u002Fknowledge-graph\u002Freference\u002Frest\u002Fv1?utm_source=chatgpt.com",[33],[29,11183,11185],{"href":11180,"rel":11184},[33],"Knowledge Graph Search API reference",[1067,11187,8319],{},{"title":185,"searchDepth":311,"depth":311,"links":11189},[11190,11191,11192,11193,11194,11195,11196,11197,11198,11199,11200,11201,11202,11203,11204,11205],{"id":10310,"depth":311,"text":10311},{"id":1151,"depth":311,"text":1152},{"id":10343,"depth":311,"text":10344},{"id":10444,"depth":311,"text":10445},{"id":10497,"depth":311,"text":10498},{"id":10541,"depth":311,"text":10542},{"id":10607,"depth":311,"text":10608},{"id":10636,"depth":311,"text":10637},{"id":10789,"depth":311,"text":10790},{"id":10818,"depth":311,"text":10819},{"id":10849,"depth":311,"text":10850},{"id":4701,"depth":311,"text":4702},{"id":886,"depth":311,"text":887},{"id":906,"depth":311,"text":907},{"id":959,"depth":311,"text":960},{"id":975,"depth":311,"text":976},"Learn what Entity SEO means, how search engines understand entities and relationships, and how content, internal links, and structured data support entity clarity.","\u002Fentity-seo.png","Image of Entity SEO",{},"\u002Fblog\u002Fen\u002Fwhat-entity-seo",{"title":10305,"description":11206},"entity-seo","blog\u002Fen\u002Fwhat-entity-seo","8Jc_BT3vx-J0NQS-U70Hnt4MDauU4MGvOjCeoPOH_NE",{"id":11216,"title":11217,"author":7,"body":11218,"category":4925,"description":12033,"draft":1097,"extension":1098,"featured":1099,"image":12034,"imageAlt":12035,"locale":1102,"meta":12036,"navigation":1099,"path":12037,"publishedAt":6925,"seo":12038,"slug":11347,"stem":12039,"translationKey":11347,"updatedAt":6925,"__hash__":12040},"blog\u002Fblog\u002Fen\u002Fwhat-is-rag.md","What Is RAG? Retrieval-Augmented Generation Explained",{"type":9,"value":11219,"toc":12000},[11220,11223,11226,11233,11235,11241,11244,11249,11257,11259,11336,11345,11349,11365,11368,11371,11376,11379,11382,11385,11389,11398,11402,11405,11416,11420,11423,11430,11436,11444,11448,11451,11453,11459,11462,11473,11476,11480,11483,11500,11503,11508,11518,11522,11525,11531,11535,11538,11542,11545,11548,11552,11555,11563,11567,11570,11573,11577,11580,11583,11587,11590,11643,11649,11652,11657,11661,11664,11669,11672,11675,11686,11689,11694,11698,11701,11705,11708,11711,11715,11721,11725,11728,11731,11735,11741,11755,11759,11762,11768,11772,11775,11780,11791,11794,11797,11802,11804,11807,11810,11813,11820,11822,11826,11829,11833,11836,11840,11846,11850,11853,11857,11860,11864,11870,11872,11875,11878,11883,11886,11889,11891],[12,11221,11217],{"id":11222},"what-is-rag-retrieval-augmented-generation-explained",[17,11224,11225],{},"Large language models can produce fluent answers, but fluency does not guarantee that an answer is based on the right information. A model may lack access to private documents, recent updates, company policies, product data, or other knowledge outside its training context.",[17,11227,11228,11229,11232],{},"Retrieval-Augmented Generation, usually shortened to ",[21,11230,11231],{},"RAG",", addresses this problem by giving the model relevant external information at the moment a question is asked. Instead of expecting the LLM to know everything from its internal parameters, the application first searches for useful evidence and then asks the model to answer using that evidence.",[12,11234,1152],{"id":1151},[17,11236,11237,11240],{},[21,11238,11239],{},"Retrieval-Augmented Generation (RAG)"," is an AI architecture that combines information retrieval with a generative large language model. When a user asks a question, the system retrieves relevant information from an external source, adds that information to the model's context, and asks the model to generate an answer grounded in the retrieved material.",[17,11242,11243],{},"In simple terms:",[17,11245,11246],{},[21,11247,11248],{},"Retrieve → Augment → Generate",[17,11250,11251,11252,35],{},"RAG is especially useful when an AI application needs access to private, specialized, or frequently changing information. (",[29,11253,11256],{"href":11254,"rel":11255},"https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Ffoundry\u002Fconcepts\u002Fretrieval-augmented-generation?utm_source=chatgpt.com",[33],"learn.microsoft.com",[12,11258,2081],{"id":2080},[69,11260,11261,11270],{},[72,11262,11263],{},[75,11264,11265,11267],{},[78,11266,10409],{},[78,11268,11269],{},"What it means",[85,11271,11272,11280,11288,11296,11304,11312,11320,11328],{},[75,11273,11274,11277],{},[90,11275,11276],{},"Retrieval",[90,11278,11279],{},"Finding information relevant to the user's question",[75,11281,11282,11285],{},[90,11283,11284],{},"Augmentation",[90,11286,11287],{},"Adding retrieved information to the model's input",[75,11289,11290,11293],{},[90,11291,11292],{},"Generation",[90,11294,11295],{},"Producing the final answer using the supplied context",[75,11297,11298,11301],{},[90,11299,11300],{},"Knowledge source",[90,11302,11303],{},"Documents, databases, knowledge bases, websites, search indexes, or other data",[75,11305,11306,11309],{},[90,11307,11308],{},"Embeddings",[90,11310,11311],{},"Numerical representations commonly used for semantic similarity search",[75,11313,11314,11317],{},[90,11315,11316],{},"Vector database",[90,11318,11319],{},"One possible storage and retrieval mechanism for embeddings",[75,11321,11322,11325],{},[90,11323,11324],{},"Grounding",[90,11326,11327],{},"Giving the model external evidence on which to base its answer",[75,11329,11330,11333],{},[90,11331,11332],{},"RAG goal",[90,11334,11335],{},"Improve access to relevant external knowledge without retraining the base model",[17,11337,11338,11339,11341,11342,35],{},"RAG does ",[21,11340,151],{}," require vector search specifically. Retrieval can use keyword search, semantic search, vector search, hybrid search, or other mechanisms appropriate to the data. (",[29,11343,11256],{"href":11254,"rel":11344},[33],[12,11346,11348],{"id":11347},"what-is-rag","What Is RAG?",[17,11350,11351,11352,11355,11356,11359,11360,35],{},"An LLM contains knowledge encoded in its trained parameters. The original 2020 RAG research described this as ",[21,11353,11354],{},"parametric memory"," and combined it with external ",[21,11357,11358],{},"non-parametric memory"," that could be retrieved when generating an answer. In that work, the external knowledge source was a dense vector index of Wikipedia. (",[29,11361,11364],{"href":11362,"rel":11363},"https:\u002F\u002Farxiv.org\u002Fhtml\u002F2005.11401v4?utm_source=chatgpt.com",[33],"arxiv.org",[17,11366,11367],{},"Modern RAG systems apply the same broader idea in many forms.",[17,11369,11370],{},"Imagine an internal company assistant. An employee asks:",[1501,11372,11373],{},[17,11374,11375],{},"“How many vacation days can I carry into next year?”",[17,11377,11378],{},"Without retrieval, the model may answer from general knowledge or patterns learned during training. That answer could be completely wrong for this company.",[17,11380,11381],{},"A RAG system instead searches the company's current HR documentation, finds the section covering unused vacation days, places the relevant passage into the model's context, and asks the model to answer from that information.",[17,11383,11384],{},"The LLM still generates the response, but the evidence comes from an external source.",[12,11386,11388],{"id":11387},"how-rag-works","How RAG Works",[17,11390,11391,11392,420,11395,174],{},"A practical RAG system normally has two major parts: ",[21,11393,11394],{},"preparing knowledge for retrieval",[21,11396,11397],{},"retrieving it when a question arrives",[220,11399,11401],{"id":11400},"_1-prepare-the-data","1. Prepare the Data",[17,11403,11404],{},"The system first collects material that may be useful later: documentation, support articles, manuals, PDFs, database records, product information, policies, or other content.",[17,11406,11407,11408,11411,11412,35],{},"Large documents are often divided into smaller units called ",[21,11409,11410],{},"chunks"," because retrieval generally works better when individual relevant passages can be found instead of returning an entire document. Microsoft describes content extraction, preprocessing, chunking, indexing, and update strategy as important parts of production RAG ingestion. (",[29,11413,11256],{"href":11414,"rel":11415},"https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Fdeveloper\u002Fai\u002Fadvanced-retrieval-augmented-generation?utm_source=chatgpt.com",[33],[220,11417,11419],{"id":11418},"_2-build-the-index","2. Build the Index",[17,11421,11422],{},"The chunks must then become searchable.",[17,11424,11425,11426,11429],{},"One common approach is to convert text into ",[21,11427,11428],{},"embeddings"," — numerical representations that capture semantic relationships — and store them in a searchable vector index. A user's question can later be represented in the same space and compared with those chunks.",[17,11431,11432,11433,35],{},"This is common, but it is not the definition of RAG. An index may support keyword, semantic, vector, or hybrid retrieval. (",[29,11434,11256],{"href":11254,"rel":11435},[33],[17,11437,11438,11439,35],{},"OpenAI's current vector-store APIs, for example, support storing processed files and searching them for relevant chunks, including ranking options and attribute filters. (",[29,11440,11443],{"href":11441,"rel":11442},"https:\u002F\u002Fplatform.openai.com\u002Fdocs\u002Fapi-reference\u002Fvector-stores?lang=python&utm_source=chatgpt.com",[33],"platform.openai.com",[220,11445,11447],{"id":11446},"_3-retrieve-relevant-information","3. Retrieve Relevant Information",[17,11449,11450],{},"When a question arrives, the retrieval system searches the available knowledge and selects the most relevant passages.",[17,11452,1399],{},[17,11454,11455,11458],{},[21,11456,11457],{},"Question:","\n“Can customers receive a refund after 30 days?”",[17,11460,11461],{},"The retriever might return:",[1640,11463,11464,11467,11470],{},[981,11465,11466],{},"refund-policy section",[981,11468,11469],{},"subscription cancellation rules",[981,11471,11472],{},"exceptions for defective products",[17,11474,11475],{},"The quality of this step is critical. If the system retrieves the wrong material, the LLM receives the wrong evidence.",[220,11477,11479],{"id":11478},"_4-augment-the-prompt","4. Augment the Prompt",[17,11481,11482],{},"The application combines several elements:",[1640,11484,11485,11488,11491,11494,11497],{},[981,11486,11487],{},"the user's question",[981,11489,11490],{},"retrieved passages",[981,11492,11493],{},"system instructions",[981,11495,11496],{},"possibly conversation history",[981,11498,11499],{},"rules about citations or missing information",[17,11501,11502],{},"The resulting prompt might effectively tell the model:",[1501,11504,11505],{},[17,11506,11507],{},"Answer the user's question using the supplied company documentation. If the documentation does not contain the answer, say that the available information is insufficient.",[17,11509,11510,11511,239,11514,35],{},"The retrieved information becomes the model's ",[21,11512,11513],{},"grounding context",[29,11515,11256],{"href":11516,"rel":11517},"https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Farchitecture\u002Fai-ml\u002Fguide\u002Frag\u002Frag-prompt-engineering?utm_source=chatgpt.com",[33],[220,11519,11521],{"id":11520},"_5-generate-the-answer","5. Generate the Answer",[17,11523,11524],{},"Finally, the LLM produces its response using the augmented context.",[17,11526,11527,11528,35],{},"A well-designed application may also preserve document metadata so the answer can cite the original page, document, filename, or URL. Microsoft specifically notes that indexes can store metadata that improves source attribution and citation quality. (",[29,11529,11256],{"href":11254,"rel":11530},[33],[12,11532,11534],{"id":11533},"why-rag-matters","Why RAG Matters",[17,11536,11537],{},"RAG solves a different problem from simply making an LLM larger.",[220,11539,11541],{"id":11540},"access-to-private-knowledge","Access to Private Knowledge",[17,11543,11544],{},"A model does not automatically know the contents of your internal documentation, customer database, technical manuals, or private knowledge base.",[17,11546,11547],{},"RAG can retrieve that information when authorized users need it.",[220,11549,11551],{"id":11550},"more-current-information","More Current Information",[17,11553,11554],{},"Information encoded during model training can become outdated. A retrieval layer can instead search a knowledge source that is updated independently of the model.",[17,11556,11557,11558,35],{},"This makes RAG useful for areas such as product documentation, pricing, policies, inventory, technical support, and rapidly changing business information. (",[29,11559,11562],{"href":11560,"rel":11561},"https:\u002F\u002Fdocs.cloud.google.com\u002Fdocs\u002Fgenerative-ai\u002Fglossary?utm_source=chatgpt.com",[33],"docs.cloud.google.com",[220,11564,11566],{"id":11565},"source-attribution","Source Attribution",[17,11568,11569],{},"Because retrieved passages come from identifiable sources, applications can preserve their metadata and show citations.",[17,11571,11572],{},"That does not automatically make every generated statement correct, but it makes answers easier to inspect and verify.",[220,11574,11576],{"id":11575},"easier-knowledge-updates","Easier Knowledge Updates",[17,11578,11579],{},"If a company policy changes, a RAG architecture can often update the relevant indexed material rather than retraining the entire language model.",[17,11581,11582],{},"That separation between the model and the external knowledge source is one of RAG's practical advantages.",[12,11584,11586],{"id":11585},"rag-vs-fine-tuning","RAG vs Fine-Tuning",[17,11588,11589],{},"RAG and fine-tuning solve different problems.",[69,11591,11592,11601],{},[72,11593,11594],{},[75,11595,11596,11598],{},[78,11597,11231],{},[78,11599,11600],{},"Fine-tuning",[85,11602,11603,11611,11619,11627,11635],{},[75,11604,11605,11608],{},[90,11606,11607],{},"Adds external information at query time",[90,11609,11610],{},"Changes model behavior through additional training",[75,11612,11613,11616],{},[90,11614,11615],{},"Good for changing or private knowledge",[90,11617,11618],{},"Useful for behavior, style, formatting, or task specialization",[75,11620,11621,11624],{},[90,11622,11623],{},"Knowledge can be updated separately",[90,11625,11626],{},"New knowledge may require another training process",[75,11628,11629,11632],{},[90,11630,11631],{},"Depends heavily on retrieval quality",[90,11633,11634],{},"Depends heavily on training-data quality",[75,11636,11637,11640],{},[90,11638,11639],{},"Can provide source references",[90,11641,11642],{},"Does not inherently provide source provenance",[17,11644,11645,11646,35],{},"Microsoft's current guidance similarly distinguishes RAG for grounding answers in private or frequently changing data from fine-tuning for changing model behavior, style, or task performance. (",[29,11647,11256],{"href":11254,"rel":11648},[33],[17,11650,11651],{},"The two approaches are not mutually exclusive. A fine-tuned model can still use RAG.",[17,11653,11654],{},[161,11655,11656],{},"INTERNAL LINK: Fine-Tuning vs RAG: When to Use Each",[12,11658,11660],{"id":11659},"rag-is-not-just-vector-search","RAG Is Not Just Vector Search",[17,11662,11663],{},"One of the most common simplifications is:",[17,11665,11666],{},[21,11667,11668],{},"RAG = embeddings + vector database + LLM",[17,11670,11671],{},"That describes a popular implementation, not the complete concept.",[17,11673,11674],{},"A useful retrieval system may combine exact keyword matching with semantic similarity. Exact search can be important when the query contains product IDs, error codes, names, legal terminology, or other strings that should match precisely.",[17,11676,11677,11678,11681,11682,35],{},"Modern search platforms therefore commonly support ",[21,11679,11680],{},"hybrid retrieval",", combining traditional text search with vector retrieval. (",[29,11683,11256],{"href":11684,"rel":11685},"https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Fsearch\u002Fretrieval-augmented-generation-overview?tabs=docs&utm_source=chatgpt.com",[33],[17,11687,11688],{},"The correct retrieval architecture depends on the corpus and the questions users actually ask.",[17,11690,11691],{},[161,11692,11693],{},"INTERNAL LINK: Vector Search Explained",[12,11695,11697],{"id":11696},"where-rag-can-fail","Where RAG Can Fail",[17,11699,11700],{},"RAG improves access to evidence, but it does not guarantee correct answers.",[220,11702,11704],{"id":11703},"poor-retrieval","Poor Retrieval",[17,11706,11707],{},"If the relevant passage is never retrieved, the model cannot reliably use it.",[17,11709,11710],{},"Possible causes include weak chunking, poor indexing, ambiguous queries, inappropriate similarity settings, missing documents, or weak ranking.",[220,11712,11714],{"id":11713},"irrelevant-context","Irrelevant Context",[17,11716,11717,11718,35],{},"Retrieving too much information can introduce noise. Large amounts of irrelevant context also consume the model's limited input budget. (",[29,11719,11256],{"href":11254,"rel":11720},[33],[220,11722,11724],{"id":11723},"stale-knowledge","Stale Knowledge",[17,11726,11727],{},"RAG only provides current information if the underlying corpus and index are actually kept current.",[17,11729,11730],{},"An outdated knowledge base produces outdated grounding.",[220,11732,11734],{"id":11733},"hallucinations-can-still-happen","Hallucinations Can Still Happen",[17,11736,11737,11738,35],{},"Grounding reduces the need for a model to guess, but it does not force every generated statement to be correct. Microsoft explicitly notes that inaccurate answers can still occur even when retrieved context is provided. (",[29,11739,11256],{"href":11254,"rel":11740},[33],[17,11742,11743,11744,420,11747,11750,11751,35],{},"Applications should therefore evaluate both ",[21,11745,11746],{},"retrieval quality",[21,11748,11749],{},"answer quality",", rather than judging the system only by whether the final response sounds convincing. (",[29,11752,11256],{"href":11753,"rel":11754},"https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Ffoundry\u002Fconcepts\u002Fevaluation-evaluators\u002Frag-evaluators?utm_source=chatgpt.com",[33],[220,11756,11758],{"id":11757},"security-still-matters","Security Still Matters",[17,11760,11761],{},"Retrieval also introduces authorization questions.",[17,11763,11764,11765,35],{},"A user should not be able to retrieve information merely because it exists somewhere in the index. Access controls need to apply before sensitive content reaches the model. Microsoft identifies security and governance as a major production RAG challenge for enterprise systems. (",[29,11766,11256],{"href":11684,"rel":11767},[33],[12,11769,11771],{"id":11770},"classic-and-agentic-rag","Classic and Agentic RAG",[17,11773,11774],{},"Traditional RAG usually follows a relatively fixed pipeline:",[17,11776,11777],{},[21,11778,11779],{},"Question → Search → Context → LLM → Answer",[17,11781,11782,11783,11786,11787,35],{},"More advanced systems may use ",[21,11784,11785],{},"agentic retrieval",". Instead of always executing one predefined search, an agent can analyze a complex request, decide which knowledge sources to query, generate multiple subqueries, inspect intermediate results, and retrieve again when necessary. (",[29,11788,11256],{"href":11789,"rel":11790},"https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Farchitecture\u002Fai-ml\u002Fguide\u002Frag\u002Frag-agentic?utm_source=chatgpt.com",[33],[17,11792,11793],{},"This can improve difficult multi-step retrieval tasks, but it also adds orchestration complexity, latency, cost, and more behavior that needs evaluation.",[17,11795,11796],{},"For many applications, a well-designed conventional RAG pipeline remains a reasonable starting point.",[17,11798,11799],{},[161,11800,11801],{},"INTERNAL LINK: Agentic RAG Explained",[12,11803,887],{"id":886},[17,11805,11806],{},"Start with the simplest retrieval architecture that can answer real user questions reliably.",[17,11808,11809],{},"Use representative queries from the intended application, inspect what the retriever actually returns, and measure retrieval separately from generation. Do not add reranking, agents, multiple indexes, knowledge graphs, or complex orchestration merely because they are available.",[17,11811,11812],{},"For document-heavy systems, test chunking, metadata, filters, keyword search, semantic retrieval, and hybrid retrieval against real questions. When an answer is wrong, first determine whether the correct evidence was retrieved. If it was not, changing the LLM prompt alone is unlikely to solve the underlying retrieval problem.",[17,11814,11815,11816,11819],{},"RAG should be treated as an information-retrieval system ",[21,11817,11818],{},"and"," a generation system, not simply as an LLM feature.",[12,11821,907],{"id":906},[909,11823,11825],{"id":11824},"does-rag-train-the-llm-on-my-documents","Does RAG train the LLM on my documents?",[17,11827,11828],{},"Normally, no. RAG retrieves information and supplies it to the model at inference time. The external documents do not need to become part of the model's trained parameters.",[909,11830,11832],{"id":11831},"does-rag-require-a-vector-database","Does RAG require a vector database?",[17,11834,11835],{},"No. Vector databases are common in RAG architectures, but RAG can use keyword, semantic, vector, hybrid, database, API, or other retrieval mechanisms.",[909,11837,11839],{"id":11838},"does-rag-eliminate-hallucinations","Does RAG eliminate hallucinations?",[17,11841,11842,11843,35],{},"No. Relevant grounding can reduce unsupported generation, but poor retrieval, ambiguous evidence, conflicting documents, or model behavior can still produce inaccurate answers. (",[29,11844,11256],{"href":11254,"rel":11845},[33],[909,11847,11849],{"id":11848},"is-rag-better-than-fine-tuning","Is RAG better than fine-tuning?",[17,11851,11852],{},"They solve different problems. RAG is usually appropriate when the model needs access to external or changing knowledge. Fine-tuning is more appropriate when the objective is to modify model behavior or specialize performance.",[909,11854,11856],{"id":11855},"what-data-can-rag-use","What data can RAG use?",[17,11858,11859],{},"Potential sources include documentation, knowledge bases, databases, support content, files, product catalogs, websites, and other systems that the application can securely search.",[909,11861,11863],{"id":11862},"what-determines-rag-quality","What determines RAG quality?",[17,11865,11866,11867,35],{},"There is no single component. Content quality, extraction, chunking, indexing, query understanding, retrieval, ranking, prompt construction, model behavior, authorization, and evaluation can all affect the final result. (",[29,11868,11256],{"href":11684,"rel":11869},[33],[12,11871,960],{"id":959},[17,11873,11874],{},"RAG gives an LLM something it otherwise lacks: a practical way to consult external knowledge while answering a question.",[17,11876,11877],{},"Its core idea is simple:",[17,11879,11880],{},[21,11881,11882],{},"retrieve relevant evidence, place that evidence in the model's context, and generate an answer from it.",[17,11884,11885],{},"The engineering challenge is making sure the right evidence is retrieved, the model uses it correctly, users can verify important claims, and sensitive information remains protected.",[17,11887,11888],{},"A strong RAG system is therefore not defined by how sophisticated its vector database is. It is defined by whether the complete retrieval-and-generation pipeline consistently provides the right information for the questions users actually ask.",[12,11890,976],{"id":975},[978,11892,11893,11907,11922,11935,11948,11960,11972,11986],{},[981,11894,11895,11898,11899,6460,11903],{},[21,11896,11897],{},"Lewis, Patrick et al. — “Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks.”"," arXiv:2005.11401, originally submitted May 22, 2020; published at NeurIPS 2020. (",[29,11900,11364],{"href":11901,"rel":11902},"https:\u002F\u002Farxiv.org\u002Fabs\u002F2005.11401?utm_source=chatgpt.com",[33],[29,11904,11906],{"href":11901,"rel":11905},[33],"Read the RAG paper on arXiv",[981,11908,11909,11912,11913,6460,11918],{},[21,11910,11911],{},"Meta AI — “Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks.”"," December 16, 2020. (",[29,11914,11917],{"href":11915,"rel":11916},"https:\u002F\u002Fai.meta.com\u002Fresearch\u002Fpublications\u002Fretrieval-augmented-generation-for-knowledge-intensive-nlp-tasks\u002F?utm_source=chatgpt.com",[33],"ai.meta.com",[29,11919,11921],{"href":11915,"rel":11920},[33],"Meta AI research page",[981,11923,11924,11927,11928,6460,11931],{},[21,11925,11926],{},"Microsoft — “Retrieval augmented generation (RAG) and indexes in Microsoft Foundry.”"," Last updated May 20, 2026. (",[29,11929,11256],{"href":11254,"rel":11930},[33],[29,11932,11934],{"href":11254,"rel":11933},[33],"Microsoft Foundry RAG documentation",[981,11936,11937,749,11940,6460,11943],{},[21,11938,11939],{},"Microsoft — “Retrieval-augmented generation (RAG) in Azure AI Search.”",[29,11941,11256],{"href":11684,"rel":11942},[33],[29,11944,11947],{"href":11945,"rel":11946},"https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Fsearch\u002Fretrieval-augmented-generation-overview?utm_source=chatgpt.com",[33],"Azure AI Search RAG overview",[981,11949,11950,749,11953,6460,11956],{},[21,11951,11952],{},"Microsoft — “Build Advanced Retrieval-Augmented Generation Systems.”",[29,11954,11256],{"href":11414,"rel":11955},[33],[29,11957,11959],{"href":11414,"rel":11958},[33],"Advanced RAG guidance",[981,11961,11962,749,11965,6460,11968],{},[21,11963,11964],{},"Google Cloud — “Generative AI Glossary: Retrieval-Augmented Generation.”",[29,11966,11562],{"href":11560,"rel":11967},[33],[29,11969,11971],{"href":11560,"rel":11970},[33],"Google Cloud generative AI glossary",[981,11973,11974,11977,11978,6460,11982],{},[21,11975,11976],{},"Google Cloud — “Generative AI with RAG.”"," Architecture Center; last reviewed September 22, 2025. (",[29,11979,11562],{"href":11980,"rel":11981},"https:\u002F\u002Fdocs.cloud.google.com\u002Farchitecture\u002Frag-reference-architectures?utm_source=chatgpt.com",[33],[29,11983,11985],{"href":11980,"rel":11984},[33],"Google Cloud RAG architecture guidance",[981,11987,11988,11991,11992,6460,11995],{},[21,11989,11990],{},"OpenAI — “Vector Stores.”"," OpenAI API documentation. (",[29,11993,11443],{"href":11441,"rel":11994},[33],[29,11996,11999],{"href":11997,"rel":11998},"https:\u002F\u002Fplatform.openai.com\u002Fdocs\u002Fapi-reference\u002Fvector-stores?utm_source=chatgpt.com",[33],"OpenAI vector store documentation",{"title":185,"searchDepth":311,"depth":311,"links":12001},[12002,12003,12004,12005,12006,12013,12019,12020,12021,12028,12029,12030,12031,12032],{"id":11222,"depth":311,"text":11217},{"id":1151,"depth":311,"text":1152},{"id":2080,"depth":311,"text":2081},{"id":11347,"depth":311,"text":11348},{"id":11387,"depth":311,"text":11388,"children":12007},[12008,12009,12010,12011,12012],{"id":11400,"depth":325,"text":11401},{"id":11418,"depth":325,"text":11419},{"id":11446,"depth":325,"text":11447},{"id":11478,"depth":325,"text":11479},{"id":11520,"depth":325,"text":11521},{"id":11533,"depth":311,"text":11534,"children":12014},[12015,12016,12017,12018],{"id":11540,"depth":325,"text":11541},{"id":11550,"depth":325,"text":11551},{"id":11565,"depth":325,"text":11566},{"id":11575,"depth":325,"text":11576},{"id":11585,"depth":311,"text":11586},{"id":11659,"depth":311,"text":11660},{"id":11696,"depth":311,"text":11697,"children":12022},[12023,12024,12025,12026,12027],{"id":11703,"depth":325,"text":11704},{"id":11713,"depth":325,"text":11714},{"id":11723,"depth":325,"text":11724},{"id":11733,"depth":325,"text":11734},{"id":11757,"depth":325,"text":11758},{"id":11770,"depth":311,"text":11771},{"id":886,"depth":311,"text":887},{"id":906,"depth":311,"text":907},{"id":959,"depth":311,"text":960},{"id":975,"depth":311,"text":976},"Learn what Retrieval-Augmented Generation (RAG) is, how retrieval, embeddings and LLMs work together, where RAG helps, and why it can still fail.","\u002Frag-explanation.png","Image of RAG",{},"\u002Fblog\u002Fen\u002Fwhat-is-rag",{"title":11217,"description":12033},"blog\u002Fen\u002Fwhat-is-rag","3LE3nvhswSjhjAXOIfnuHvmWW4Dc9YmT0SqTkLdqGQs",{"id":12042,"title":12043,"author":7,"body":12044,"category":4925,"description":12680,"draft":1097,"extension":1098,"featured":1099,"image":12681,"imageAlt":12682,"locale":1102,"meta":12683,"navigation":1099,"path":12684,"publishedAt":12685,"seo":12686,"slug":12687,"stem":12688,"translationKey":12687,"updatedAt":12685,"__hash__":12689},"blog\u002Fblog\u002Fen\u002Foai-searchbot.md","What Is OAI-SearchBot? OpenAI Crawler Explained",{"type":9,"value":12045,"toc":12664},[12046,12050,12057,12067,12069,12075,12084,12086,12158,12167,12171,12174,12181,12195,12200,12204,12207,12212,12226,12229,12235,12244,12247,12251,12254,12323,12329,12335,12340,12344,12347,12352,12358,12361,12367,12373,12387,12391,12395,12398,12404,12410,12416,12420,12427,12433,12436,12464,12470,12472,12477,12483,12488,12494,12499,12505,12510,12516,12518,12521,12524,12530,12535,12537,12541,12547,12551,12557,12561,12566,12570,12576,12580,12593,12595,12598,12605,12607],[12,12047,12049],{"id":12048},"what-is-oai-searchbot","What Is OAI-SearchBot?",[17,12051,12052,12053,35],{},"OAI-SearchBot is OpenAI’s web crawler for ChatGPT search features. Its job is to visit public web pages so OpenAI’s search systems can discover and potentially surface those pages in ChatGPT search answers. If you run a website, OAI-SearchBot matters because blocking it can prevent your content from appearing as a source in ChatGPT search, while allowing it makes the site eligible for discovery — but does not guarantee visibility or ranking. (",[29,12054,11443],{"href":12055,"rel":12056},"https:\u002F\u002Fplatform.openai.com\u002Fdocs\u002Fbots",[33],[17,12058,12059,12060,12063,12064,35],{},"The important distinction is that ",[21,12061,12062],{},"OAI-SearchBot is not the same as GPTBot",". OpenAI documents them as separate controls: OAI-SearchBot is for search, while GPTBot controls crawling of content that may be used to train OpenAI’s generative AI foundation models. (",[29,12065,11443],{"href":12055,"rel":12066},[33],[12,12068,1152],{"id":1151},[17,12070,12071,12074],{},[21,12072,12073],{},"OAI-SearchBot is OpenAI’s automated search crawler."," It visits websites on behalf of OpenAI’s search systems and helps make web content available for inclusion in ChatGPT search results.",[17,12076,12077,12078,12080,12081,35],{},"Website owners can control OAI-SearchBot through ",[129,12079,1454],{},". Allowing it can make pages eligible to appear as cited sources in ChatGPT search. Blocking it opts the site or specified paths out of automatic crawling for Search. OpenAI states that search visibility and model-training controls are independent. (",[29,12082,11443],{"href":12055,"rel":12083},[33],[12,12085,2081],{"id":2080},[69,12087,12088,12098],{},[72,12089,12090],{},[75,12091,12092,12095],{},[78,12093,12094],{},"Question",[78,12096,12097],{},"Answer",[85,12099,12100,12108,12116,12125,12132,12140,12150],{},[75,12101,12102,12105],{},[90,12103,12104],{},"Who operates it?",[90,12106,12107],{},"OpenAI",[75,12109,12110,12113],{},[90,12111,12112],{},"Main purpose",[90,12114,12115],{},"Crawling websites for ChatGPT search",[75,12117,12118,12121],{},[90,12119,12120],{},"robots.txt name",[90,12122,12123],{},[129,12124,4107],{},[75,12126,12127,12130],{},[90,12128,12129],{},"Does allowing it guarantee rankings?",[90,12131,7801],{},[75,12133,12134,12137],{},[90,12135,12136],{},"Is it the training crawler?",[90,12138,12139],{},"No — GPTBot is the separate training-related crawler",[75,12141,12142,12145],{},[90,12143,12144],{},"Can it be blocked?",[90,12146,12147,12148],{},"Yes, through ",[129,12149,1454],{},[75,12151,12152,12155],{},[90,12153,12154],{},"Can legitimate requests be verified?",[90,12156,12157],{},"OpenAI publishes SearchBot IP ranges",[17,12159,12160,12161,12163,12164,35],{},"OpenAI also notes that a ",[129,12162,1454],{}," change can take approximately 24 hours to propagate through its search systems. (",[29,12165,11443],{"href":12055,"rel":12166},[33],[12,12168,12170],{"id":12169},"why-oai-searchbot-matters","Why OAI-SearchBot Matters",[17,12172,12173],{},"Traditional SEO usually focuses heavily on search engines such as Google and Bing. AI search introduces another discovery surface: users can ask a question inside ChatGPT and receive an answer supported by cited web sources.",[17,12175,12176,12177,35],{},"For a website to participate effectively in that process, OpenAI needs to be able to access its content. OpenAI's publisher documentation specifically says that sites should avoid blocking OAI-SearchBot if they want their content included in ChatGPT summaries and snippets. (",[29,12178,4122],{"href":12179,"rel":12180},"https:\u002F\u002Fhelp.openai.com\u002Fen\u002Farticles\u002F12627856?utm_source=chatgpt.com",[33],[17,12182,12183,12184,12186,12187,12190,12191,35],{},"That does ",[21,12185,151],{}," mean allowing the crawler automatically gives a page visibility. OpenAI states that ChatGPT search uses multiple factors to rank results and that placement is not guaranteed. Crawler access is therefore better understood as an ",[21,12188,12189],{},"eligibility requirement",", not a ranking advantage by itself. (",[29,12192,4122],{"href":12193,"rel":12194},"https:\u002F\u002Fhelp.openai.com\u002Fen\u002Farticles\u002F9237897-chatgpt-search%3F.avif?utm_source=chatgpt.com",[33],[17,12196,12197],{},[161,12198,12199],{},"INTERNAL LINK: How ChatGPT Search Works",[12,12201,12203],{"id":12202},"how-oai-searchbot-works","How OAI-SearchBot Works",[17,12205,12206],{},"At a simplified level, the process looks like this:",[17,12208,12209],{},[21,12210,12211],{},"Public page → OAI-SearchBot → page discovery and processing → ChatGPT search systems → potential citation or result",[17,12213,12214,12215,12217,12218,624,12220,12222,12223,35],{},"When OAI-SearchBot requests a website, the site can provide crawling instructions through ",[129,12216,4419],{},". The Robots Exclusion Protocol defines groups based on crawler user-agent names and ",[129,12219,4208],{},[129,12221,4211],{}," rules that control which URL paths a compliant crawler may access. (",[29,12224,1486],{"href":1484,"rel":12225},[33],[17,12227,12228],{},"OpenAI documents an OAI-SearchBot user-agent string containing:",[179,12230,12233],{"className":12231,"code":12232,"language":184,"meta":185},[182],"OAI-SearchBot\u002F1.4\n",[129,12234,12232],{"__ignoreMap":185},[17,12236,12237,12238,12240,12241,35],{},"The version number can change, so systems should generally identify the crawler by the ",[129,12239,4107],{}," product token rather than assuming a permanent version number. OpenAI also publishes the IP ranges used by SearchBot separately. (",[29,12242,11443],{"href":12055,"rel":12243},[33],[17,12245,12246],{},"Once content is accessible, OpenAI's search systems may use it when deciding which sources are relevant to a user's query. Crawling and ranking should not be confused: successful crawling means OpenAI can access the page; it does not prove that the page will be selected for a particular answer.",[12,12248,12250],{"id":12249},"oai-searchbot-vs-gptbot","OAI-SearchBot vs GPTBot",[17,12252,12253],{},"One of the most common mistakes is treating every OpenAI crawler as the same bot.",[69,12255,12256,12268],{},[72,12257,12258],{},[75,12259,12260,12263,12265],{},[78,12261,12262],{},"Crawler",[78,12264,12112],{},[78,12266,12267],{},"Primary control",[85,12269,12270,12283,12296,12308],{},[75,12271,12272,12276,12279],{},[90,12273,12274],{},[21,12275,4107],{},[90,12277,12278],{},"ChatGPT search discovery",[90,12280,12281],{},[129,12282,1454],{},[75,12284,12285,12289,12292],{},[90,12286,12287],{},[21,12288,4149],{},[90,12290,12291],{},"Crawling content that may be used for training OpenAI foundation models",[90,12293,12294],{},[129,12295,1454],{},[75,12297,12298,12302,12305],{},[90,12299,12300],{},[21,12301,4346],{},[90,12303,12304],{},"Page visits triggered by certain user actions in ChatGPT",[90,12306,12307],{},"Different behavior; not an automatic search crawler",[75,12309,12310,12315,12318],{},[90,12311,12312],{},[21,12313,12314],{},"OAI-AdsBot",[90,12316,12317],{},"Validation and relevance processing for ChatGPT ad landing pages",[90,12319,12320,12322],{},[129,12321,1454],{}," and infrastructure access",[17,12324,12325,12326,35],{},"OpenAI explicitly documents OAI-SearchBot and GPTBot as independent controls. A publisher can, for example, allow OAI-SearchBot while disallowing GPTBot. This lets the site participate in ChatGPT search while indicating that its crawled content should not be used for foundation-model training. (",[29,12327,11443],{"href":12055,"rel":12328},[33],[17,12330,12331,12332,35],{},"ChatGPT-User is different again. OpenAI describes it as being used for certain actions initiated by users rather than automatic web crawling, and says it is not the control used to determine Search eligibility. (",[29,12333,11443],{"href":12055,"rel":12334},[33],[17,12336,12337],{},[161,12338,12339],{},"INTERNAL LINK: OAI-SearchBot vs GPTBot",[12,12341,12343],{"id":12342},"how-to-allow-oai-searchbot","How to Allow OAI-SearchBot",[17,12345,12346],{},"To explicitly allow OAI-SearchBot across the site:",[179,12348,12350],{"className":12349,"code":4281,"language":184,"meta":185},[182],[129,12351,4281],{"__ignoreMap":185},[17,12353,12354,12355,35],{},"OpenAI uses the same pattern in its crawler guidance. (",[29,12356,4122],{"href":4881,"rel":12357},[33],[17,12359,12360],{},"You can also control access to selected paths:",[179,12362,12365],{"className":12363,"code":12364,"language":184,"meta":185},[182],"User-agent: OAI-SearchBot\nAllow: \u002F\nDisallow: \u002Fprivate\u002F\nDisallow: \u002Finternal\u002F\n",[129,12366,12364],{"__ignoreMap":185},[17,12368,12369,12370,35],{},"The Robots Exclusion Protocol defines how user-agent groups and path rules are matched. More specific path matches take precedence over less specific ones. (",[29,12371,1486],{"href":1484,"rel":12372},[33],[17,12374,12375,12376,12378,12379,12382,12383,35],{},"However, ",[129,12377,1454],{}," should never be treated as a security mechanism. RFC 9309 explicitly states that robots rules are ",[21,12380,12381],{},"not access authorization",". Sensitive information should be protected through authentication, authorization and proper server-side access controls rather than relying on crawler instructions. (",[29,12384,1486],{"href":12385,"rel":12386},"https:\u002F\u002Fwww.rfc-editor.org\u002Frfc\u002Frfc9309.pdf?utm_source=chatgpt.com",[33],[17,12388,12389],{},[161,12390,1585],{},[12,12392,12394],{"id":12393},"how-to-block-oai-searchbot","How to Block OAI-SearchBot",[17,12396,12397],{},"To block automatic SearchBot crawling across the entire site:",[179,12399,12402],{"className":12400,"code":12401,"language":184,"meta":185},[182],"User-agent: OAI-SearchBot\nDisallow: \u002F\n",[129,12403,12401],{"__ignoreMap":185},[17,12405,12406,12407,35],{},"OpenAI states that sites opted out of OAI-SearchBot will not be shown as content in ChatGPT search answers, although a site may still appear as a navigational link in some circumstances. OpenAI's publisher documentation also notes cases where a URL discovered through another source may still be surfaced as a link and title. (",[29,12408,11443],{"href":12055,"rel":12409},[33],[17,12411,12412,12413,174],{},"That distinction matters: ",[21,12414,12415],{},"blocking crawling and making a URL completely undiscoverable are not necessarily the same thing",[12,12417,12419],{"id":12418},"how-to-verify-the-crawler","How to Verify the Crawler",[17,12421,12422,12423,12426],{},"Checking only the HTTP ",[129,12424,12425],{},"User-Agent"," string is useful for log analysis, but it should not be your only security signal. User-agent strings can be imitated by other clients.",[17,12428,12429,12430,35],{},"OpenAI publishes official IP ranges for OAI-SearchBot in a machine-readable JSON file. The currently published list contains IPv4 network prefixes specifically associated with SearchBot. (",[29,12431,4791],{"href":4789,"rel":12432},[33],[17,12434,12435],{},"For production infrastructure, a practical verification workflow is:",[978,12437,12438,12444,12447,12450,12459],{},[981,12439,12440,12441,12443],{},"Look for ",[129,12442,4107],{}," in web-server, CDN or WAF logs.",[981,12445,12446],{},"Check the request source IP.",[981,12448,12449],{},"Compare it against OpenAI's current published SearchBot IP ranges.",[981,12451,12452,12453,513,12456,12458],{},"Check for ",[129,12454,12455],{},"403",[129,12457,1726],{},", bot-challenge or rate-limit events.",[981,12460,12461,12462,174],{},"Confirm that the requested URL is allowed by ",[129,12463,1454],{},[17,12465,12466,12467,35],{},"This is especially relevant when Cloudflare, Akamai or another bot-protection layer sits in front of the origin server. OpenAI documents that these systems can accidentally block its crawlers and recommends checking firewall, CDN and bot-mitigation rules when crawling fails. (",[29,12468,4122],{"href":4881,"rel":12469},[33],[12,12471,859],{"id":858},[17,12473,12474],{},[21,12475,12476],{},"“Allowing OAI-SearchBot allows OpenAI to train on my site.”",[17,12478,12479,12480,35],{},"Not by itself. OpenAI provides GPTBot as the separate robots.txt control for content that may be used to train its generative AI foundation models. (",[29,12481,11443],{"href":12055,"rel":12482},[33],[17,12484,12485],{},[21,12486,12487],{},"“If SearchBot can crawl me, ChatGPT will rank my site.”",[17,12489,12490,12491,35],{},"No. Crawling provides access and eligibility. OpenAI explicitly says placement in search results is not guaranteed. (",[29,12492,4122],{"href":12193,"rel":12493},[33],[17,12495,12496],{},[21,12497,12498],{},"“robots.txt protects private pages.”",[17,12500,12501,12502,35],{},"No. It communicates crawler preferences; it is not an authorization system. Private resources still require real access controls. (",[29,12503,1486],{"href":12385,"rel":12504},[33],[17,12506,12507],{},[21,12508,12509],{},"“All ChatGPT traffic comes from OAI-SearchBot.”",[17,12511,12512,12513,35],{},"No. OpenAI documents multiple agents, including OAI-SearchBot, GPTBot, ChatGPT-User and OAI-AdsBot, with different purposes. (",[29,12514,11443],{"href":12055,"rel":12515},[33],[12,12517,887],{"id":886},[17,12519,12520],{},"If your goal is to make public articles, products, services or documentation discoverable through ChatGPT search, allow OAI-SearchBot to access those pages.",[17,12522,12523],{},"Treat it similarly to other legitimate search crawlers: ensure important content is publicly reachable, return normal successful HTTP responses, avoid accidentally blocking the crawler at the CDN or WAF layer, and verify traffic against OpenAI's published IP ranges when necessary.",[17,12525,12526,12527,35],{},"Decide on GPTBot separately. Search visibility and AI-model training are not the same technical decision, and OpenAI provides separate crawler controls specifically so publishers can manage them independently. (",[29,12528,11443],{"href":12055,"rel":12529},[33],[17,12531,12532],{},[161,12533,12534],{},"INTERNAL LINK: AI Crawler Access Guide",[12,12536,907],{"id":906},[909,12538,12540],{"id":12539},"is-oai-searchbot-an-ai-crawler","Is OAI-SearchBot an AI crawler?",[17,12542,12543,12544,35],{},"Yes. It is an automated web crawler operated by OpenAI specifically for its search functionality. (",[29,12545,11443],{"href":12055,"rel":12546},[33],[909,12548,12550],{"id":12549},"does-oai-searchbot-affect-seo","Does OAI-SearchBot affect SEO?",[17,12552,12553,12554,35],{},"It can affect whether your content is eligible to be discovered and surfaced through ChatGPT search. There is not enough public evidence to treat crawler access itself as a ranking signal. OpenAI only states that access is needed for eligibility and that multiple factors determine search ranking. (",[29,12555,4122],{"href":12193,"rel":12556},[33],[909,12558,12560],{"id":12559},"should-i-allow-oai-searchbot","Should I allow OAI-SearchBot?",[17,12562,12563,12564,174],{},"If you want public content to be eligible for inclusion in ChatGPT search results, allowing it is the appropriate configuration. If you intentionally do not want SearchBot crawling particular content, you can restrict those paths through ",[129,12565,1454],{},[909,12567,12569],{"id":12568},"can-i-allow-searchbot-but-block-gptbot","Can I allow SearchBot but block GPTBot?",[17,12571,12572,12573,35],{},"Yes. OpenAI explicitly supports that configuration because the two controls are independent. (",[29,12574,11443],{"href":12055,"rel":12575},[33],[909,12577,12579],{"id":12578},"how-long-do-robotstxt-changes-take","How long do robots.txt changes take?",[17,12581,12582,12583,12586,12587,12589,12590,35],{},"OpenAI currently documents that Search-related systems may take approximately ",[21,12584,12585],{},"24 hours"," to adjust after a site's ",[129,12588,1454],{}," configuration changes. (",[29,12591,11443],{"href":12055,"rel":12592},[33],[12,12594,960],{"id":959},[17,12596,12597],{},"OAI-SearchBot is the crawler that connects public websites with OpenAI's search ecosystem. Allowing it does not guarantee ChatGPT visibility, but blocking it can remove your content from normal ChatGPT search answers.",[17,12599,12600,12601,12604],{},"The most important technical distinction is simple: ",[21,12602,12603],{},"OAI-SearchBot controls search access; GPTBot controls the separate training-related use case."," Website owners should configure each according to their publishing goals rather than treating all AI crawlers as one system.",[12,12606,976],{"id":975},[978,12608,12609,12618,12627,12636,12648],{},[981,12610,12611,12614,12615,35],{},[21,12612,12613],{},"OpenAI — Overview of OpenAI Crawlers."," Current developer documentation accessed September 18, 2026. Documents OAI-SearchBot, GPTBot, ChatGPT-User, OAI-AdsBot, user-agent strings, robots.txt behavior and SearchBot IP publication. (",[29,12616,11443],{"href":12055,"rel":12617},[33],[981,12619,12620,12623,12624,35],{},[21,12621,12622],{},"OpenAI — Publishers and Developers FAQ."," Current documentation accessed September 18, 2026. Covers OAI-SearchBot access, ChatGPT search discovery, snippets, citations and navigational links. (",[29,12625,4122],{"href":12179,"rel":12626},[33],[981,12628,12629,12632,12633,35],{},[21,12630,12631],{},"OpenAI — Searching the Web with ChatGPT."," Current documentation accessed September 18, 2026. Covers website eligibility and the fact that search placement is not guaranteed. (",[29,12634,4122],{"href":12193,"rel":12635},[33],[981,12637,12638,12641,12642,12644,12645,35],{},[21,12639,12640],{},"OpenAI — OAI-SearchBot Published IP Ranges."," Machine-readable ",[129,12643,4436],{},", current version accessed September 18, 2026. (",[29,12646,4791],{"href":4789,"rel":12647},[33],[981,12649,12650,12652,12653,12655,12656,420,12658,12660,12661,35],{},[21,12651,4891],{}," September 2022. Defines ",[129,12654,1454],{},", user-agent groups, ",[129,12657,4208],{},[129,12659,4211],{}," matching and clarifies that robots rules are not authorization controls. (",[29,12662,1486],{"href":1484,"rel":12663},[33],{"title":185,"searchDepth":311,"depth":311,"links":12665},[12666,12667,12668,12669,12670,12671,12672,12673,12674,12675,12676,12677,12678,12679],{"id":12048,"depth":311,"text":12049},{"id":1151,"depth":311,"text":1152},{"id":2080,"depth":311,"text":2081},{"id":12169,"depth":311,"text":12170},{"id":12202,"depth":311,"text":12203},{"id":12249,"depth":311,"text":12250},{"id":12342,"depth":311,"text":12343},{"id":12393,"depth":311,"text":12394},{"id":12418,"depth":311,"text":12419},{"id":858,"depth":311,"text":859},{"id":886,"depth":311,"text":887},{"id":906,"depth":311,"text":907},{"id":959,"depth":311,"text":960},{"id":975,"depth":311,"text":976},"Learn what OAI-SearchBot is, how it affects ChatGPT search visibility, how it differs from GPTBot, and how to allow, block and verify it.","\u002Foai-searchbot.png","Image of OAI-SearchBot",{},"\u002Fblog\u002Fen\u002Foai-searchbot","2026-09-18",{"title":12043,"description":12680},"oai-searchbot","blog\u002Fen\u002Foai-searchbot","4Ni4NeozFa_vPvuH4UDJmCHKXqDpmL1ceOZjjRDl6oY",{"id":12691,"title":12692,"author":7,"body":12693,"category":4083,"description":13433,"draft":1097,"extension":1098,"featured":1099,"image":13434,"imageAlt":13435,"locale":1102,"meta":13436,"navigation":1099,"path":13437,"publishedAt":12685,"seo":13438,"slug":13439,"stem":13440,"translationKey":13439,"updatedAt":12685,"__hash__":13441},"blog\u002Fblog\u002Fen\u002Frobots-txt-explained.md","robots.txt Explained: Crawling, SEO and AI Bots",{"type":9,"value":12694,"toc":13414},[12695,12699,12705,12711,12718,12722,12727,12733,12736,12742,12745,12751,12760,12764,12767,12772,12775,12781,12789,12798,12802,12806,12809,12811,12817,12820,12826,12829,12832,12837,12840,12864,12867,12873,12882,12887,12891,12894,12897,12902,12905,12912,12915,12921,12928,12932,12935,12937,12943,12946,12949,12951,12957,12964,12975,12981,12987,12990,12994,12997,13000,13003,13009,13016,13019,13023,13027,13030,13033,13056,13059,13065,13068,13071,13074,13078,13081,13084,13092,13095,13101,13104,13109,13113,13116,13122,13125,13128,13132,13138,13141,13148,13151,13158,13161,13165,13168,13170,13176,13185,13194,13200,13206,13212,13219,13221,13224,13227,13233,13236,13249,13252,13254,13257,13263,13266,13268,13272,13275,13279,13288,13292,13295,13299,13302,13306,13309,13311,13317,13320,13323,13325,13412],[12,12696,12698],{"id":12697},"robotstxt-explained-for-modern-websites","robots.txt Explained for Modern Websites",[17,12700,12701,12702,12704],{},"A single line in ",[129,12703,1454],{}," can stop a crawler from requesting thousands of URLs—or accidentally prevent it from reaching pages and resources you wanted discovered.",[17,12706,12707,12708,12710],{},"That makes ",[129,12709,1454],{}," deceptively important. It looks like a small configuration file, but it sits near the beginning of how many search engines, AI crawlers, monitoring systems, and other automated clients interact with a website.",[17,12712,12713,12714,12717],{},"The most important distinction is this: ",[21,12715,12716],{},"robots.txt controls crawling access. It is not an indexing control, authentication system, or security boundary."," Google explicitly documents that a URL blocked from crawling can still appear in search results if Google discovers that URL elsewhere.",[12,12719,12721],{"id":12720},"what-is-robotstxt","What Is robots.txt?",[17,12723,12724,12726],{},[129,12725,1454],{}," is a plain-text file that tells compliant automated crawlers which URL paths they are allowed or disallowed from requesting.",[17,12728,1477,12729,12732],{},[21,12730,12731],{},"RFC 9309 in September 2022",", although the mechanism itself dates back to the early web. The standard defines how crawlers should locate, parse, cache, and apply robots.txt rules.",[17,12734,12735],{},"For HTTPS websites, the file normally lives here:",[179,12737,12740],{"className":12738,"code":12739,"language":184,"meta":185},[182],"https:\u002F\u002Fexample.com\u002Frobots.txt\n",[129,12741,12739],{"__ignoreMap":185},[17,12743,12744],{},"It must be placed at the root of the relevant host. A file at:",[179,12746,12749],{"className":12747,"code":12748,"language":184,"meta":185},[182],"https:\u002F\u002Fexample.com\u002Fblog\u002Frobots.txt\n",[129,12750,12748],{"__ignoreMap":185},[17,12752,12753,12754,12756,12757,12759],{},"does not control crawling for ",[129,12755,7195],{},". Under RFC 9309, the standard location is ",[129,12758,4419],{},", using the lowercase filename.",[12,12761,12763],{"id":12762},"what-robotstxt-actually-controls","What robots.txt Actually Controls",[17,12765,12766],{},"Think of robots.txt as instructions placed at the entrance of a website:",[1501,12768,12769],{},[17,12770,12771],{},"“Crawler X may enter these paths, but should not enter those paths.”",[17,12773,12774],{},"A basic file could look like this:",[179,12776,12779],{"className":12777,"code":12778,"language":184,"meta":185},[182],"User-agent: *\nDisallow: \u002Fadmin\u002F\nDisallow: \u002Finternal-search\u002F\n\nSitemap: https:\u002F\u002Fexample.com\u002Fsitemap.xml\n",[129,12780,12778],{"__ignoreMap":185},[17,12782,12783,12785,12786,12788],{},[129,12784,4376],{}," targets crawlers that match the general group. The ",[129,12787,4211],{}," rules ask them not to request URLs beginning with those paths.",[17,12790,190,12791,12794,12795,12797],{},[129,12792,12793],{},"Sitemap"," line tells supporting crawlers where the XML sitemap is located. Google, Bing, and other major search engines support sitemap declarations in robots.txt, although ",[129,12796,12793],{}," is not one of the core RFC 9309 protocol rules.",[17,12799,12800],{},[161,12801,1444],{},[12,12803,12805],{"id":12804},"crawling-is-not-indexing","Crawling Is Not Indexing",[17,12807,12808],{},"This is the most common robots.txt misunderstanding.",[17,12810,7899],{},[179,12812,12815],{"className":12813,"code":12814,"language":184,"meta":185},[182],"User-agent: Googlebot\nDisallow: \u002Fprivate-offer\u002F\n",[129,12816,12814],{"__ignoreMap":185},[17,12818,12819],{},"Googlebot should not crawl content under that path. But if another website links to:",[179,12821,12824],{"className":12822,"code":12823,"language":184,"meta":185},[182],"https:\u002F\u002Fexample.com\u002Fprivate-offer\u002F\n",[129,12825,12823],{"__ignoreMap":185},[17,12827,12828],{},"Google may still know that the URL exists. Google documents that a blocked URL may appear in search results without the page content or normal snippet.",[17,12830,12831],{},"If your actual requirement is:",[17,12833,12834],{},[21,12835,12836],{},"“This page must not appear in search results,”",[17,12838,12839],{},"use an indexing control such as:",[179,12841,12842],{"className":292,"code":1543,"language":294,"meta":185,"style":185},[129,12843,12844],{"__ignoreMap":185},[161,12845,12846,12848,12850,12852,12854,12856,12858,12860,12862],{"class":299,"line":300},[161,12847,304],{"class":303},[161,12849,1552],{"class":307},[161,12851,1555],{"class":314},[161,12853,318],{"class":303},[161,12855,1560],{"class":321},[161,12857,1563],{"class":314},[161,12859,318],{"class":303},[161,12861,1568],{"class":321},[161,12863,361],{"class":303},[17,12865,12866],{},"or an HTTP header:",[179,12868,12871],{"className":12869,"code":12870,"language":184,"meta":185},[182],"X-Robots-Tag: noindex\n",[129,12872,12870],{"__ignoreMap":185},[17,12874,12875,12876,12878,12879,12881],{},"But there is an important dependency: the crawler must be allowed to fetch the page before it can see the ",[129,12877,1514],{}," directive. Blocking the same URL in robots.txt can therefore prevent Google from discovering its ",[129,12880,1514],{}," instruction.",[17,12883,12884],{},[161,12885,12886],{},"INTERNAL LINK: noindex vs robots.txt",[12,12888,12890],{"id":12889},"robotstxt-is-not-security","robots.txt Is Not Security",[17,12892,12893],{},"Never use robots.txt to protect passwords, internal documents, customer information, staging systems, administrative pages, or confidential files.",[17,12895,12896],{},"The file is public. Anyone can visit:",[179,12898,12900],{"className":12899,"code":12739,"language":184,"meta":185},[182],[129,12901,12739],{"__ignoreMap":185},[17,12903,12904],{},"and read the paths you have listed.",[17,12906,12907,12908,12911],{},"RFC 9309 explicitly states that robots.txt is ",[21,12909,12910],{},"not a form of access authorization"," and should not replace real application-layer security. Authentication, authorization, network controls, or other appropriate security mechanisms should protect sensitive resources.",[17,12913,12914],{},"A rule such as:",[179,12916,12919],{"className":12917,"code":12918,"language":184,"meta":185},[182],"Disallow: \u002Fsecret-backups\u002F\n",[129,12920,12918],{"__ignoreMap":185},[17,12922,12923,12924,12927],{},"may actually advertise that ",[129,12925,12926],{},"\u002Fsecret-backups\u002F"," exists.",[12,12929,12931],{"id":12930},"how-rules-are-matched","How Rules Are Matched",[17,12933,12934],{},"A robots.txt file is organized into crawler groups.",[17,12936,1399],{},[179,12938,12941],{"className":12939,"code":12940,"language":184,"meta":185},[182],"User-agent: Googlebot\nDisallow: \u002Finternal\u002F\nAllow: \u002Finternal\u002Fpublic\u002F\n\nUser-agent: *\nDisallow: \u002Ftmp\u002F\n",[129,12942,12940],{"__ignoreMap":185},[17,12944,12945],{},"The first group targets Googlebot. The second provides rules for other crawlers that match the wildcard group.",[17,12947,12948],{},"With Google, when multiple rules match a URL, the more specific path normally wins. If conflicting rules have equal specificity, Google uses the less restrictive rule.",[17,12950,1399],{},[179,12952,12955],{"className":12953,"code":12954,"language":184,"meta":185},[182],"User-agent: *\nDisallow: \u002F\nAllow: \u002Fblog\u002F\n",[129,12956,12954],{"__ignoreMap":185},[17,12958,12959,12960,12963],{},"The site is generally blocked, while URLs beginning with ",[129,12961,12962],{},"\u002Fblog\u002F"," are allowed.",[17,12965,12966,12967,12970,12971,12974],{},"Google also supports ",[129,12968,12969],{},"*"," for pattern matching and ",[129,12972,12973],{},"$"," for matching the end of a URL:",[179,12976,12979],{"className":12977,"code":12978,"language":184,"meta":185},[182],"User-agent: Googlebot\nDisallow: \u002F*.pdf$\n",[129,12980,12978],{"__ignoreMap":185},[17,12982,12983,12984,174],{},"This rule blocks matching URLs that end in ",[129,12985,12986],{},".pdf",[17,12988,12989],{},"Crawler implementations can differ, especially around non-standard extensions, so avoid assuming every crawler supports every Google-specific behavior.",[12,12991,12993],{"id":12992},"modern-javascript-websites","Modern JavaScript Websites",[17,12995,12996],{},"Modern websites frequently depend on JavaScript, CSS, API requests, and other resources to produce visible content.",[17,12998,12999],{},"If you block resources required to render a page, crawlers that render JavaScript may receive an incomplete version of it. Google documents that if robots.txt prevents Googlebot from fetching a URL, it skips requesting that resource; Google Search cannot render JavaScript from blocked pages or files.",[17,13001,13002],{},"For that reason, a rule like:",[179,13004,13007],{"className":13005,"code":13006,"language":184,"meta":185},[182],"Disallow: \u002Fassets\u002F\n",[129,13008,13006],{"__ignoreMap":185},[17,13010,13011,13012,13015],{},"deserves careful review if ",[129,13013,13014],{},"\u002Fassets\u002F"," contains JavaScript or CSS required for public pages.",[17,13017,13018],{},"Blocking unnecessary backend paths can be useful. Blocking resources necessary to understand the page can create crawling or rendering problems.",[17,13020,13021],{},[161,13022,2342],{},[12,13024,13026],{"id":13025},"robotstxt-and-crawl-efficiency","robots.txt and Crawl Efficiency",[17,13028,13029],{},"robots.txt is especially useful when a website can generate enormous numbers of crawlable URLs.",[17,13031,13032],{},"Common examples include:",[1640,13034,13035,13038,13041,13044,13047,13050,13053],{},[981,13036,13037],{},"faceted navigation",[981,13039,13040],{},"internal search results",[981,13042,13043],{},"calendar URLs",[981,13045,13046],{},"filter combinations",[981,13048,13049],{},"sorting parameters",[981,13051,13052],{},"session-based URLs",[981,13054,13055],{},"dynamically generated URL spaces",[17,13057,13058],{},"An e-commerce system might generate URLs such as:",[179,13060,13063],{"className":13061,"code":13062,"language":184,"meta":185},[182],"\u002Fproducts?color=black&size=m&sort=price\n\u002Fproducts?color=black&size=m&sort=newest\n\u002Fproducts?color=black&size=l&sort=price\n",[129,13064,13062],{"__ignoreMap":185},[17,13066,13067],{},"Thousands or millions of variations can consume crawler and server resources without providing useful search pages.",[17,13069,13070],{},"Google specifically recommends controlling unnecessary faceted-navigation crawling when those filtered URLs do not need to be indexed.",[17,13072,13073],{},"This matters much more on large or highly dynamic websites than on a simple site containing a few dozen pages.",[12,13075,13077],{"id":13076},"robotstxt-and-ai-crawlers","robots.txt and AI Crawlers",[17,13079,13080],{},"robots.txt is no longer relevant only to traditional search engines.",[17,13082,13083],{},"AI companies also operate crawlers, and different crawler identities may represent different purposes.",[17,13085,13086,13087,13089,13090,174],{},"For example, OpenAI documents ",[129,13088,4107],{}," for content that may be discovered and surfaced through ChatGPT search experiences. OpenAI says publishers who want their content available for summaries and snippets should avoid blocking ",[129,13091,4107],{},[17,13093,13094],{},"Anthropic similarly documents separate crawler identities for different activities and states that its bots honor robots.txt directives.",[17,13096,13097,13098],{},"This creates an important modern configuration question: ",[21,13099,13100],{},"which automated systems do you actually want to access your content?",[17,13102,13103],{},"A website may choose different policies for search discovery, AI search retrieval, model-development crawling, advertising systems, or other automated clients.",[17,13105,13106],{},[161,13107,13108],{},"INTERNAL LINK: AI Crawlers and robots.txt",[12,13110,13112],{"id":13111},"a-practical-robotstxt-example","A Practical robots.txt Example",[17,13114,13115],{},"A relatively simple public website might use:",[179,13117,13120],{"className":13118,"code":13119,"language":184,"meta":185},[182],"User-agent: *\nDisallow: \u002Fadmin\u002F\nDisallow: \u002Finternal-search\u002F\nDisallow: \u002Fapi\u002Fprivate\u002F\n\nSitemap: https:\u002F\u002Fexample.com\u002Fsitemap.xml\n",[129,13121,13119],{"__ignoreMap":185},[17,13123,13124],{},"This configuration keeps ordinary crawlers away from areas that provide little crawling value while leaving public content accessible.",[17,13126,13127],{},"Do not copy this blindly. Your configuration should reflect your actual architecture, crawler requirements, and indexing strategy.",[12,13129,13131],{"id":13130},"http-errors-matter","HTTP Errors Matter",[17,13133,13134,13135,13137],{},"Crawler behavior also depends on what happens when ",[129,13136,4419],{}," itself is requested.",[17,13139,13140],{},"RFC 9309 distinguishes between an unavailable robots.txt file and one that cannot be reached because of server or network failures.",[17,13142,13143,13144,13147],{},"For example, a ",[129,13145,13146],{},"4xx"," response can be treated as the file being unavailable, allowing crawling. By contrast, when robots.txt is unreachable because of a server-side or network problem, the standard says crawlers must initially assume complete disallow. Crawlers may also cache robots.txt; RFC 9309 says cached versions generally should not be used for more than 24 hours unless the file is unreachable.",[17,13149,13150],{},"That means a broken robots.txt deployment can have very different consequences from simply having no file.",[17,13152,13153,13154,13157],{},"RFC 9309 also requires crawler implementations to support parsing at least ",[21,13155,13156],{},"500 KiB"," of robots.txt content. Google currently applies a 500 KiB robots.txt size limit and ignores content beyond that point.",[17,13159,13160],{},"A normal robots.txt file should rarely be anywhere near that large.",[12,13162,13164],{"id":13163},"how-to-diagnose-problems","How to Diagnose Problems",[17,13166,13167],{},"If important pages stop being crawled or rendered, check robots.txt early in the investigation.",[17,13169,666],{},[17,13171,13172,13175],{},[21,13173,13174],{},"Symptom:"," a page or resource is not being crawled.",[17,13177,13178,13181,13182,13184],{},[21,13179,13180],{},"Measurement:"," request ",[129,13183,4419],{}," directly and inspect the rule matching the affected crawler.",[17,13186,13187,13190,13191,13193],{},[21,13188,13189],{},"Possible cause:"," an overly broad ",[129,13192,4211],{},", wildcard pattern, crawler-specific group, or blocked rendering resource.",[17,13195,13196,13199],{},[21,13197,13198],{},"Confirmation:"," test the affected URL using crawler-specific diagnostic tools. For Google, Search Console's robots.txt reporting and URL Inspection tools can help confirm access.",[17,13201,13202,13205],{},[21,13203,13204],{},"Fix:"," narrow or remove the incorrect rule.",[17,13207,13208,13211],{},[21,13209,13210],{},"Re-measure:"," confirm that both the URL and necessary page resources are crawlable.",[17,13213,13214,13215,13218],{},"Also check your CDN, WAF, firewall, authentication layer, and bot-management system. A robots.txt rule may allow a crawler while another infrastructure layer still returns ",[129,13216,13217],{},"403 Forbidden",". OpenAI explicitly documents this as a possible cause of crawler-access failures.",[12,13220,4702],{"id":4701},[17,13222,13223],{},"The most damaging errors usually come from treating robots.txt as something it is not.",[17,13225,13226],{},"Using this:",[179,13228,13231],{"className":13229,"code":13230,"language":184,"meta":185},[182],"User-agent: *\nDisallow: \u002F\n",[129,13232,13230],{"__ignoreMap":185},[17,13234,13235],{},"on production blocks compliant general crawlers from the entire site.",[17,13237,13238,13239,13241,13242,13245,13246,13248],{},"Other common mistakes include blocking pages that contain ",[129,13240,1514],{},", blocking JavaScript required for rendering, publishing private directory names, assuming ",[129,13243,13244],{},"crawl-delay"," is universally supported, or copying rules from another website without understanding its architecture. Google, for example, does not support the ",[129,13247,13244],{}," robots.txt field.",[17,13250,13251],{},"robots.txt should be intentionally small and understandable.",[12,13253,887],{"id":886},[17,13255,13256],{},"Treat robots.txt as part of your crawling architecture, not as a miscellaneous SEO file.",[17,13258,13259,13260,13262],{},"For most websites, start permissively and block only URL spaces that crawlers genuinely do not need to request. Keep sensitive information behind real access controls, use ",[129,13261,1514],{}," when the objective is preventing supported search engines from indexing an accessible page, and periodically review crawler-specific policies as search and AI systems evolve.",[17,13264,13265],{},"Most importantly, test the final behavior rather than assuming the configuration means what it appears to mean.",[12,13267,907],{"id":906},[909,13269,13271],{"id":13270},"do-i-need-a-robotstxt-file","Do I need a robots.txt file?",[17,13273,13274],{},"Not necessarily. If crawlers may access your entire public website, having no robots.txt file can be acceptable. Google states that an empty file or no robots.txt file effectively allows crawling by default.",[909,13276,13278],{"id":13277},"does-disallow-remove-a-page-from-google","Does Disallow remove a page from Google?",[17,13280,13281,13282,13284,13285,13287],{},"No. ",[129,13283,4211],{}," controls crawling. A blocked URL may still be discovered and potentially appear in search results. Use an appropriate ",[129,13286,1514],{}," mechanism if indexing is what you need to prevent.",[909,13289,13291],{"id":13290},"can-robotstxt-protect-private-pages","Can robots.txt protect private pages?",[17,13293,13294],{},"No. robots.txt is publicly visible and is not an authorization mechanism. Use authentication and proper access controls.",[909,13296,13298],{"id":13297},"should-css-and-javascript-be-blocked","Should CSS and JavaScript be blocked?",[17,13300,13301],{},"Usually not when those resources are necessary for crawlers to render and understand public pages. Google cannot render JavaScript from resources that robots.txt prevents it from fetching.",[909,13303,13305],{"id":13304},"can-i-control-ai-crawlers-separately","Can I control AI crawlers separately?",[17,13307,13308],{},"Yes, when the crawler operator publishes distinct user-agent names and supports robots.txt controls. OpenAI and Anthropic, for example, document crawler-specific controls.",[12,13310,960],{"id":959},[17,13312,13313,13314],{},"robots.txt answers a narrow but important question: ",[21,13315,13316],{},"which URLs should compliant crawlers be allowed to request?",[17,13318,13319],{},"It does not decide whether a URL is confidential, whether a page must disappear from search results, or whether an unknown bot can technically access your server.",[17,13321,13322],{},"Once crawling, indexing, rendering, security, and crawler identity are treated as separate concerns, robots.txt becomes much easier to configure correctly—and much harder to misuse.",[12,13324,976],{"id":975},[978,13326,13327,13336,13345,13354,13364,13373,13382,13392,13401],{},[981,13328,13329,13332,13333],{},[21,13330,13331],{},"IETF \u002F RFC Editor — RFC 9309: Robots Exclusion Protocol."," September 2022. ",[29,13334,1480],{"href":1484,"rel":13335},[33],[981,13337,13338,13340,13341],{},[21,13339,1908],{}," Google documentation. ",[29,13342,13344],{"href":1518,"rel":13343},[33],"Introduction to robots.txt",[981,13346,13347,13340,13350],{},[21,13348,13349],{},"Google Crawling Infrastructure — How Google Interprets the robots.txt Specification.",[29,13351,13353],{"href":2493,"rel":13352},[33],"Google robots.txt specification",[981,13355,13356,13340,13359],{},[21,13357,13358],{},"Google Crawling Infrastructure — Create and Submit a robots.txt File.",[29,13360,13363],{"href":13361,"rel":13362},"https:\u002F\u002Fdevelopers.google.com\u002Fcrawling\u002Fdocs\u002Frobots-txt\u002Fcreate-robots-txt?utm_source=chatgpt.com",[33],"Create a robots.txt file",[981,13365,13366,13368,13369],{},[21,13367,1971],{}," Last updated December 10, 2025. ",[29,13370,13372],{"href":1579,"rel":13371},[33],"Block indexing with noindex",[981,13374,13375,13340,13378],{},[21,13376,13377],{},"Google Search Central — Understand JavaScript SEO Basics.",[29,13379,13381],{"href":2807,"rel":13380},[33],"JavaScript SEO basics",[981,13383,13384,13340,13387],{},[21,13385,13386],{},"Google Crawling Infrastructure — Managing Crawling of Faceted Navigation URLs.",[29,13388,13391],{"href":13389,"rel":13390},"https:\u002F\u002Fdevelopers.google.com\u002Fcrawling\u002Fdocs\u002Ffaceted-navigation?authuser=1&utm_source=chatgpt.com",[33],"Faceted navigation crawling guidance",[981,13393,13394,13396,13397],{},[21,13395,12622],{}," OpenAI Help Center. ",[29,13398,13400],{"href":12179,"rel":13399},[33],"OpenAI publisher crawler guidance",[981,13402,13403,13406,13407],{},[21,13404,13405],{},"Anthropic — Does Anthropic Crawl Data from the Web, and How Can Site Owners Block the Crawler?"," Anthropic Help Center. ",[29,13408,13411],{"href":13409,"rel":13410},"https:\u002F\u002Fsupport.anthropic.com\u002Fen\u002Farticles\u002F8896518-does-anthropic-crawl-data-from-the-web-and-how-can-site-owners-block-the-crawler?utm_source=chatgpt.com",[33],"Anthropic crawler guidance",[1067,13413,1996],{},{"title":185,"searchDepth":311,"depth":311,"links":13415},[13416,13417,13418,13419,13420,13421,13422,13423,13424,13425,13426,13427,13428,13429,13430,13431,13432],{"id":12697,"depth":311,"text":12698},{"id":12720,"depth":311,"text":12721},{"id":12762,"depth":311,"text":12763},{"id":12804,"depth":311,"text":12805},{"id":12889,"depth":311,"text":12890},{"id":12930,"depth":311,"text":12931},{"id":12992,"depth":311,"text":12993},{"id":13025,"depth":311,"text":13026},{"id":13076,"depth":311,"text":13077},{"id":13111,"depth":311,"text":13112},{"id":13130,"depth":311,"text":13131},{"id":13163,"depth":311,"text":13164},{"id":4701,"depth":311,"text":4702},{"id":886,"depth":311,"text":887},{"id":906,"depth":311,"text":907},{"id":959,"depth":311,"text":960},{"id":975,"depth":311,"text":976},"Learn how robots.txt controls crawler access, how its rules work, common SEO mistakes, and how modern search and AI crawlers use it.","\u002Frobot-text.png","Image of robots.txt",{},"\u002Fblog\u002Fen\u002Frobots-txt-explained",{"title":12692,"description":13433},"robots-txt-explained","blog\u002Fen\u002Frobots-txt-explained","BeURNAHuUobUBzXbtB9vqYsOP6k3W6tKXBLPVqRyEKw",{"id":13443,"title":13444,"author":7,"body":13445,"category":4925,"description":13894,"draft":1097,"extension":1098,"featured":1099,"image":13895,"imageAlt":13896,"locale":1102,"meta":13897,"navigation":1099,"path":13898,"publishedAt":13899,"seo":13900,"slug":13901,"stem":13902,"translationKey":13901,"updatedAt":13899,"__hash__":13903},"blog\u002Fblog\u002Fen\u002Fai-agent.md","What Is an AI Agent? How AI Agents Work",{"type":9,"value":13446,"toc":13880},[13447,13451,13454,13464,13466,13471,13474,13478,13481,13486,13489,13494,13497,13503,13506,13580,13583,13587,13590,13595,13598,13601,13630,13633,13637,13640,13646,13652,13658,13661,13666,13670,13673,13676,13705,13712,13717,13721,13724,13727,13730,13733,13737,13740,13743,13746,13748,13751,13754,13757,13760,13762,13766,13769,13773,13776,13780,13783,13787,13790,13795,13797,13803,13806,13811,13813,13818,13821,13823],[12,13448,13450],{"id":13449},"what-is-an-ai-agent","What Is an AI Agent?",[17,13452,13453],{},"An AI chatbot can answer a question. An AI agent can go further: it can decide what needs to happen next, use tools, observe the result, adjust its plan, and continue working toward a goal. That distinction matters because modern AI systems are increasingly being connected to browsers, code environments, databases, email, business software, and other systems where they can do more than generate text.",[17,13455,13456,13457,13460,13461,174],{},"The term ",[21,13458,13459],{},"AI agent"," is used somewhat differently across the industry, so there is no single universal implementation. The common idea is ",[21,13462,13463],{},"goal-directed AI that can make some decisions about how to complete a task rather than following only a fixed sequence of instructions",[12,13465,1152],{"id":1151},[17,13467,2196,13468,174],{},[21,13469,13470],{},"AI agent is a software system that uses an AI model to pursue a goal, decide what actions to take, use available tools or information, observe what happens, and continue until the task is completed or human input is required",[17,13472,13473],{},"OpenAI describes agents as systems that independently accomplish tasks on a user's behalf, while Anthropic emphasizes that an agent dynamically directs its own processes and tool use instead of simply following a predetermined script.",[12,13475,13477],{"id":13476},"how-ai-agents-work","How AI Agents Work",[17,13479,13480],{},"A useful way to understand an AI agent is as a repeating cycle:",[17,13482,13483],{},[21,13484,13485],{},"Goal → Reason → Act → Observe → Adjust → Repeat",[17,13487,13488],{},"Suppose you ask an agent:",[1501,13490,13491],{},[17,13492,13493],{},"“Find three suitable hotels for my business trip and prepare a comparison.”",[17,13495,13496],{},"The agent might first determine which information it needs. It could search for hotels, check dates and locations, compare prices and policies, organize the results, notice that one option lacks sufficient information, search again, and finally prepare the comparison.",[17,13498,13499,13500,174],{},"The important part is not simply that an LLM generated text. The model helped decide ",[21,13501,13502],{},"which step should happen next",[17,13504,13505],{},"Modern implementations usually combine several components:",[69,13507,13508,13518],{},[72,13509,13510],{},[75,13511,13512,13515],{},[78,13513,13514],{},"Component",[78,13516,13517],{},"Purpose",[85,13519,13520,13530,13540,13550,13560,13570],{},[75,13521,13522,13527],{},[90,13523,13524],{},[21,13525,13526],{},"Model",[90,13528,13529],{},"Interprets the goal and makes decisions",[75,13531,13532,13537],{},[90,13533,13534],{},[21,13535,13536],{},"Instructions",[90,13538,13539],{},"Define behavior, rules, and constraints",[75,13541,13542,13547],{},[90,13543,13544],{},[21,13545,13546],{},"Tools",[90,13548,13549],{},"Search, call APIs, read files, send messages, update systems, or perform other actions",[75,13551,13552,13557],{},[90,13553,13554],{},[21,13555,13556],{},"State or memory",[90,13558,13559],{},"Keeps relevant information from previous steps",[75,13561,13562,13567],{},[90,13563,13564],{},[21,13565,13566],{},"Environment",[90,13568,13569],{},"Determines what systems, files, applications, or resources the agent can access",[75,13571,13572,13577],{},[90,13573,13574],{},[21,13575,13576],{},"Guardrails",[90,13578,13579],{},"Restrict unsafe or unwanted actions",[17,13581,13582],{},"OpenAI summarizes the foundational design as model, tools, and instructions, while other architectures explicitly separate memory, runtime environment, and orchestration. These differences show why there is no single mandatory architecture for every AI agent.",[12,13584,13586],{"id":13585},"a-practical-example","A Practical Example",[17,13588,13589],{},"Imagine an ecommerce company receives this request:",[17,13591,13592],{},[21,13593,13594],{},"“A customer says their package never arrived. Resolve the issue.”",[17,13596,13597],{},"A traditional chatbot might explain the company's delivery policy.",[17,13599,13600],{},"An AI agent could instead:",[978,13602,13603,13606,13609,13612,13615,13618,13621,13624,13627],{},[981,13604,13605],{},"identify the customer and order;",[981,13607,13608],{},"retrieve shipping information;",[981,13610,13611],{},"check the carrier's tracking API;",[981,13613,13614],{},"compare the situation with company refund rules;",[981,13616,13617],{},"decide whether more information is needed;",[981,13619,13620],{},"request approval if required;",[981,13622,13623],{},"create a replacement or refund;",[981,13625,13626],{},"update the support ticket;",[981,13628,13629],{},"notify the customer.",[17,13631,13632],{},"The exact sequence may change depending on what the agent discovers. That ability to choose and modify its path is one of the main differences between an agent and fixed automation.",[12,13634,13636],{"id":13635},"agent-vs-chatbot-vs-workflow","Agent vs Chatbot vs Workflow",[17,13638,13639],{},"These systems can use the same underlying LLM while behaving very differently.",[17,13641,1451,13642,13645],{},[21,13643,13644],{},"chatbot"," usually receives input and produces a response. It may retrieve information, but the interaction is often centered on answering the user.",[17,13647,1451,13648,13651],{},[21,13649,13650],{},"workflow"," can contain many sophisticated AI steps, yet the application still determines the sequence: step A runs, then B, then C.",[17,13653,2196,13654,13657],{},[21,13655,13656],{},"agent"," gives the model more control over execution. The model can decide which tool to use, whether another step is necessary, whether the current approach failed, and when the task is finished.",[17,13659,13660],{},"Anthropic explicitly distinguishes workflows, where tools and LLM calls follow predefined code paths, from agents, where the model dynamically directs the process. OpenAI makes a similar distinction: applications that merely contain an LLM but do not let it control workflow execution are not necessarily agents.",[17,13662,13663],{},[161,13664,13665],{},"INTERNAL LINK: AI Agents vs AI Assistants",[12,13667,13669],{"id":13668},"why-tools-matter","Why Tools Matter",[17,13671,13672],{},"An LLM by itself mainly processes and generates information. Tools give an agent ways to interact with external systems.",[17,13674,13675],{},"Tools might let an agent:",[1640,13677,13678,13681,13684,13687,13690,13693,13696,13699,13702],{},[981,13679,13680],{},"search the web;",[981,13682,13683],{},"query a database;",[981,13685,13686],{},"read documents;",[981,13688,13689],{},"execute code;",[981,13691,13692],{},"use a browser;",[981,13694,13695],{},"update a CRM;",[981,13697,13698],{},"create a support ticket;",[981,13700,13701],{},"send an email;",[981,13703,13704],{},"call another specialized agent.",[17,13706,13707,13708,13711],{},"Research such as ",[21,13709,13710],{},"ReAct"," helped establish the now-common pattern of interleaving reasoning with actions: the model can gather new information from an environment and then use that information to update its next decision.",[17,13713,13714],{},[161,13715,13716],{},"INTERNAL LINK: Tool Use in AI Agents",[12,13718,13720],{"id":13719},"when-agents-make-sense","When Agents Make Sense",[17,13722,13723],{},"Agents are most useful when the correct process cannot be fully described with simple deterministic rules.",[17,13725,13726],{},"Examples include tasks involving ambiguous requests, unstructured documents, changing information, multiple possible paths, or decisions that depend heavily on context.",[17,13728,13729],{},"They are not automatically the best solution for every automation problem. Anthropic recommends starting with the simplest architecture that works because agentic systems can increase latency, cost, and complexity. OpenAI similarly notes that deterministic systems may be sufficient when a workflow does not require model-driven judgment.",[17,13731,13732],{},"A fixed workflow is usually preferable when every step is known in advance and predictability matters more than flexibility.",[12,13734,13736],{"id":13735},"risks-and-limitations","Risks and Limitations",[17,13738,13739],{},"The same autonomy that makes agents useful creates additional risk.",[17,13741,13742],{},"An agent can misunderstand a user's intention, select the wrong tool, act on incorrect information, or carry an earlier mistake into later steps. Connecting agents to external systems also introduces security concerns such as excessive permissions and prompt-injection attacks. Anthropic specifically highlights the tension between giving agents enough autonomy to be useful while preserving meaningful human control.",[17,13744,13745],{},"For consequential actions, good agent design therefore includes limited permissions, authentication and authorization, tool-level safeguards, logging, evaluation, clear stopping conditions, and human approval where appropriate. OpenAI recommends layered guardrails rather than relying on a single protection mechanism.",[12,13747,887],{"id":886},[17,13749,13750],{},"Do not start an AI project by asking, “How can we add an agent?”",[17,13752,13753],{},"Start with the workflow.",[17,13755,13756],{},"Identify the goal, decisions, data sources, possible actions, failure cases, and places where deterministic software already works well. Introduce agentic decision-making only where flexibility or contextual reasoning provides measurable value.",[17,13758,13759],{},"A simpler system is usually easier to test, secure, debug, and maintain.",[12,13761,907],{"id":906},[909,13763,13765],{"id":13764},"are-ai-agents-just-llms","Are AI agents just LLMs?",[17,13767,13768],{},"No. The model provides much of the reasoning capability, but an agent is a larger system that may also include instructions, tools, state, orchestration, permissions, and an execution environment.",[909,13770,13772],{"id":13771},"do-agents-need-memory","Do agents need memory?",[17,13774,13775],{},"Not necessarily. Memory is common and useful for long-running or stateful tasks, but it is not part of every definition of an agent. Some agents only need the state of the current execution.",[909,13777,13779],{"id":13778},"can-an-agent-act-autonomously","Can an agent act autonomously?",[17,13781,13782],{},"Yes, but autonomy exists on a spectrum. One agent might perform several low-risk steps automatically, while another may require human approval before sending messages, changing data, spending money, or performing irreversible actions.",[909,13784,13786],{"id":13785},"what-is-a-multi-agent-system","What is a multi-agent system?",[17,13788,13789],{},"A multi-agent system uses multiple specialized agents that cooperate or delegate tasks. A manager agent might coordinate research, analysis, and writing agents, for example. More agents can increase specialization, but they also add orchestration and evaluation complexity.",[17,13791,13792],{},[161,13793,13794],{},"INTERNAL LINK: Single-Agent vs Multi-Agent Systems",[12,13796,960],{"id":959},[17,13798,13799,13800,174],{},"An AI agent is not simply an AI model that produces better answers. It is a system designed to ",[21,13801,13802],{},"move a task forward",[17,13804,13805],{},"The defining shift is from:",[17,13807,13808],{},[21,13809,13810],{},"“Generate a response.”",[17,13812,5949],{},[17,13814,13815],{},[21,13816,13817],{},"“Understand the goal, decide what to do, take action, evaluate the result, and continue.”",[17,13819,13820],{},"That added agency can make AI substantially more useful—but it also makes system design, permissions, evaluation, and human oversight much more important.",[12,13822,976],{"id":975},[978,13824,13825,13836,13847,13858,13869],{},[981,13826,13827,13830,13831],{},[21,13828,13829],{},"OpenAI — “A practical guide to building agents.”"," Definition, agent architecture, tools, orchestration, and guardrails. ",[29,13832,13835],{"href":13833,"rel":13834},"https:\u002F\u002Fopenai.com\u002Fbusiness\u002Fguides-and-resources\u002Fa-practical-guide-to-building-ai-agents\u002F?utm_source=chatgpt.com",[33],"OpenAI guide",[981,13837,13838,13841,13842],{},[21,13839,13840],{},"Anthropic — “Trustworthy agents in practice.” April 9, 2026."," Agent execution loop, architecture, human control, and security considerations. ",[29,13843,13846],{"href":13844,"rel":13845},"https:\u002F\u002Fwww.anthropic.com\u002Fresearch\u002Ftrustworthy-agents?utm_source=chatgpt.com",[33],"Anthropic research",[981,13848,13849,13852,13853],{},[21,13850,13851],{},"Google Cloud — “What are AI agents?” Updated April 2, 2026."," Definitions, reasoning and action, tools, memory, single-agent and multi-agent concepts. ",[29,13854,13857],{"href":13855,"rel":13856},"https:\u002F\u002Fcloud.google.com\u002Fdiscover\u002Fwhat-are-ai-agents?utm_source=chatgpt.com",[33],"Google Cloud overview",[981,13859,13860,13863,13864],{},[21,13861,13862],{},"Anthropic — “Building effective agents.” December 19, 2024."," Architectural distinction between workflows and agents and guidance on choosing system complexity. Anthropic notes that parts of its tooling discussion have changed since publication, but the architectural distinction remains relevant. ",[29,13865,13868],{"href":13866,"rel":13867},"https:\u002F\u002Fwww.anthropic.com\u002Fengineering\u002Fbuilding-effective-agents?utm_source=chatgpt.com",[33],"Anthropic engineering article",[981,13870,13871,13874,13875],{},[21,13872,13873],{},"Yao, Shunyu et al. — “ReAct: Synergizing Reasoning and Acting in Language Models.” ICLR 2023."," Research on combining model reasoning with actions and observations from external environments. ",[29,13876,13879],{"href":13877,"rel":13878},"https:\u002F\u002Fopenreview.net\u002Fpdf?id=WwGWMAktQY&utm_source=chatgpt.com",[33],"OpenReview paper",{"title":185,"searchDepth":311,"depth":311,"links":13881},[13882,13883,13884,13885,13886,13887,13888,13889,13890,13891,13892,13893],{"id":13449,"depth":311,"text":13450},{"id":1151,"depth":311,"text":1152},{"id":13476,"depth":311,"text":13477},{"id":13585,"depth":311,"text":13586},{"id":13635,"depth":311,"text":13636},{"id":13668,"depth":311,"text":13669},{"id":13719,"depth":311,"text":13720},{"id":13735,"depth":311,"text":13736},{"id":886,"depth":311,"text":887},{"id":906,"depth":311,"text":907},{"id":959,"depth":311,"text":960},{"id":975,"depth":311,"text":976},"Learn what an AI agent is, how agents use models, tools and reasoning to complete tasks, and how they differ from chatbots and traditional automation.","\u002Fai-agent.png","Image of AI Agent",{},"\u002Fblog\u002Fen\u002Fai-agent","2026-09-12",{"title":13444,"description":13894},"ai-agent","blog\u002Fen\u002Fai-agent","3Qzp_FojSMuEUwl5Z_hx-fioPEtaDkCO7DcRZtk8aVA",{"id":13905,"title":13906,"author":7,"body":13907,"category":4083,"description":14657,"draft":1097,"extension":1098,"featured":1099,"image":14658,"imageAlt":14659,"locale":1102,"meta":14660,"navigation":1099,"path":14661,"publishedAt":13899,"seo":14662,"slug":14663,"stem":14664,"translationKey":14663,"updatedAt":13899,"__hash__":14665},"blog\u002Fblog\u002Fen\u002Fdns-resolution.md","How DNS Resolution Works: Step-by-Step Guide",{"type":9,"value":13908,"toc":14633},[13909,13913,13920,13927,13929,13936,13938,13999,14014,14018,14024,14027,14033,14046,14049,14053,14056,14061,14064,14068,14073,14079,14083,14086,14089,14095,14099,14102,14111,14117,14121,14129,14132,14135,14139,14142,14145,14151,14154,14161,14165,14176,14179,14182,14186,14192,14195,14198,14203,14206,14210,14213,14224,14227,14231,14234,14237,14240,14257,14260,14265,14269,14274,14277,14292,14295,14309,14312,14328,14340,14343,14349,14351,14357,14364,14366,14372,14378,14384,14390,14394,14397,14407,14421,14424,14429,14436,14438,14441,14444,14450,14453,14456,14458,14462,14465,14469,14472,14476,14482,14486,14489,14493,14499,14503,14509,14511,14514,14517,14520,14522,14630],[12,13910,13912],{"id":13911},"how-dns-resolution-works-step-by-step","How DNS Resolution Works: Step by Step",[17,13914,13915,13916,13919],{},"When you type ",[129,13917,13918],{},"www.example.com"," into a browser, the browser cannot connect to that name directly. It needs a network address, usually an IPv4 or IPv6 address, before it can contact the destination server. DNS resolution is the process that finds the DNS data associated with that domain name.",[17,13921,13922,13923,35],{},"The important detail is that this is not necessarily one request to one global database. DNS is distributed. If the answer is not already cached, a recursive resolver may follow referrals through several parts of the DNS hierarchy until it reaches a server authoritative for the requested name. (",[29,13924,1486],{"href":13925,"rel":13926},"https:\u002F\u002Fwww.rfc-editor.org\u002Finfo\u002Frfc1035\u002F?utm_source=chatgpt.com",[33],[12,13928,1152],{"id":1151},[17,13930,13931,13932,35],{},"DNS resolution translates a domain-name query into the DNS records needed by an application. Your device usually sends the request to a recursive resolver. If the resolver has a valid cached answer, it can return it immediately. Otherwise, it can query the DNS hierarchy—typically starting with information about the root, then the relevant top-level domain, and finally an authoritative name server—to obtain the answer and cache it for later use. (",[29,13933,1486],{"href":13934,"rel":13935},"https:\u002F\u002Fwww.rfc-editor.org\u002Finfo\u002Frfc9499\u002F?utm_source=chatgpt.com",[33],[12,13937,2081],{"id":2080},[69,13939,13940,13949],{},[72,13941,13942],{},[75,13943,13944,13946],{},[78,13945,13514],{},[78,13947,13948],{},"Role",[85,13950,13951,13959,13967,13975,13983,13991],{},[75,13952,13953,13956],{},[90,13954,13955],{},"Stub resolver",[90,13957,13958],{},"Sends DNS requests on behalf of an application or operating system",[75,13960,13961,13964],{},[90,13962,13963],{},"Recursive resolver",[90,13965,13966],{},"Finds the final answer for the client",[75,13968,13969,13972],{},[90,13970,13971],{},"Root server",[90,13973,13974],{},"Refers the resolver toward the appropriate top-level domain",[75,13976,13977,13980],{},[90,13978,13979],{},"TLD server",[90,13981,13982],{},"Refers it toward the domain's authoritative servers",[75,13984,13985,13988],{},[90,13986,13987],{},"Authoritative server",[90,13989,13990],{},"Provides authoritative DNS data for the relevant zone",[75,13992,13993,13996],{},[90,13994,13995],{},"TTL",[90,13997,13998],{},"Controls how long a DNS record may normally remain cached",[17,14000,14001,14002,14005,14006,14009,14010,35],{},"Current DNS terminology distinguishes a ",[21,14003,14004],{},"stub resolver",", which depends on another resolver to perform the full resolution process, from a ",[21,14007,14008],{},"recursive resolver",", which performs recursion for the client. (",[29,14011,1486],{"href":14012,"rel":14013},"https:\u002F\u002Fwww.rfc-editor.org\u002Frfc\u002Frfc9499.html?utm_source=chatgpt.com",[33],[12,14015,14017],{"id":14016},"what-is-dns-resolution","What Is DNS Resolution?",[17,14019,14020,14021,35],{},"The Domain Name System is a distributed naming system. Different name servers hold authoritative information for different parts of the domain namespace. A resolver hides much of that distribution from applications: the application asks a question, while the resolver handles the work required to find the relevant DNS records. (",[29,14022,1486],{"href":13925,"rel":14023},[33],[17,14025,14026],{},"For example, a browser may need addresses for:",[179,14028,14031],{"className":14029,"code":14030,"language":184,"meta":185},[182],"www.example.com\n",[129,14032,14030],{"__ignoreMap":185},[17,14034,14035,14036,14038,14039,14041,14042,35],{},"It can request an ",[129,14037,5047],{}," record for IPv4, an ",[129,14040,5052],{}," record for IPv6, or both. An AAAA record stores a single IPv6 address. (",[29,14043,1486],{"href":14044,"rel":14045},"https:\u002F\u002Fwww.rfc-editor.org\u002Finfo\u002Frfc3596\u002F?utm_source=chatgpt.com",[33],[17,14047,14048],{},"DNS can also return other data, including CNAME aliases, mail-routing records, name-server records, and many other record types.",[12,14050,14052],{"id":14051},"how-resolution-works","How Resolution Works",[17,14054,14055],{},"Assume a user wants to open:",[179,14057,14059],{"className":14058,"code":14030,"language":184,"meta":185},[182],[129,14060,14030],{"__ignoreMap":185},[17,14062,14063],{},"and no useful answer is already cached.",[220,14065,14067],{"id":14066},"_1-the-application-requests-a-lookup","1. The Application Requests a Lookup",[17,14069,14070,14071,174],{},"The browser or application asks the system's resolver for DNS information about ",[129,14072,13918],{},[17,14074,14075,14076,35],{},"In many systems, this local component behaves as a stub resolver. It does not independently walk through the entire DNS hierarchy. Instead, it sends the request to a recursive resolver configured by the operating system, network provider, enterprise, VPN, or DNS service. (",[29,14077,1486],{"href":13934,"rel":14078},[33],[220,14080,14082],{"id":14081},"_2-the-recursive-resolver-checks-cache","2. The Recursive Resolver Checks Cache",[17,14084,14085],{},"Before contacting other DNS servers, the recursive resolver can check whether it already has a valid cached answer.",[17,14087,14088],{},"If it does, resolution can end here.",[17,14090,14091,14092,14094],{},"This is why a real DNS lookup does ",[21,14093,151],{}," necessarily contact root, TLD, and authoritative servers every time. Previously obtained addresses, delegations, or other records may still be cached.",[220,14096,14098],{"id":14097},"_3-the-resolver-uses-the-root","3. The Resolver Uses the Root",[17,14100,14101],{},"If the resolver needs to perform the lookup itself and lacks sufficient cached information, it can start from the DNS root.",[17,14103,14104,14105,14107,14108,174],{},"The root does not normally respond with the final IP address for ",[129,14106,13918],{},". Instead, it directs the resolver toward servers responsible for the relevant top-level domain—in this case, ",[129,14109,14110],{},".com",[17,14112,14113,14114,35],{},"This referral model is a fundamental part of DNS resolution. RFC 1035 describes how a resolver may receive either the requested information or a referral to another name server. (",[29,14115,1486],{"href":13925,"rel":14116},[33],[220,14118,14120],{"id":14119},"_4-the-resolver-queries-the-tld","4. The Resolver Queries the TLD",[17,14122,14123,14124,14126,14127,174],{},"The resolver then asks an appropriate ",[129,14125,14110],{}," name server about ",[129,14128,7195],{},[17,14130,14131],{},"Again, the TLD server does not normally host the website's final address record. It provides delegation information identifying the authoritative name servers for the domain.",[17,14133,14134],{},"The resolver now knows where to ask the domain-specific question.",[220,14136,14138],{"id":14137},"_5-the-authoritative-server-answers","5. The Authoritative Server Answers",[17,14140,14141],{},"The resolver queries an authoritative server for the relevant zone.",[17,14143,14144],{},"If that server has the requested data, it can return the record. For example:",[179,14146,14149],{"className":14147,"code":14148,"language":184,"meta":185},[182],"www.example.com.  3600  IN  A  192.0.2.10\n",[129,14150,14148],{"__ignoreMap":185},[17,14152,14153],{},"The actual values depend on the domain configuration.",[17,14155,14156,14157,35],{},"The response can also contain a CNAME. DNS uses CNAME records to identify one name as an alias of another canonical name. The resolver may then need to continue resolving that target. (",[29,14158,1486],{"href":14159,"rel":14160},"https:\u002F\u002Fwww.rfc-editor.org\u002Frfc\u002Frfc1034.html?utm_source=chatgpt.com",[33],[220,14162,14164],{"id":14163},"_6-the-answer-is-cached","6. The Answer Is Cached",[17,14166,14167,14168,14171,14172,35],{},"DNS resource records carry a TTL—",[21,14169,14170],{},"time to live","—which controls how long cached data may be reused before the source should be consulted again. (",[29,14173,1486],{"href":14174,"rel":14175},"https:\u002F\u002Fwww.rfc-editor.org\u002Frfc\u002Frfc8499.html?utm_source=chatgpt.com",[33],[17,14177,14178],{},"If the resolver caches the answer, later users querying the same record may receive it without repeating the full lookup path.",[17,14180,14181],{},"The result is returned to the client, and the application can continue with the next network step, such as establishing a TCP or QUIC connection.",[12,14183,14185],{"id":14184},"why-ttl-matters","Why TTL Matters",[17,14187,14188,14189,174],{},"TTL explains much of what people informally call ",[21,14190,14191],{},"DNS propagation",[17,14193,14194],{},"DNS updates are not generally pushed simultaneously into every resolver cache worldwide. If a resolver still holds an older record whose TTL has not expired, it may continue returning that cached value. Another resolver without that cached record may already retrieve the new value.",[17,14196,14197],{},"So after a DNS change, two users can temporarily receive different answers without either resolver necessarily being broken.",[17,14199,14200],{},[161,14201,14202],{},"INTERNAL LINK: DNS Propagation Explained",[17,14204,14205],{},"TTL is therefore a tradeoff. Longer caching can reduce repeated DNS work and authoritative query load, while shorter TTLs allow changes to become visible to caches sooner.",[12,14207,14209],{"id":14208},"negative-answers-are-cached-too","Negative Answers Are Cached Too",[17,14211,14212],{},"DNS caching is not limited to successful answers.",[17,14214,14215,14216,14219,14220,35],{},"An authoritative server can report that a name does not exist, commonly through an ",[129,14217,14218],{},"NXDOMAIN"," response. DNS standards define negative caching so resolvers can temporarily cache these answers instead of repeatedly asking authoritative infrastructure about the same missing name. (",[29,14221,1486],{"href":14222,"rel":14223},"https:\u002F\u002Fwww.rfc-editor.org\u002Frfc\u002Frfc2308.html?utm_source=chatgpt.com",[33],[17,14225,14226],{},"This has an operational consequence: if a hostname was recently nonexistent and is then created, some resolvers may temporarily continue returning a cached negative response.",[12,14228,14230],{"id":14229},"dns-and-performance","DNS and Performance",[17,14232,14233],{},"DNS resolution happens before an application can connect to a host whose address it does not yet know. A slow or unreliable DNS path can therefore delay the start of later connection work.",[17,14235,14236],{},"However, measuring \"DNS speed\" requires context. A cached lookup may be dramatically different from an uncached lookup, and the resolver may already have cached delegation information even when it does not have the final record.",[17,14238,14239],{},"For web-performance analysis, distinguish between:",[1640,14241,14242,14245,14248,14251,14254],{},[981,14243,14244],{},"browser or operating-system caching,",[981,14246,14247],{},"recursive-resolver caching,",[981,14249,14250],{},"authoritative DNS response time,",[981,14252,14253],{},"network latency to the chosen resolver,",[981,14255,14256],{},"and uncached resolution through the DNS hierarchy.",[17,14258,14259],{},"A single DNS benchmark does not automatically represent what every real user experiences.",[17,14261,14262],{},[161,14263,14264],{},"INTERNAL LINK: DNS Performance and Website Speed",[12,14266,14268],{"id":14267},"how-to-inspect-resolution","How to Inspect Resolution",[17,14270,190,14271,14273],{},[129,14272,5381],{}," utility is useful for examining DNS responses.",[17,14275,14276],{},"A normal lookup:",[179,14278,14280],{"className":3564,"code":14279,"language":3566,"meta":185,"style":185},"dig example.com A\n",[129,14281,14282],{"__ignoreMap":185},[161,14283,14284,14286,14289],{"class":299,"line":300},[161,14285,5381],{"class":314},[161,14287,14288],{"class":321}," example.com",[161,14290,14291],{"class":321}," A\n",[17,14293,14294],{},"An IPv6 lookup:",[179,14296,14298],{"className":3564,"code":14297,"language":3566,"meta":185,"style":185},"dig example.com AAAA\n",[129,14299,14300],{"__ignoreMap":185},[161,14301,14302,14304,14306],{"class":299,"line":300},[161,14303,5381],{"class":314},[161,14305,14288],{"class":321},[161,14307,14308],{"class":321}," AAAA\n",[17,14310,14311],{},"To inspect the delegation path:",[179,14313,14315],{"className":3564,"code":14314,"language":3566,"meta":185,"style":185},"dig +trace example.com A\n",[129,14316,14317],{"__ignoreMap":185},[161,14318,14319,14321,14324,14326],{"class":299,"line":300},[161,14320,5381],{"class":314},[161,14322,14323],{"class":321}," +trace",[161,14325,14288],{"class":321},[161,14327,14291],{"class":321},[17,14329,14330,14331,14334,14335,35],{},"BIND's documentation states that ",[129,14332,14333],{},"+trace"," starts from the root and follows referrals using iterative queries, displaying the servers involved in resolving the name. (",[29,14336,14339],{"href":14337,"rel":14338},"https:\u002F\u002Fbind9.readthedocs.io\u002Fen\u002Fv9.20.11\u002Fmanpages.html?utm_source=chatgpt.com",[33],"bind9.readthedocs.io",[17,14341,14342],{},"This makes it useful when diagnosing problems such as:",[179,14344,14347],{"className":14345,"code":14346,"language":184,"meta":185},[182],"Root works\n→ TLD delegation works\n→ authoritative server fails\n",[129,14348,14346],{"__ignoreMap":185},[17,14350,8906],{},[179,14352,14355],{"className":14353,"code":14354,"language":184,"meta":185},[182],"Authoritative server returns the correct record\n→ recursive resolver still has an older cached answer\n",[129,14356,14354],{"__ignoreMap":185},[17,14358,14359,14360,14363],{},"One limitation is important: ",[129,14361,14362],{},"dig +trace"," does not necessarily reproduce the exact path used by a browser. Browsers, operating systems, VPNs, enterprise networks, or encrypted DNS configurations may use different resolvers.",[12,14365,859],{"id":858},[17,14367,14368,14371],{},[21,14369,14370],{},"\"DNS always contacts the root first.\"","\nNo. Cache may provide the final answer or enough delegation information to start farther down the hierarchy.",[17,14373,14374,14377],{},[21,14375,14376],{},"\"The root server stores every website's IP address.\"","\nNo. DNS is distributed. Root servers primarily help direct resolution toward the appropriate TLD infrastructure.",[17,14379,14380,14383],{},[21,14381,14382],{},"\"Changing DNS means everyone immediately sees the new value.\"","\nNot necessarily. Existing cached answers may remain usable until their applicable TTLs expire.",[17,14385,14386,14389],{},[21,14387,14388],{},"\"DNS normally returns only an IP address.\"","\nNo. DNS supports many resource-record types. Even address resolution may involve CNAME records before an A or AAAA answer is reached.",[12,14391,14393],{"id":14392},"dns-security-and-privacy","DNS Security and Privacy",[17,14395,14396],{},"DNSSEC and encrypted DNS solve different problems.",[17,14398,14399,14402,14403,35],{},[21,14400,14401],{},"DNSSEC"," provides mechanisms for authenticating DNS data and checking its integrity. It does not provide confidentiality; the DNSSEC specification explicitly distinguishes authentication and integrity from secrecy. (",[29,14404,1486],{"href":14405,"rel":14406},"https:\u002F\u002Fwww.rfc-editor.org\u002Finfo\u002Frfc4033\u002F?utm_source=chatgpt.com",[33],[17,14408,14409,14412,14413,14416,14417,35],{},[21,14410,14411],{},"DNS over TLS (DoT)"," uses TLS to provide privacy for DNS transport, while ",[21,14414,14415],{},"DNS over HTTPS (DoH)"," maps DNS queries and responses into HTTPS exchanges. (",[29,14418,1486],{"href":14419,"rel":14420},"https:\u002F\u002Fwww.rfc-editor.org\u002Frfc\u002Frfc7858.html?utm_source=chatgpt.com",[33],[17,14422,14423],{},"These technologies therefore should not be treated as interchangeable.",[17,14425,14426],{},[161,14427,14428],{},"INTERNAL LINK: DNSSEC vs DoH vs DoT",[17,14430,14431,14432,35],{},"DNS implementations also need to support both UDP and TCP. RFC 7766 updated the core requirements so general-purpose DNS implementations must support both transports. (",[29,14433,1486],{"href":14434,"rel":14435},"https:\u002F\u002Fwww.rfc-editor.org\u002Frfc\u002Frfc7766.html?utm_source=chatgpt.com",[33],[12,14437,887],{"id":886},[17,14439,14440],{},"When diagnosing DNS problems, do not stop at \"the domain resolves\" or \"the domain does not resolve.\"",[17,14442,14443],{},"Identify exactly which layer is producing the result:",[179,14445,14448],{"className":14446,"code":14447,"language":184,"meta":185},[182],"Client\n→ configured recursive resolver\n→ cached data\n→ root\u002FTLD delegation\n→ authoritative DNS\n→ final A\u002FAAAA\u002FCNAME response\n",[129,14449,14447],{"__ignoreMap":185},[17,14451,14452],{},"Then inspect TTLs, delegation, authoritative answers, and cached responses separately.",[17,14454,14455],{},"This approach is more reliable than repeatedly changing DNS records and waiting, because it shows whether the problem is in the zone itself, the delegation path, a resolver cache, or the client environment.",[12,14457,907],{"id":906},[909,14459,14461],{"id":14460},"what-does-dns-resolution-do","What does DNS resolution do?",[17,14463,14464],{},"It retrieves DNS information associated with a domain name. For web traffic, that commonly includes discovering an IPv4 or IPv6 address that the browser can use to contact the host.",[909,14466,14468],{"id":14467},"does-every-dns-lookup-reach-an-authoritative-server","Does every DNS lookup reach an authoritative server?",[17,14470,14471],{},"No. A valid cached response can satisfy the request without another authoritative lookup.",[909,14473,14475],{"id":14474},"what-is-a-recursive-dns-resolver","What is a recursive DNS resolver?",[17,14477,14478,14479,35],{},"It is a resolver that performs recursive service for a client, finding an answer rather than simply returning referrals when recursion is available. (",[29,14480,1486],{"href":13934,"rel":14481},[33],[909,14483,14485],{"id":14484},"what-is-the-difference-between-recursive-and-authoritative-dns","What is the difference between recursive and authoritative DNS?",[17,14487,14488],{},"A recursive resolver finds answers for clients. An authoritative server serves authoritative DNS data for zones for which it is responsible.",[909,14490,14492],{"id":14491},"why-can-old-dns-records-still-appear","Why can old DNS records still appear?",[17,14494,14495,14496,35],{},"A resolver may still have an earlier answer in cache. TTL determines how long a resource record may normally remain cached before its source needs to be consulted again. (",[29,14497,1486],{"href":14174,"rel":14498},[33],[909,14500,14502],{"id":14501},"does-dnssec-encrypt-dns-queries","Does DNSSEC encrypt DNS queries?",[17,14504,14505,14506,35],{},"No. DNSSEC provides DNS data-origin authentication and integrity mechanisms, but not confidentiality. Encrypted transports such as DoT and DoH address DNS transport privacy. (",[29,14507,1486],{"href":14405,"rel":14508},[33],[12,14510,960],{"id":959},[17,14512,14513],{},"DNS resolution is best understood as a distributed lookup process, not a simple domain-to-IP conversion performed by one central server.",[17,14515,14516],{},"The client usually asks a recursive resolver. Cache may answer immediately. If more information is required, the resolver follows the DNS hierarchy and its referrals until it obtains authoritative data, then caches that result according to DNS caching rules.",[17,14518,14519],{},"Once you understand where the answer came from—client cache, recursive cache, delegation, or authoritative DNS—DNS performance problems and configuration errors become much easier to diagnose.",[12,14521,976],{"id":975},[978,14523,14524,14534,14544,14554,14564,14575,14586,14596,14606,14617],{},[981,14525,14526,14529,14530],{},[21,14527,14528],{},"Paul Mockapetris — RFC 1034: Domain Names — Concepts and Facilities",", November 1987. RFC Editor. ",[29,14531,14533],{"href":14159,"rel":14532},[33],"RFC 1034",[981,14535,14536,14529,14539],{},[21,14537,14538],{},"Paul Mockapetris — RFC 1035: Domain Names — Implementation and Specification",[29,14540,14543],{"href":14541,"rel":14542},"https:\u002F\u002Fwww.rfc-editor.org\u002Frfc\u002Frfc1035.html?utm_source=chatgpt.com",[33],"RFC 1035",[981,14545,14546,14549,14550],{},[21,14547,14548],{},"Paul Hoffman, Kazunori Fujiwara — RFC 9499: DNS Terminology",", March 2024. IETF \u002F RFC Editor. ",[29,14551,14553],{"href":14012,"rel":14552},[33],"RFC 9499",[981,14555,14556,14559,14560],{},[21,14557,14558],{},"Mark Andrews — RFC 2308: Negative Caching of DNS Queries",", March 1998. RFC Editor. ",[29,14561,14563],{"href":14222,"rel":14562},[33],"RFC 2308",[981,14565,14566,14569,14570],{},[21,14567,14568],{},"Roy Arends et al. — RFC 4033: DNS Security Introduction and Requirements",", March 2005. IETF \u002F RFC Editor. ",[29,14571,14574],{"href":14572,"rel":14573},"https:\u002F\u002Fwww.rfc-editor.org\u002Frfc\u002Frfc4033.html?utm_source=chatgpt.com",[33],"RFC 4033",[981,14576,14577,14580,14581],{},[21,14578,14579],{},"Susan Thomson et al. — RFC 3596: DNS Extensions to Support IP Version 6",", October 2003. RFC Editor. ",[29,14582,14585],{"href":14583,"rel":14584},"https:\u002F\u002Fwww.rfc-editor.org\u002Frfc\u002Frfc3596.html?utm_source=chatgpt.com",[33],"RFC 3596",[981,14587,14588,14591,14592],{},[21,14589,14590],{},"John Dickinson et al. — RFC 7766: DNS Transport over TCP — Implementation Requirements",", March 2016. IETF \u002F RFC Editor. ",[29,14593,14595],{"href":14434,"rel":14594},[33],"RFC 7766",[981,14597,14598,14601,14602],{},[21,14599,14600],{},"Z. Hu et al. — RFC 7858: Specification for DNS over Transport Layer Security (TLS)",", May 2016. IETF \u002F RFC Editor. ",[29,14603,14605],{"href":14419,"rel":14604},[33],"RFC 7858",[981,14607,14608,14611,14612],{},[21,14609,14610],{},"Paul Hoffman, Patrick McManus — RFC 8484: DNS Queries over HTTPS (DoH)",", October 2018. IETF \u002F RFC Editor. ",[29,14613,14616],{"href":14614,"rel":14615},"https:\u002F\u002Fwww.rfc-editor.org\u002Frfc\u002Frfc8484.html?utm_source=chatgpt.com",[33],"RFC 8484",[981,14618,14619,14625,14626],{},[21,14620,14621,14622,14624],{},"Internet Systems Consortium — BIND 9 ",[129,14623,5381],{}," documentation",", BIND 9.20 documentation. ",[29,14627,14629],{"href":14337,"rel":14628},[33],"BIND 9 Manual Pages",[1067,14631,14632],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}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 .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":185,"searchDepth":311,"depth":311,"links":14634},[14635,14636,14637,14638,14639,14647,14648,14649,14650,14651,14652,14653,14654,14655,14656],{"id":13911,"depth":311,"text":13912},{"id":1151,"depth":311,"text":1152},{"id":2080,"depth":311,"text":2081},{"id":14016,"depth":311,"text":14017},{"id":14051,"depth":311,"text":14052,"children":14640},[14641,14642,14643,14644,14645,14646],{"id":14066,"depth":325,"text":14067},{"id":14081,"depth":325,"text":14082},{"id":14097,"depth":325,"text":14098},{"id":14119,"depth":325,"text":14120},{"id":14137,"depth":325,"text":14138},{"id":14163,"depth":325,"text":14164},{"id":14184,"depth":311,"text":14185},{"id":14208,"depth":311,"text":14209},{"id":14229,"depth":311,"text":14230},{"id":14267,"depth":311,"text":14268},{"id":858,"depth":311,"text":859},{"id":14392,"depth":311,"text":14393},{"id":886,"depth":311,"text":887},{"id":906,"depth":311,"text":907},{"id":959,"depth":311,"text":960},{"id":975,"depth":311,"text":976},"Learn how DNS resolution works from browser request to recursive resolver, root and TLD servers, authoritative DNS, caching, TTLs, and final IP address.","\u002Fdns-resolution.png","Image of DNS",{},"\u002Fblog\u002Fen\u002Fdns-resolution",{"title":13906,"description":14657},"dns-resolution","blog\u002Fen\u002Fdns-resolution","_jhvbDK5NtOVcvdyR9rciYx1qZpFlQMfYFkj9T19-00",{"id":14667,"title":14668,"author":7,"body":14669,"category":15504,"description":15505,"draft":1097,"extension":1098,"featured":1099,"image":15506,"imageAlt":15507,"locale":1102,"meta":15508,"navigation":1099,"path":15509,"publishedAt":13899,"seo":15510,"slug":15511,"stem":15512,"translationKey":15511,"updatedAt":13899,"__hash__":15513},"blog\u002Fblog\u002Fen\u002Fjavascript-seo.md","JavaScript SEO: Practical Guide to Crawling and Rendering",{"type":9,"value":14670,"toc":15485},[14671,14675,14678,14681,14683,14690,14697,14699,14773,14782,14787,14791,14794,14837,14840,14843,14849,14854,14858,14861,14920,14923,14929,14935,14939,14942,14945,14969,14972,15000,15008,15014,15021,15028,15033,15037,15040,15043,15048,15057,15062,15068,15072,15079,15082,15088,15097,15106,15111,15114,15129,15132,15136,15139,15146,15153,15156,15160,15163,15170,15173,15177,15186,15259,15262,15268,15272,15275,15282,15294,15300,15305,15307,15316,15319,15324,15326,15332,15335,15338,15340,15344,15347,15352,15356,15359,15366,15370,15373,15378,15382,15385,15390,15394,15397,15402,15404,15407,15410,15412,15483],[12,14672,14674],{"id":14673},"javascript-seo-a-practical-engineering-guide","JavaScript SEO: A Practical Engineering Guide",[17,14676,14677],{},"JavaScript does not make a website “bad for SEO.” Google has rendered JavaScript for years, and in March 2026 it even removed outdated documentation that implied JavaScript-loaded content was inherently harder for Google Search. The real problem is dependency: if important content, links, metadata, or error states only become correct after fragile client-side code succeeds, search engines have more opportunities to receive the wrong version of the page.",[17,14679,14680],{},"JavaScript SEO is therefore less about avoiding JavaScript and more about engineering pages that remain discoverable, renderable, indexable, and semantically correct.",[12,14682,1152],{"id":1151},[17,14684,14685,14686,14689],{},"JavaScript SEO is the practice of making JavaScript-powered websites understandable and indexable by search engines. For Google, the critical path is ",[21,14687,14688],{},"crawl → render → index",". Your job is to ensure that important URLs can be discovered, the rendered HTML contains the intended content, HTTP responses communicate the correct state, and signals such as canonical URLs, robots directives, titles, links, and structured data remain consistent.",[17,14691,14692],{},[29,14693,14696],{"href":14694,"rel":14695},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fcrawling-indexing\u002Fjavascript\u002Fjavascript-seo-basics",[33],"Google Search Central — Understand the JavaScript SEO basics",[12,14698,2081],{"id":2080},[69,14700,14701,14710],{},[72,14702,14703],{},[75,14704,14705,14707],{},[78,14706,2904],{},[78,14708,14709],{},"What matters",[85,14711,14712,14719,14731,14739,14749,14757,14765],{},[75,14713,14714,14716],{},[90,14715,1217],{},[90,14717,14718],{},"Google Search uses an evergreen Chromium renderer.",[75,14720,14721,14724],{},[90,14722,14723],{},"Links",[90,14725,14726,14727,14730],{},"Use real ",[129,14728,14729],{},"\u003Ca href=\"...\">"," links for crawlable navigation.",[75,14732,14733,14736],{},[90,14734,14735],{},"URLs",[90,14737,14738],{},"Give indexable content stable, unique URLs.",[75,14740,14741,14744],{},[90,14742,14743],{},"Status codes",[90,14745,14746,14747,174],{},"Real missing pages should not quietly return ",[129,14748,1716],{},[75,14750,14751,14754],{},[90,14752,14753],{},"Metadata",[90,14755,14756],{},"Keep title, canonical and robots directives consistent.",[75,14758,14759,14762],{},[90,14760,14761],{},"Lazy loading",[90,14763,14764],{},"Do not require clicking or scrolling for Google to access important content.",[75,14766,14767,14770],{},[90,14768,14769],{},"Architecture",[90,14771,14772],{},"SSR, static rendering or hybrid rendering usually reduce rendering dependency.",[17,14774,14775,14776,14778,14779,14781],{},"Google processes JavaScript applications through crawling, rendering and indexing. When Googlebot first fetches a page, it can already extract links from the initial HTML. Pages returning ",[129,14777,1716],{}," are normally queued for rendering, where Chromium executes JavaScript and Google processes the resulting HTML again. Non-",[129,14780,1716],{}," responses may not be rendered.",[17,14783,14784],{},[29,14785,14696],{"href":14694,"rel":14786},[33],[12,14788,14790],{"id":14789},"what-is-javascript-seo","What Is JavaScript SEO?",[17,14792,14793],{},"Consider a product page built as a single-page application. The server initially returns something like:",[179,14795,14797],{"className":292,"code":14796,"language":294,"meta":185,"style":185},"\u003Cdiv id=\"app\">\u003C\u002Fdiv>\n\u003Cscript src=\"\u002Fapp.js\">\u003C\u002Fscript>\n",[129,14798,14799,14819],{"__ignoreMap":185},[161,14800,14801,14803,14806,14808,14810,14813,14815,14817],{"class":299,"line":300},[161,14802,304],{"class":303},[161,14804,14805],{"class":307},"div",[161,14807,6409],{"class":314},[161,14809,318],{"class":303},[161,14811,14812],{"class":321},"\"app\"",[161,14814,6058],{"class":303},[161,14816,14805],{"class":307},[161,14818,361],{"class":303},[161,14820,14821,14823,14825,14827,14829,14831,14833,14835],{"class":299,"line":311},[161,14822,304],{"class":303},[161,14824,5916],{"class":307},[161,14826,6050],{"class":314},[161,14828,318],{"class":303},[161,14830,6055],{"class":321},[161,14832,6058],{"class":303},[161,14834,5916],{"class":307},[161,14836,361],{"class":303},[17,14838,14839],{},"A normal browser then downloads JavaScript, calls an API and creates the product title, description, links, price and structured data.",[17,14841,14842],{},"That experience may work perfectly for a user. From an SEO perspective, however, the useful page exists only after several additional dependencies succeed: JavaScript must download, execute without a fatal error, reach the API, receive usable data and update the DOM correctly.",[17,14844,14845,14846],{},"JavaScript SEO asks a simple engineering question: ",[21,14847,14848],{},"what does a crawler actually receive and eventually render?",[17,14850,14851],{},[161,14852,14853],{},"INTERNAL LINK: How Search Engines Crawl, Render and Index Pages",[12,14855,14857],{"id":14856},"rendering-architecture","Rendering Architecture",[17,14859,14860],{},"Rendering strategy matters because it determines how much of the page depends on client-side execution.",[69,14862,14863,14875],{},[72,14864,14865],{},[75,14866,14867,14869,14872],{},[78,14868,8443],{},[78,14870,14871],{},"Initial response",[78,14873,14874],{},"Practical SEO implication",[85,14876,14877,14888,14899,14910],{},[75,14878,14879,14882,14885],{},[90,14880,14881],{},"Client-side rendering",[90,14883,14884],{},"Mostly app shell + JavaScript",[90,14886,14887],{},"Search-visible content depends heavily on rendering",[75,14889,14890,14893,14896],{},[90,14891,14892],{},"Server-side rendering",[90,14894,14895],{},"Page HTML generated on request",[90,14897,14898],{},"Core content is available immediately",[75,14900,14901,14904,14907],{},[90,14902,14903],{},"Static rendering",[90,14905,14906],{},"HTML generated ahead of time",[90,14908,14909],{},"Strong fit for predictable public content",[75,14911,14912,14914,14917],{},[90,14913,8420],{},[90,14915,14916],{},"Server\u002Fstatic HTML plus client interactivity",[90,14918,14919],{},"Often a practical balance",[17,14921,14922],{},"Google explicitly recommends server-side rendering, static rendering or hydration instead of dynamic rendering as a long-term solution. Dynamic rendering—serving bots a specially rendered version while users receive the JavaScript application—is now described as a workaround that adds complexity.",[17,14924,14925],{},[29,14926,14928],{"href":9498,"rel":14927},[33],"Google Search Central — Dynamic rendering as a workaround",[17,14930,14931,14932,14934],{},"This does ",[21,14933,151],{}," mean every SPA must be rebuilt. A client-rendered application can be indexed. The architectural question is whether SEO-critical content should depend on client execution when it could be available directly in HTML.",[12,14936,14938],{"id":14937},"build-crawlable-urls","Build Crawlable URLs",[17,14940,14941],{},"One of the most common JavaScript SEO mistakes is implementing navigation as behavior instead of links.",[17,14943,14944],{},"Prefer:",[179,14946,14948],{"className":292,"code":14947,"language":294,"meta":185,"style":185},"\u003Ca href=\"\u002Fservices\u002Ftechnical-seo\">Technical SEO\u003C\u002Fa>\n",[129,14949,14950],{"__ignoreMap":185},[161,14951,14952,14954,14956,14958,14960,14963,14965,14967],{"class":299,"line":300},[161,14953,304],{"class":303},[161,14955,29],{"class":307},[161,14957,1285],{"class":314},[161,14959,318],{"class":303},[161,14961,14962],{"class":321},"\"\u002Fservices\u002Ftechnical-seo\"",[161,14964,1293],{"class":303},[161,14966,29],{"class":307},[161,14968,361],{"class":303},[17,14970,14971],{},"Avoid relying on patterns such as:",[179,14973,14975],{"className":292,"code":14974,"language":294,"meta":185,"style":185},"\u003Cspan onclick=\"openService()\">Technical SEO\u003C\u002Fspan>\n",[129,14976,14977],{"__ignoreMap":185},[161,14978,14979,14981,14983,14985,14987,14989,14992,14994,14996,14998],{"class":299,"line":300},[161,14980,304],{"class":303},[161,14982,161],{"class":307},[161,14984,2308],{"class":314},[161,14986,318],{"class":303},[161,14988,2313],{"class":321},[161,14990,14991],{"class":314},"openService",[161,14993,6385],{"class":321},[161,14995,1293],{"class":303},[161,14997,161],{"class":307},[161,14999,361],{"class":303},[17,15001,15002,15003,2263,15005,15007],{},"Google generally expects crawlable links to use an ",[129,15004,1303],{},[129,15006,1307],{},". JavaScript may create those links dynamically, but the resulting DOM should still contain valid anchors and resolvable URLs.",[17,15009,15010],{},[29,15011,15013],{"href":2237,"rel":15012},[33],"Google Search Central — Link best practices for Google",[17,15015,15016,15017,15020],{},"For SPAs, avoid using fragments such as ",[129,15018,15019],{},"#\u002Fproducts\u002F123"," to represent separately indexable content. Google recommends normal URLs together with the History API for client-side routing.",[17,15022,15023],{},[29,15024,15027],{"href":15025,"rel":15026},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fcrawling-indexing\u002Fjavascript\u002Ffix-search-javascript",[33],"Google Search Central — Fix Search-related JavaScript problems",[17,15029,15030],{},[161,15031,15032],{},"INTERNAL LINK: Internal Linking for JavaScript Websites",[12,15034,15036],{"id":15035},"protect-critical-metadata","Protect Critical Metadata",[17,15038,15039],{},"JavaScript can change titles, meta descriptions, canonical URLs and robots directives, but doing so increases the number of states you must validate.",[17,15041,15042],{},"Canonical handling deserves particular care. Google can process a canonical inserted by JavaScript, but its JavaScript SEO documentation recommends using HTML where possible. If both the initial HTML and JavaScript provide canonical signals, they should not conflict. Multiple or contradictory canonical elements can produce unexpected results.",[17,15044,15045],{},[29,15046,14696],{"href":14694,"rel":15047},[33],[17,15049,15050,15051,15053,15054,15056],{},"Robots directives are even more sensitive. If the initial HTML contains ",[129,15052,1514],{},", Google may skip rendering, so JavaScript that later removes ",[129,15055,1514],{}," cannot be assumed to rescue the page.",[17,15058,15059],{},[29,15060,14696],{"href":2807,"rel":15061},[33],[17,15063,15064,15065],{},"A useful engineering rule is therefore: ",[21,15066,15067],{},"SEO-critical metadata should have the correct value as early and deterministically as possible.",[12,15069,15071],{"id":15070},"handle-errors-correctly","Handle Errors Correctly",[17,15073,15074,15075,15078],{},"SPAs frequently return the application shell with ",[129,15076,15077],{},"HTTP 200"," for every URL—including products, articles or profiles that do not exist.",[17,15080,15081],{},"That creates a soft-404 risk.",[17,15083,7177,15084,15087],{},[129,15085,15086],{},"\u002Fproducts\u002Fdeleted-item"," renders an error message but the server still responds:",[179,15089,15091],{"className":5722,"code":15090,"language":5724,"meta":185,"style":185},"HTTP\u002F1.1 200 OK\n",[129,15092,15093],{"__ignoreMap":185},[161,15094,15095],{"class":299,"line":300},[161,15096,15090],{},[17,15098,15099,15100,15102,15103,15105],{},"Google may initially interpret it as a valid page. Google recommends either routing the request to a URL that actually returns ",[129,15101,1334],{},", or applying ",[129,15104,1514],{}," to the client-rendered error page when a true HTTP status cannot practically be returned.",[17,15107,15108],{},[29,15109,15027],{"href":15025,"rel":15110},[33],[17,15112,15113],{},"Where possible, fixing the server response is cleaner:",[179,15115,15117],{"className":5722,"code":15116,"language":5724,"meta":185,"style":185},"HTTP\u002F1.1 404 Not Found\nContent-Type: text\u002Fhtml\n",[129,15118,15119,15124],{"__ignoreMap":185},[161,15120,15121],{"class":299,"line":300},[161,15122,15123],{},"HTTP\u002F1.1 404 Not Found\n",[161,15125,15126],{"class":299,"line":311},[161,15127,15128],{},"Content-Type: text\u002Fhtml\n",[17,15130,15131],{},"Status codes are part of your SEO architecture, not merely backend implementation details.",[12,15133,15135],{"id":15134},"watch-lazy-loading","Watch Lazy Loading",[17,15137,15138],{},"Lazy loading is useful for performance, but important content should not require a user action before it exists.",[17,15140,15141,15142,15145],{},"Google Search does not click buttons or scroll the page to trigger content. Google therefore recommends implementations that load relevant content when it becomes visible in the viewport, such as native browser lazy loading or ",[129,15143,15144],{},"IntersectionObserver",", rather than requiring interaction.",[17,15147,15148],{},[29,15149,15152],{"href":15150,"rel":15151},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fcrawling-indexing\u002Fjavascript\u002Flazy-loading",[33],"Google Search Central — Fix lazy-loaded content",[17,15154,15155],{},"Infinite scroll needs similar treatment. Each indexable chunk should have a persistent URL and be reachable through normal links; scrolling can enhance the user experience, but it should not be the only discovery mechanism.",[12,15157,15159],{"id":15158},"structured-data","Structured Data",[17,15161,15162],{},"Google can process JSON-LD generated by JavaScript when that structured data exists in the rendered DOM. This makes client-generated structured data technically valid. Google nevertheless recommends testing the rendered result with the Rich Results Test. For rapidly changing ecommerce information, its documentation also notes specific reliability concerns around dynamically generated product markup.",[17,15164,15165],{},[29,15166,15169],{"href":15167,"rel":15168},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Fgenerate-structured-data-with-javascript",[33],"Google Search Central — Generate structured data with JavaScript",[17,15171,15172],{},"For predictable page-level schema, generating JSON-LD during server or static rendering usually removes an unnecessary dependency.",[12,15174,15176],{"id":15175},"diagnose-javascript-seo","Diagnose JavaScript SEO",[17,15178,15179,15180,8394,15183,174],{},"A useful debugging process compares ",[21,15181,15182],{},"what the server sends",[21,15184,15185],{},"what Google renders",[69,15187,15188,15196],{},[72,15189,15190],{},[75,15191,15192,15194],{},[78,15193,1185],{},[78,15195,12094],{},[85,15197,15198,15205,15213,15221,15229,15236,15244,15251],{},[75,15199,15200,15202],{},[90,15201,4508],{},[90,15203,15204],{},"Is content, a URL or a rich result missing from Search?",[75,15206,15207,15210],{},[90,15208,15209],{},"Measurement",[90,15211,15212],{},"What does URL Inspection show?",[75,15214,15215,15218],{},[90,15216,15217],{},"Initial HTML",[90,15219,15220],{},"Is the important content already present?",[75,15222,15223,15226],{},[90,15224,15225],{},"Rendered HTML",[90,15227,15228],{},"Does the content appear after Google renders it?",[75,15230,15231,15233],{},[90,15232,2938],{},[90,15234,15235],{},"Did JavaScript or API requests fail?",[75,15237,15238,15241],{},[90,15239,15240],{},"Signals",[90,15242,15243],{},"Are canonical, robots and status states correct?",[75,15245,15246,15248],{},[90,15247,4520],{},[90,15249,15250],{},"Correct the earliest failing dependency",[75,15252,15253,15256],{},[90,15254,15255],{},"Re-measurement",[90,15257,15258],{},"Test the live URL and rendered HTML again",[17,15260,15261],{},"Google specifically recommends the URL Inspection Tool and Rich Results Test for examining rendered HTML, loaded resources, JavaScript errors and other rendering information. Client-side analytics alone may not accurately represent Googlebot or Web Rendering Service activity.",[17,15263,15264],{},[29,15265,15027],{"href":15266,"rel":15267},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fcrawling-indexing\u002Fjavascript\u002Ffix-search-javascript?utm_source=chatgpt.com",[33],[12,15269,15271],{"id":15270},"javascript-and-performance","JavaScript and Performance",[17,15273,15274],{},"JavaScript SEO also overlaps with performance. Large amounts of client-side JavaScript require downloading, parsing, compiling and execution on the browser's main thread. That work can delay interactions and hurt INP.",[17,15276,15277],{},[29,15278,15281],{"href":15279,"rel":15280},"https:\u002F\u002Fweb.dev\u002Farticles\u002Foptimize-inp?utm_source=chatgpt.com",[33],"web.dev — Optimize Interaction to Next Paint",[17,15283,15284,15285,513,15288,420,15291,174],{},"Google documents Core Web Vitals as signals used by its ranking systems, while also warning that good scores do not guarantee high rankings. The current “good” thresholds remain ",[21,15286,15287],{},"LCP within 2.5 seconds",[21,15289,15290],{},"INP below 200 milliseconds",[21,15292,15293],{},"CLS below 0.1",[17,15295,15296],{},[29,15297,15299],{"href":1030,"rel":15298},[33],"Google Search Central — Understanding Core Web Vitals and Google search results",[17,15301,15302],{},[161,15303,15304],{},"INTERNAL LINK: Web Performance and Core Web Vitals",[12,15306,4702],{"id":4701},[17,15308,15309,15310,15312,15313,15315],{},"The most damaging JavaScript SEO problems are usually ordinary engineering failures: navigation without real links, content available only after unreliable API calls, incorrect ",[129,15311,1716],{}," responses for missing entities, conflicting canonicals, initial ",[129,15314,1514],{}," directives that JavaScript later tries to remove, content hidden behind user interaction, and rendered pages that differ unexpectedly from server HTML.",[17,15317,15318],{},"Another mistake is assuming that “Google renders JavaScript” means rendering no longer needs testing. Google does render JavaScript, but its documentation still describes limitations, rendering queues and cases where rendering may be skipped. Other crawlers may handle JavaScript differently or not execute it at all.",[17,15320,15321],{},[29,15322,14696],{"href":14694,"rel":15323},[33],[12,15325,887],{"id":886},[17,15327,15328,15329,174],{},"Treat JavaScript SEO as ",[21,15330,15331],{},"progressive dependency reduction",[17,15333,15334],{},"Public, search-critical information—primary content, navigation, canonical signals, indexability directives, structured data where practical, and correct HTTP states—should preferably exist without depending on a long client-side execution chain. Use JavaScript for the interactivity that benefits from JavaScript rather than making it responsible for reconstructing every SEO signal.",[17,15336,15337],{},"For modern frameworks, that usually means using SSR, static generation or a hybrid strategy for indexable routes while retaining client-side components where interaction genuinely requires them.",[12,15339,907],{"id":906},[909,15341,15343],{"id":15342},"can-google-index-javascript-websites","Can Google index JavaScript websites?",[17,15345,15346],{},"Yes. Google Search runs JavaScript using an evergreen version of Chromium and indexes content from rendered HTML.",[17,15348,15349],{},[29,15350,14696],{"href":14694,"rel":15351},[33],[909,15353,15355],{"id":15354},"is-client-side-rendering-bad-for-seo","Is client-side rendering bad for SEO?",[17,15357,15358],{},"Not inherently. The risk comes from making essential content and signals dependent on successful client-side execution. Google itself no longer describes JavaScript-loaded content as inherently harder simply because JavaScript is involved.",[17,15360,15361],{},[29,15362,15365],{"href":15363,"rel":15364},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fupdates?authuser=01&hl=en&utm_source=chatgpt.com",[33],"Google Search updates",[909,15367,15369],{"id":15368},"is-ssr-required-for-seo","Is SSR required for SEO?",[17,15371,15372],{},"No. Google can render client-side applications. SSR or static rendering is an engineering choice that can make critical content available earlier and reduce dependency on rendering. Google also notes that not every bot can execute JavaScript.",[17,15374,15375],{},[29,15376,14696],{"href":14694,"rel":15377},[33],[909,15379,15381],{"id":15380},"should-javascript-generate-canonical-tags","Should JavaScript generate canonical tags?",[17,15383,15384],{},"It can, but HTML is preferable when practical. If JavaScript sets the canonical, avoid conflicting or duplicate canonical signals.",[17,15386,15387],{},[29,15388,14696],{"href":14694,"rel":15389},[33],[909,15391,15393],{"id":15392},"how-do-i-know-what-google-actually-sees","How do I know what Google actually sees?",[17,15395,15396],{},"Use Search Console's URL Inspection Tool or the Rich Results Test and inspect the rendered HTML, resource loading and JavaScript errors.",[17,15398,15399],{},[29,15400,15027],{"href":15025,"rel":15401},[33],[12,15403,960],{"id":959},[17,15405,15406],{},"JavaScript SEO is not about removing JavaScript. It is about making important search signals resilient.",[17,15408,15409],{},"A technically healthy JavaScript site gives crawlers real URLs, crawlable links, correct HTTP responses, stable metadata and content that survives the rendering process. Once those foundations are reliable, JavaScript can provide rich application behavior without becoming a single point of failure for organic search.",[12,15411,976],{"id":975},[978,15413,15414,15423,15432,15441,15449,15457,15465,15472],{},[981,15415,1023,15416,15419,15420],{},[1625,15417,15418],{},"Understand the JavaScript SEO basics",", updated March 4, 2026.\n",[29,15421,14694],{"href":14694,"rel":15422},[33],[981,15424,1023,15425,15428,15429],{},[1625,15426,15427],{},"Fix Search-related JavaScript problems",", updated December 18, 2025.\n",[29,15430,15025],{"href":15025,"rel":15431},[33],[981,15433,1023,15434,15437,15438],{},[1625,15435,15436],{},"Dynamic rendering as a workaround",", updated December 10, 2025.\n",[29,15439,9498],{"href":9498,"rel":15440},[33],[981,15442,1023,15443,15437,15446],{},[1625,15444,15445],{},"Fix lazy-loaded content",[29,15447,15150],{"href":15150,"rel":15448},[33],[981,15450,1023,15451,15453,15454],{},[1625,15452,2759],{},".\n",[29,15455,2237],{"href":2237,"rel":15456},[33],[981,15458,1023,15459,15437,15462],{},[1625,15460,15461],{},"Generate structured data with JavaScript",[29,15463,15167],{"href":15167,"rel":15464},[33],[981,15466,1023,15467,15437,15469],{},[1625,15468,1026],{},[29,15470,1030],{"href":1030,"rel":15471},[33],[981,15473,15474,15475,15478,15479],{},"web.dev — Addy Osmani and Jason Miller, ",[1625,15476,15477],{},"Rendering on the Web",", updated January 5, 2026.\n",[29,15480,15481],{"href":15481,"rel":15482},"https:\u002F\u002Fweb.dev\u002Farticles\u002Frendering-on-the-web?authuser=9&utm_source=chatgpt.com",[33],[1067,15484,6898],{},{"title":185,"searchDepth":311,"depth":311,"links":15486},[15487,15488,15489,15490,15491,15492,15493,15494,15495,15496,15497,15498,15499,15500,15501,15502,15503],{"id":14673,"depth":311,"text":14674},{"id":1151,"depth":311,"text":1152},{"id":2080,"depth":311,"text":2081},{"id":14789,"depth":311,"text":14790},{"id":14856,"depth":311,"text":14857},{"id":14937,"depth":311,"text":14938},{"id":15035,"depth":311,"text":15036},{"id":15070,"depth":311,"text":15071},{"id":15134,"depth":311,"text":15135},{"id":15158,"depth":311,"text":15159},{"id":15175,"depth":311,"text":15176},{"id":15270,"depth":311,"text":15271},{"id":4701,"depth":311,"text":4702},{"id":886,"depth":311,"text":887},{"id":906,"depth":311,"text":907},{"id":959,"depth":311,"text":960},{"id":975,"depth":311,"text":976},"SEO","Learn how JavaScript affects crawling, rendering and indexing, how to diagnose SEO problems, and when to use CSR, SSR, static or hybrid rendering.","\u002Fjavascript-seo.png","Image of Javascript SEO",{},"\u002Fblog\u002Fen\u002Fjavascript-seo",{"title":14668,"description":15505},"javascript-seo","blog\u002Fen\u002Fjavascript-seo","TYulYht8C7O50gap5SPQlkoXxJr6YcSJKlh872YLVzw",{"id":15515,"title":15516,"author":7,"body":15517,"category":1095,"description":16367,"draft":1097,"extension":1098,"featured":1099,"image":16368,"imageAlt":16369,"locale":1102,"meta":16370,"navigation":1099,"path":16371,"publishedAt":13899,"seo":16372,"slug":16373,"stem":16374,"translationKey":16373,"updatedAt":13899,"__hash__":16375},"blog\u002Fblog\u002Fen\u002Flcp-element.md","What Is the LCP Element? How to Find and Optimize It",{"type":9,"value":15518,"toc":16348},[15519,15523,15533,15544,15547,15549,15554,15560,15565,15569,15572,15575,15655,15661,15667,15673,15677,15680,15731,15738,15741,15747,15753,15756,15760,15763,15769,15772,15778,15781,15791,15795,15798,15801,15808,15811,15817,15820,15823,15827,15831,15834,15845,15848,15852,15855,16011,16021,16030,16034,16037,16043,16046,16049,16056,16061,16065,16068,16073,16101,16107,16113,16116,16122,16125,16127,16133,16142,16151,16160,16162,16165,16168,16173,16179,16189,16191,16195,16198,16202,16205,16209,16219,16223,16226,16230,16237,16239,16246,16249,16251,16345],[12,15520,15522],{"id":15521},"what-is-the-lcp-element","What Is the LCP Element?",[17,15524,15525,15526,15529,15530],{},"When a performance tool says your page has a slow ",[21,15527,15528],{},"Largest Contentful Paint (LCP)",", the next useful question is not simply “How do I improve LCP?” It is: ",[21,15531,15532],{},"Which element is actually producing the LCP?",[17,15534,15535,15536,15539,15540,35],{},"That element is called the ",[21,15537,15538],{},"LCP element",". It is often a hero image, but it can also be a heading, a paragraph, a CSS background image, or video content. More importantly, it is not simply the largest DOM element on the page. The browser applies specific eligibility, visibility, and sizing rules when deciding which rendered content becomes an LCP candidate. (",[29,15541,34],{"href":15542,"rel":15543},"https:\u002F\u002Fweb.dev\u002Farticles\u002Flcp?hl=en&utm_source=chatgpt.com",[33],[17,15545,15546],{},"Understanding that distinction makes LCP debugging much more precise.",[12,15548,1152],{"id":1151},[17,15550,190,15551,15553],{},[21,15552,15538],{}," is the content element associated with the page's Largest Contentful Paint: the largest eligible image, text block, or other supported content that the browser has rendered within the viewport during the loading experience.",[17,15555,15556,15557,35],{},"The element can change while the page loads. For example, a heading may initially be the largest rendered content, then a hero image may become the LCP element once it finishes loading. Browsers therefore track a sequence of LCP candidates rather than assuming one element from the beginning. (",[29,15558,34],{"href":15542,"rel":15559},[33],[17,15561,15562],{},[161,15563,15564],{},"INTERNAL LINK: What Is Largest Contentful Paint?",[12,15566,15568],{"id":15567},"what-can-be-an-lcp-element","What Can Be an LCP Element?",[17,15570,15571],{},"Not every visible DOM element is eligible for LCP.",[17,15573,15574],{},"Current LCP guidance identifies these main candidate types:",[69,15576,15577,15587],{},[72,15578,15579],{},[75,15580,15581,15584],{},[78,15582,15583],{},"Element type",[78,15585,15586],{},"Can become LCP?",[85,15588,15589,15598,15611,15620,15630,15637,15644],{},[75,15590,15591,15596],{},[90,15592,15593],{},[129,15594,15595],{},"\u003Cimg>",[90,15597,2106],{},[75,15599,15600,15609],{},[90,15601,15602,15605,15606],{},[129,15603,15604],{},"\u003Cimage>"," inside ",[129,15607,15608],{},"\u003Csvg>",[90,15610,2106],{},[75,15612,15613,15618],{},[90,15614,15615,1563],{},[129,15616,15617],{},"\u003Cvideo>",[90,15619,2106],{},[75,15621,15622,15628],{},[90,15623,15624,15625],{},"CSS ",[129,15626,15627],{},"background-image: url(...)",[90,15629,2106],{},[75,15631,15632,15635],{},[90,15633,15634],{},"Block-level text content",[90,15636,2106],{},[75,15638,15639,15642],{},[90,15640,15641],{},"CSS gradient",[90,15643,7801],{},[75,15645,15646,15652],{},[90,15647,15648,15649,15651],{},"Entire ",[129,15650,15608],{}," element",[90,15653,15654],{},"Generally no",[17,15656,15657,15658,35],{},"For video, the browser can use the poster image or the video's first presented frame according to the LCP calculation rules. For text, the candidate is generally the block-level element containing the relevant text nodes. (",[29,15659,34],{"href":15542,"rel":15660},[33],[17,15662,15663,15664,174],{},"This creates an important practical lesson: ",[21,15665,15666],{},"the visually largest object you notice is not automatically the LCP element",[17,15668,15669,15670,35],{},"A large decorative background, low-information placeholder, invisible element, or unsupported element type may not qualify. Chromium also uses heuristics intended to exclude content that is unlikely to represent meaningful page content. (",[29,15671,34],{"href":15542,"rel":15672},[33],[12,15674,15676],{"id":15675},"how-browser-selection-works","How Browser Selection Works",[17,15678,15679],{},"Imagine a page with this structure:",[179,15681,15683],{"className":292,"code":15682,"language":294,"meta":185,"style":185},"\u003Ch1>Build Faster Websites\u003C\u002Fh1>\n\n\u003Cimg\n  src=\"\u002Fhero.webp\"\n  alt=\"Website performance dashboard\"\n>\n",[129,15684,15685,15699,15703,15709,15718,15727],{"__ignoreMap":185},[161,15686,15687,15689,15692,15695,15697],{"class":299,"line":300},[161,15688,304],{"class":303},[161,15690,15691],{"class":307},"h1",[161,15693,15694],{"class":303},">Build Faster Websites\u003C\u002F",[161,15696,15691],{"class":307},[161,15698,361],{"class":303},[161,15700,15701],{"class":299,"line":311},[161,15702,3024],{"emptyLinePlaceholder":1099},[161,15704,15705,15707],{"class":299,"line":325},[161,15706,304],{"class":303},[161,15708,308],{"class":307},[161,15710,15711,15713,15715],{"class":299,"line":336},[161,15712,315],{"class":314},[161,15714,318],{"class":303},[161,15716,15717],{"class":321},"\"\u002Fhero.webp\"\n",[161,15719,15720,15722,15724],{"class":299,"line":347},[161,15721,350],{"class":314},[161,15723,318],{"class":303},[161,15725,15726],{"class":321},"\"Website performance dashboard\"\n",[161,15728,15729],{"class":299,"line":358},[161,15730,361],{"class":303},[17,15732,15733,15734,15737],{},"The browser may render the ",[129,15735,15736],{},"\u003Ch1>"," first.",[17,15739,15740],{},"At that moment, the heading could become an LCP candidate.",[17,15742,15743,15744,15746],{},"Later, the hero image finishes downloading and appears. If its eligible rendered area is larger than the previous candidate, the ",[129,15745,15595],{}," becomes the new LCP candidate.",[17,15748,15749,15750,35],{},"LCP reporting therefore evolves as content appears. A newly rendered element only replaces the previous candidate when it qualifies and is larger according to the LCP sizing rules. (",[29,15751,34],{"href":15542,"rel":15752},[33],[17,15754,15755],{},"This is why inspecting only the HTML source cannot reliably tell you which element produced LCP.",[12,15757,15759],{"id":15758},"how-lcp-size-is-calculated","How LCP Size Is Calculated",[17,15761,15762],{},"The browser does not simply calculate:",[179,15764,15767],{"className":15765,"code":15766,"language":184,"meta":185},[182],"CSS width × CSS height\n",[129,15768,15766],{"__ignoreMap":185},[17,15770,15771],{},"and choose the biggest number.",[17,15773,15774,15775,35],{},"LCP primarily considers the portion of eligible content that is actually visible within the viewport. Content extending beyond the viewport or clipped from view does not fully contribute to its LCP size. For images resized beyond their intrinsic dimensions, the calculation also prevents enlargement from artificially producing an oversized LCP candidate. (",[29,15776,34],{"href":15542,"rel":15777},[33],[17,15779,15780],{},"For text, the browser considers the rectangle containing the relevant text rather than treating the entire CSS box—including margins, borders, or padding—as content.",[17,15782,15783,15784,15787,15788,15790],{},"That means a huge ",[129,15785,15786],{},"\u003Cdiv>"," containing a small sentence does not automatically become LCP merely because the ",[129,15789,15786],{}," itself fills the screen.",[12,15792,15794],{"id":15793},"the-lcp-element-can-change","The LCP Element Can Change",[17,15796,15797],{},"A common misconception is that every URL has one fixed LCP element.",[17,15799,15800],{},"It does not.",[17,15802,15803,15804,35],{},"Even the same page can produce different LCP elements for different visits because viewport dimensions, responsive layouts, personalization, initial scroll position, and visible content can differ between users. Field debugging guidance from web.dev explicitly warns against assuming a single element will always be the LCP candidate for a page. (",[29,15805,34],{"href":15806,"rel":15807},"https:\u002F\u002Fweb.dev\u002Farticles\u002Fdebug-performance-in-the-field?hl=en&utm_source=chatgpt.com",[33],[17,15809,15810],{},"Consider a responsive homepage:",[179,15812,15815],{"className":15813,"code":15814,"language":184,"meta":185},[182],"Desktop:\nlarge hero image → LCP\n\nMobile:\nlarge heading → LCP\n",[129,15816,15814],{"__ignoreMap":185},[17,15818,15819],{},"Both results can be correct.",[17,15821,15822],{},"This is one reason laboratory testing and real-user data should complement each other rather than be treated as interchangeable.",[12,15824,15826],{"id":15825},"how-to-find-the-lcp-element","How to Find the LCP Element",[220,15828,15830],{"id":15829},"chrome-devtools","Chrome DevTools",[17,15832,15833],{},"Record a page load in Chrome DevTools' Performance panel.",[17,15835,15836,15837,15840,15841,35],{},"Chrome surfaces an ",[21,15838,15839],{},"LCP marker"," in the performance timeline. Selecting it provides details about the LCP event and helps investigate the element and the timing components responsible for the delay. Current DevTools guidance also breaks LCP into TTFB, resource load delay, resource load time, and element render delay where applicable. (",[29,15842,649],{"href":15843,"rel":15844},"https:\u002F\u002Fdeveloper.chrome.com\u002Fdocs\u002Fdevtools\u002Fperformance-insights\u002F?utm_source=chatgpt.com",[33],[17,15846,15847],{},"This is usually the fastest method for debugging a specific page locally.",[220,15849,15851],{"id":15850},"javascript","JavaScript",[17,15853,15854],{},"The Largest Contentful Paint API also exposes the candidate element.",[179,15856,15858],{"className":714,"code":15857,"language":716,"meta":185,"style":185},"const observer = new PerformanceObserver((list) => {\n  const entries = list.getEntries();\n  const latest = entries[entries.length - 1];\n\n  console.log(\"LCP element:\", latest.element);\n  console.log(\"LCP time:\", latest.startTime);\n  console.log(\"LCP size:\", latest.size);\n});\n\nobserver.observe({\n  type: \"largest-contentful-paint\",\n  buffered: true,\n});\n",[129,15859,15860,15885,15902,15926,15930,15945,15959,15973,15977,15981,15990,15999,16007],{"__ignoreMap":185},[161,15861,15862,15864,15867,15869,15872,15874,15876,15879,15881,15883],{"class":299,"line":300},[161,15863,752],{"class":393},[161,15865,15866],{"class":384}," observer",[161,15868,8636],{"class":393},[161,15870,15871],{"class":393}," new",[161,15873,726],{"class":314},[161,15875,729],{"class":303},[161,15877,15878],{"class":732},"list",[161,15880,736],{"class":303},[161,15882,739],{"class":393},[161,15884,379],{"class":303},[161,15886,15887,15890,15893,15895,15898,15900],{"class":299,"line":311},[161,15888,15889],{"class":393},"  const",[161,15891,15892],{"class":384}," entries",[161,15894,8636],{"class":393},[161,15896,15897],{"class":303}," list.",[161,15899,764],{"class":314},[161,15901,5926],{"class":303},[161,15903,15904,15906,15909,15911,15914,15917,15920,15923],{"class":299,"line":325},[161,15905,15889],{"class":393},[161,15907,15908],{"class":384}," latest",[161,15910,8636],{"class":393},[161,15912,15913],{"class":303}," entries[entries.",[161,15915,15916],{"class":384},"length",[161,15918,15919],{"class":393}," -",[161,15921,15922],{"class":384}," 1",[161,15924,15925],{"class":303},"];\n",[161,15927,15928],{"class":299,"line":336},[161,15929,3024],{"emptyLinePlaceholder":1099},[161,15931,15932,15935,15937,15939,15942],{"class":299,"line":347},[161,15933,15934],{"class":303},"  console.",[161,15936,788],{"class":314},[161,15938,573],{"class":303},[161,15940,15941],{"class":321},"\"LCP element:\"",[161,15943,15944],{"class":303},", latest.element);\n",[161,15946,15947,15949,15951,15953,15956],{"class":299,"line":358},[161,15948,15934],{"class":303},[161,15950,788],{"class":314},[161,15952,573],{"class":303},[161,15954,15955],{"class":321},"\"LCP time:\"",[161,15957,15958],{"class":303},", latest.startTime);\n",[161,15960,15961,15963,15965,15967,15970],{"class":299,"line":809},[161,15962,15934],{"class":303},[161,15964,788],{"class":314},[161,15966,573],{"class":303},[161,15968,15969],{"class":321},"\"LCP size:\"",[161,15971,15972],{"class":303},", latest.size);\n",[161,15974,15975],{"class":299,"line":821},[161,15976,845],{"class":303},[161,15978,15979],{"class":299,"line":833},[161,15980,3024],{"emptyLinePlaceholder":1099},[161,15982,15983,15986,15988],{"class":299,"line":842},[161,15984,15985],{"class":303},"observer.",[161,15987,815],{"class":314},[161,15989,818],{"class":303},[161,15991,15992,15994,15997],{"class":299,"line":3064},[161,15993,824],{"class":303},[161,15995,15996],{"class":321},"\"largest-contentful-paint\"",[161,15998,830],{"class":303},[161,16000,16001,16003,16005],{"class":299,"line":3070},[161,16002,836],{"class":303},[161,16004,8566],{"class":384},[161,16006,830],{"class":303},[161,16008,16009],{"class":299,"line":3075},[161,16010,845],{"class":303},[17,16012,16013,16016,16017,35],{},[129,16014,16015],{},"LargestContentfulPaint.element"," references the associated DOM element, while the performance entry also exposes information such as its size and timing. (",[29,16018,5987],{"href":16019,"rel":16020},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FAPI\u002FLargestContentfulPaint\u002Felement?utm_source=chatgpt.com",[33],[17,16022,16023,16024,16026,16027,35],{},"For production Real User Monitoring, however, calculating the final LCP metric correctly involves more edge cases than simply taking an arbitrary observer entry. web.dev recommends using tooling such as the ",[129,16025,851],{}," library where appropriate because it handles several metric-specific details. (",[29,16028,34],{"href":15542,"rel":16029},[33],[12,16031,16033],{"id":16032},"why-the-element-matters","Why the Element Matters",[17,16035,16036],{},"Knowing that your LCP is 4 seconds tells you there is a loading-performance problem.",[17,16038,16039,16040,16042],{},"Knowing the ",[21,16041,15538],{}," tells you what loading path to investigate.",[17,16044,16045],{},"If the LCP element is an image, investigate when the image becomes discoverable, its loading priority, transfer time, decoding, and whether rendering waits on other work.",[17,16047,16048],{},"If it is text, the issue may involve server response time, render-blocking CSS, web fonts, or JavaScript delaying the text's appearance.",[17,16050,16051,16052,35],{},"If JavaScript creates the LCP element after hydration or another client-side process, resource compression alone may accomplish little—the larger problem may be that the browser discovers or renders the content too late. Google's LCP optimization guidance specifically separates these delays because improving one component does not necessarily improve the final LCP if another remains the bottleneck. (",[29,16053,34],{"href":16054,"rel":16055},"https:\u002F\u002Fweb.dev\u002Farticles\u002Foptimize-lcp?utm_source=chatgpt.com",[33],[17,16057,16058],{},[161,16059,16060],{},"INTERNAL LINK: How to Optimize Largest Contentful Paint",[12,16062,16064],{"id":16063},"lcp-element-vs-lcp-resource","LCP Element vs LCP Resource",[17,16066,16067],{},"These terms are related, but they are not identical.",[17,16069,190,16070,16072],{},[21,16071,15538],{}," is the rendered content element—for example:",[179,16074,16076],{"className":292,"code":16075,"language":294,"meta":185,"style":185},"\u003Cimg src=\"\u002Fhero.webp\" alt=\"\">\n",[129,16077,16078],{"__ignoreMap":185},[161,16079,16080,16082,16084,16086,16088,16091,16094,16096,16099],{"class":299,"line":300},[161,16081,304],{"class":303},[161,16083,376],{"class":307},[161,16085,6050],{"class":314},[161,16087,318],{"class":303},[161,16089,16090],{"class":321},"\"\u002Fhero.webp\"",[161,16092,16093],{"class":314}," alt",[161,16095,318],{"class":303},[161,16097,16098],{"class":321},"\"\"",[161,16100,361],{"class":303},[17,16102,190,16103,16106],{},[21,16104,16105],{},"LCP resource"," is the external resource required to render it:",[179,16108,16111],{"className":16109,"code":16110,"language":184,"meta":185},[182],"\u002Fhero.webp\n",[129,16112,16110],{"__ignoreMap":185},[17,16114,16115],{},"An image-based LCP usually has an LCP resource.",[17,16117,16118,16119,35],{},"A text-based LCP using a system font may not require a separate LCP resource at all. Chrome's LCP timing breakdown therefore omits resource-loading phases when there is no resource to load. (",[29,16120,649],{"href":15843,"rel":16121},[33],[17,16123,16124],{},"This distinction prevents a common debugging mistake: searching for an image optimization problem when the LCP delay is actually caused by rendering.",[12,16126,859],{"id":858},[17,16128,16129,16132],{},[21,16130,16131],{},"“The hero image is always the LCP element.”","\nNo. It is common, but the browser determines the actual candidate from rendered eligible content.",[17,16134,16135,16138,16139,35],{},[21,16136,16137],{},"“The biggest DOM node becomes LCP.”","\nNo. LCP uses content-specific eligibility and visual sizing rules rather than raw DOM dimensions. (",[29,16140,34],{"href":15542,"rel":16141},[33],[17,16143,16144,16147,16148,35],{},[21,16145,16146],{},"“My page has one permanent LCP element.”","\nNot necessarily. The candidate may differ by viewport, user, content, and page-load conditions. (",[29,16149,34],{"href":15806,"rel":16150},[33],[17,16152,16153,16156,16157,35],{},[21,16154,16155],{},"“Optimizing the LCP image file always fixes LCP.”","\nNo. Resource discovery, TTFB, render-blocking work, JavaScript, and element render delay can all dominate the final result. (",[29,16158,34],{"href":16054,"rel":16159},[33],[12,16161,887],{"id":886},[17,16163,16164],{},"Start every LCP investigation by identifying the actual element before changing code.",[17,16166,16167],{},"Then classify the bottleneck:",[17,16169,16170],{},[21,16171,16172],{},"element → required resource → discovery → loading → rendering",[17,16174,16175,16176,35],{},"For an image LCP, make sure the browser can discover important above-the-fold resources early. Avoid unnecessarily lazy-loading the LCP image, and investigate resource priority or preloading when the normal loading path discovers it too late. For text LCP, focus more heavily on HTML delivery, critical CSS, fonts, and rendering dependencies. (",[29,16177,34],{"href":16054,"rel":16178},[33],[17,16180,16181,16182,16185,16186,35],{},"Finally, verify the change using both lab diagnostics and real-user data when sufficient field data is available. LCP is a Core Web Vital, and Google currently recommends an LCP of ",[21,16183,16184],{},"2.5 seconds or less at the 75th percentile",", evaluated separately across mobile and desktop experiences. (",[29,16187,34],{"href":15542,"rel":16188},[33],[12,16190,907],{"id":906},[909,16192,16194],{"id":16193},"is-the-lcp-element-always-an-image","Is the LCP element always an image?",[17,16196,16197],{},"No. Images are common LCP candidates, but text blocks, supported CSS background images, and video content can also become LCP.",[909,16199,16201],{"id":16200},"can-an-h1-be-the-lcp-element","Can an H1 be the LCP element?",[17,16203,16204],{},"Yes. If the heading forms the largest eligible rendered text block during the relevant loading period, it can become the LCP element.",[909,16206,16208],{"id":16207},"can-a-css-background-image-be-lcp","Can a CSS background image be LCP?",[17,16210,16211,16212,16215,16216,35],{},"Yes, an image loaded through CSS ",[129,16213,16214],{},"url()"," can qualify. A CSS-generated gradient itself is not an LCP image candidate. (",[29,16217,34],{"href":15542,"rel":16218},[33],[909,16220,16222],{"id":16221},"can-the-lcp-element-change-during-loading","Can the LCP element change during loading?",[17,16224,16225],{},"Yes. Browsers can emit multiple LCP candidates as progressively larger eligible content renders.",[909,16227,16229],{"id":16228},"does-the-lcp-element-directly-affect-seo","Does the LCP element directly affect SEO?",[17,16231,16232,16233,35],{},"LCP is one of Google's Core Web Vitals, and Google documents that Core Web Vitals are used by its ranking systems. However, good Core Web Vitals do not guarantee high rankings, and Google explicitly advises considering page experience holistically rather than treating a single metric as an isolated ranking formula. (",[29,16234,157],{"href":16235,"rel":16236},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fpage-experience?utm_source=chatgpt.com",[33],[12,16238,960],{"id":959},[17,16240,16241,16242,16245],{},"The LCP element is the ",[21,16243,16244],{},"largest eligible piece of rendered content the browser identifies during the loading experience",", not simply the largest HTML element.",[17,16247,16248],{},"Finding that element turns LCP from an abstract score into a concrete engineering problem. Once you know whether the candidate is an image, text block, background image, or other supported content, you can trace what delayed its discovery, loading, and rendering—and optimize the part of the loading path that actually matters.",[12,16250,976],{"id":975},[978,16252,16253,16267,16281,16294,16307,16321,16333],{},[981,16254,16255,16258,16259,6460,16263],{},[21,16256,16257],{},"W3C Web Performance Working Group — Largest Contentful Paint",", Working Draft, July 13, 2026. (",[29,16260,5697],{"href":16261,"rel":16262},"https:\u002F\u002Fwww.w3.org\u002FTR\u002Flargest-contentful-paint\u002F?utm_source=chatgpt.com",[33],[29,16264,16266],{"href":16261,"rel":16265},[33],"W3C specification",[981,16268,16269,16272,16273,6460,16276],{},[21,16270,16271],{},"Philip Walton and Barry Pollard — Largest Contentful Paint (LCP), web.dev",", updated September 4, 2025. (",[29,16274,34],{"href":15542,"rel":16275},[33],[29,16277,16280],{"href":16278,"rel":16279},"https:\u002F\u002Fweb.dev\u002Farticles\u002Flcp?utm_source=chatgpt.com",[33],"web.dev LCP documentation",[981,16282,16283,16286,16287,6460,16290],{},[21,16284,16285],{},"Philip Walton and Barry Pollard — Optimize Largest Contentful Paint, web.dev",", updated March 31, 2025. (",[29,16288,34],{"href":16054,"rel":16289},[33],[29,16291,16293],{"href":16054,"rel":16292},[33],"LCP optimization guide",[981,16295,16296,16299,16300,6460,16303],{},[21,16297,16298],{},"Chrome for Developers — Performance Insights",", Chrome DevTools documentation. (",[29,16301,649],{"href":15843,"rel":16302},[33],[29,16304,16306],{"href":15843,"rel":16305},[33],"Chrome DevTools performance documentation",[981,16308,16309,16312,16313,6460,16316],{},[21,16310,16311],{},"web.dev — Debug Performance in the Field",", guidance on identifying real-user LCP candidates. (",[29,16314,34],{"href":15806,"rel":16315},[33],[29,16317,16320],{"href":16318,"rel":16319},"https:\u002F\u002Fweb.dev\u002Farticles\u002Fdebug-performance-in-the-field?utm_source=chatgpt.com",[33],"Field performance debugging guide",[981,16322,16323,239,16326,6460,16329],{},[21,16324,16325],{},"MDN Web Docs — LargestContentfulPaint: element property",[29,16327,5987],{"href":16019,"rel":16328},[33],[29,16330,16332],{"href":16019,"rel":16331},[33],"MDN LargestContentfulPaint.element",[981,16334,16335,16338,16339,6460,16342],{},[21,16336,16337],{},"Google Search Central — Understanding Core Web Vitals and Google Search results",", updated December 10, 2025. (",[29,16340,157],{"href":1030,"rel":16341},[33],[29,16343,1032],{"href":1030,"rel":16344},[33],[1067,16346,16347],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}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 .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":185,"searchDepth":311,"depth":311,"links":16349},[16350,16351,16352,16353,16354,16355,16356,16360,16361,16362,16363,16364,16365,16366],{"id":15521,"depth":311,"text":15522},{"id":1151,"depth":311,"text":1152},{"id":15567,"depth":311,"text":15568},{"id":15675,"depth":311,"text":15676},{"id":15758,"depth":311,"text":15759},{"id":15793,"depth":311,"text":15794},{"id":15825,"depth":311,"text":15826,"children":16357},[16358,16359],{"id":15829,"depth":325,"text":15830},{"id":15850,"depth":325,"text":15851},{"id":16032,"depth":311,"text":16033},{"id":16063,"depth":311,"text":16064},{"id":858,"depth":311,"text":859},{"id":886,"depth":311,"text":887},{"id":906,"depth":311,"text":907},{"id":959,"depth":311,"text":960},{"id":975,"depth":311,"text":976},"Learn what the LCP element is, which elements qualify for Largest Contentful Paint, how browsers select it, how to find it, and how to diagnose slow LCP.","\u002Flcp-elements.png","Image of LCP Elements",{},"\u002Fblog\u002Fen\u002Flcp-element",{"title":15516,"description":16367},"lcp-element","blog\u002Fen\u002Flcp-element","jAYRsFXAeFRVscuf7uISxSaKghdlgdMlMcQ5TPDSvUs",{"id":16377,"title":16378,"author":7,"body":16379,"category":1095,"description":17715,"draft":1097,"extension":1098,"featured":1099,"image":17716,"imageAlt":17717,"locale":1102,"meta":17718,"navigation":1099,"path":17719,"publishedAt":13899,"seo":17720,"slug":17721,"stem":17722,"translationKey":17721,"updatedAt":13899,"__hash__":17723},"blog\u002Fblog\u002Fen\u002Fnuxt-4-performance.md","Nuxt 4 Performance Optimization: Production Guide",{"type":9,"value":16380,"toc":17696},[16381,16385,16388,16391,16394,16396,16399,16431,16438,16442,16445,16494,16505,16508,16512,16516,16522,16528,16530,16620,16623,16626,16629,16633,16644,16697,16703,16707,16710,16713,16716,16745,16748,16755,16833,16842,16849,16854,16858,16871,16874,16879,16882,16885,17038,17050,17053,17063,17067,17070,17079,17082,17087,17090,17093,17179,17196,17199,17203,17209,17212,17235,17238,17353,17361,17368,17372,17375,17382,17385,17402,17405,17409,17412,17417,17424,17427,17441,17451,17454,17474,17477,17479,17491,17497,17503,17509,17519,17521,17524,17527,17530,17535,17538,17540,17544,17547,17551,17554,17558,17564,17571,17577,17581,17584,17586,17589,17592,17595,17597,17693],[12,16382,16384],{"id":16383},"nuxt-4-performance-optimization-a-production-guide","Nuxt 4 Performance Optimization: A Production Guide",[17,16386,16387],{},"A Nuxt 4 application can be server-rendered and still be slow. SSR solves only part of the performance problem: the browser may still receive too much JavaScript, hydrate components the user does not need, download oversized images, wait for slow APIs, or process unnecessarily large Nuxt payloads.",[17,16389,16390],{},"In production, the biggest gains usually come from architecture rather than micro-optimizations: choose the right rendering strategy for each route, minimize client-side work, keep data payloads small, optimize critical resources, cache what can be cached, and measure the result with both lab and real-user data.",[17,16392,16393],{},"This guide is aligned with the current Nuxt 4 documentation, which identifies Nuxt 4.5.2 at the time of writing.",[12,16395,1152],{"id":1151},[17,16397,16398],{},"To optimize Nuxt 4 for production, start with five areas:",[978,16400,16401,16407,16413,16419,16425],{},[981,16402,16403,16406],{},[21,16404,16405],{},"Render each route appropriately"," — prerender static content and use server rendering or caching for genuinely dynamic pages.",[981,16408,16409,16412],{},[21,16410,16411],{},"Ship less JavaScript"," — lazy-load optional components and delay hydration where interactivity is not immediately required.",[981,16414,16415,16418],{},[21,16416,16417],{},"Reduce data overhead"," — avoid duplicate requests and serialize only data the client actually needs.",[981,16420,16421,16424],{},[21,16422,16423],{},"Optimize LCP resources"," — especially hero images, fonts, CSS and server response time.",[981,16426,16427,16430],{},[21,16428,16429],{},"Measure production behavior"," — use Core Web Vitals, field data and bundle analysis instead of optimizing from intuition.",[17,16432,16433,16434,35],{},"Nuxt already provides code splitting, SSR, data-fetching utilities and Nitro. The job is to configure those capabilities around the behavior of the application. (",[29,16435,8374],{"href":16436,"rel":16437},"https:\u002F\u002Fnuxt.com\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fintroduction?utm_source=chatgpt.com",[33],[12,16439,16441],{"id":16440},"performance-targets","Performance Targets",[17,16443,16444],{},"Google's current Core Web Vitals thresholds are:",[69,16446,16447,16460],{},[72,16448,16449],{},[75,16450,16451,16454,16457],{},[78,16452,16453],{},"Metric",[78,16455,16456],{"align":8449},"Good target",[78,16458,16459],{},"Measures",[85,16461,16462,16473,16484],{},[75,16463,16464,16467,16470],{},[90,16465,16466],{},"LCP",[90,16468,16469],{"align":8449},"≤ 2.5 s",[90,16471,16472],{},"Loading performance",[75,16474,16475,16478,16481],{},[90,16476,16477],{},"INP",[90,16479,16480],{"align":8449},"≤ 200 ms",[90,16482,16483],{},"Interaction responsiveness",[75,16485,16486,16488,16491],{},[90,16487,80],{},[90,16489,16490],{"align":8449},"≤ 0.1",[90,16492,16493],{},"Visual stability",[17,16495,16496,16497,16500,16501,35],{},"These targets should be evaluated at the ",[21,16498,16499],{},"75th percentile",", separately for mobile and desktop traffic. (",[29,16502,34],{"href":16503,"rel":16504},"https:\u002F\u002Fweb.dev\u002Farticles\u002Fvitals?hl=en&utm_source=chatgpt.com",[33],[17,16506,16507],{},"They are useful targets, not a replacement for diagnosis. A page can have poor LCP because of its server, image discovery, CSS, CDN configuration or several delays combined.",[17,16509,16510],{},[161,16511,163],{},[12,16513,16515],{"id":16514},"choose-rendering-per-route","Choose Rendering Per Route",[17,16517,16518,16519],{},"One of the most important Nuxt performance decisions happens before bundle optimization: ",[21,16520,16521],{},"does this page need to be rendered dynamically on every request?",[17,16523,16524,16525,35],{},"Nuxt supports server rendering by default, static prerendering and hybrid behavior through Nitro route rules. (",[29,16526,8374],{"href":9002,"rel":16527},[33],[17,16529,1399],{},[179,16531,16533],{"className":8774,"code":16532,"language":8776,"meta":185,"style":185},"\u002F\u002F nuxt.config.ts\nexport default defineNuxtConfig({\n  routeRules: {\n    '\u002F': { prerender: true },\n    '\u002Fabout': { prerender: true },\n    '\u002Fblog\u002F**': { prerender: true },\n    '\u002Fapi\u002Fcatalog': {\n      cache: { maxAge: 60 * 10 }\n    }\n  }\n})\n",[129,16534,16535,16539,16549,16553,16563,16574,16584,16591,16608,16612,16616],{"__ignoreMap":185},[161,16536,16537],{"class":299,"line":300},[161,16538,8784],{"class":8783},[161,16540,16541,16543,16545,16547],{"class":299,"line":311},[161,16542,8789],{"class":393},[161,16544,8792],{"class":393},[161,16546,8795],{"class":314},[161,16548,818],{"class":303},[161,16550,16551],{"class":299,"line":325},[161,16552,9029],{"class":303},[161,16554,16555,16557,16559,16561],{"class":299,"line":336},[161,16556,9034],{"class":321},[161,16558,9037],{"class":303},[161,16560,8566],{"class":384},[161,16562,9042],{"class":303},[161,16564,16565,16568,16570,16572],{"class":299,"line":347},[161,16566,16567],{"class":321},"    '\u002Fabout'",[161,16569,9037],{"class":303},[161,16571,8566],{"class":384},[161,16573,9042],{"class":303},[161,16575,16576,16578,16580,16582],{"class":299,"line":358},[161,16577,9078],{"class":321},[161,16579,9037],{"class":303},[161,16581,8566],{"class":384},[161,16583,9042],{"class":303},[161,16585,16586,16589],{"class":299,"line":809},[161,16587,16588],{"class":321},"    '\u002Fapi\u002Fcatalog'",[161,16590,9054],{"class":303},[161,16592,16593,16596,16599,16602,16605],{"class":299,"line":821},[161,16594,16595],{"class":303},"      cache: { maxAge: ",[161,16597,16598],{"class":384},"60",[161,16600,16601],{"class":393}," *",[161,16603,16604],{"class":384}," 10",[161,16606,16607],{"class":303}," }\n",[161,16609,16610],{"class":299,"line":833},[161,16611,801],{"class":303},[161,16613,16614],{"class":299,"line":842},[161,16615,806],{"class":303},[161,16617,16618],{"class":299,"line":3064},[161,16619,8812],{"class":303},[17,16621,16622],{},"A marketing homepage, documentation page or blog article usually does not need fresh server rendering for every visitor. If its content changes only during deployments or CMS publishing workflows, prerendering removes server rendering from the request path.",[17,16624,16625],{},"Dynamic account pages are different. They may depend on authentication, permissions or frequently changing personalized data and should normally remain dynamic.",[17,16627,16628],{},"The mistake is choosing one rendering mode for the entire application simply because it is easier to configure.",[220,16630,16632],{"id":16631},"static-pages-can-go-further","Static Pages Can Go Further",[17,16634,16635,16636,16639,16640,35],{},"Nuxt 4 also supports ",[129,16637,16638],{},"noScripts"," for pages that genuinely require no client-side interactivity. Combined with prerendering, the route can be served as HTML and CSS without the normal Nuxt client scripts and hydration cost. (",[29,16641,8374],{"href":16642,"rel":16643},"https:\u002F\u002Fnuxt.com\u002Fdocs\u002F4.x\u002Fguide\u002Frecipes\u002Fmostly-static-sites?utm_source=chatgpt.com",[33],[179,16645,16647],{"className":8774,"code":16646,"language":8776,"meta":185,"style":185},"export default defineNuxtConfig({\n  routeRules: {\n    '\u002Fblog\u002F**': {\n      prerender: true,\n      noScripts: true\n    }\n  }\n})\n",[129,16648,16649,16659,16663,16669,16678,16685,16689,16693],{"__ignoreMap":185},[161,16650,16651,16653,16655,16657],{"class":299,"line":300},[161,16652,8789],{"class":393},[161,16654,8792],{"class":393},[161,16656,8795],{"class":314},[161,16658,818],{"class":303},[161,16660,16661],{"class":299,"line":311},[161,16662,9029],{"class":303},[161,16664,16665,16667],{"class":299,"line":325},[161,16666,9078],{"class":321},[161,16668,9054],{"class":303},[161,16670,16671,16674,16676],{"class":299,"line":336},[161,16672,16673],{"class":303},"      prerender: ",[161,16675,8566],{"class":384},[161,16677,830],{"class":303},[161,16679,16680,16683],{"class":299,"line":347},[161,16681,16682],{"class":303},"      noScripts: ",[161,16684,839],{"class":384},[161,16686,16687],{"class":299,"line":358},[161,16688,801],{"class":303},[161,16690,16691],{"class":299,"line":809},[161,16692,806],{"class":303},[161,16694,16695],{"class":299,"line":821},[161,16696,8812],{"class":303},[17,16698,16699,16700,16702],{},"Do not apply this to interactive pages. A ",[129,16701,16638],{}," route has no Vue hydration, client-side event handlers or normal client-side Nuxt navigation.",[12,16704,16706],{"id":16705},"reduce-hydration-work","Reduce Hydration Work",[17,16708,16709],{},"Server rendering produces HTML, but an interactive Nuxt page still needs Vue to hydrate relevant components in the browser.",[17,16711,16712],{},"That work costs CPU time.",[17,16714,16715],{},"A long landing page might contain:",[1640,16717,16718,16721,16724,16727,16730,16733,16736,16739,16742],{},[981,16719,16720],{},"navigation,",[981,16722,16723],{},"hero content,",[981,16725,16726],{},"testimonials,",[981,16728,16729],{},"pricing calculators,",[981,16731,16732],{},"carousels,",[981,16734,16735],{},"newsletter forms,",[981,16737,16738],{},"maps,",[981,16740,16741],{},"analytics integrations,",[981,16743,16744],{},"chat widgets.",[17,16746,16747],{},"They do not all need to become interactive at the same moment.",[17,16749,16750,16751,35],{},"Nuxt supports delayed hydration strategies for lazy components. A component can hydrate when it becomes visible, when the browser is idle, after interaction, or under another defined condition. (",[29,16752,8374],{"href":16753,"rel":16754},"https:\u002F\u002Fnuxt.com\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fapp\u002Fcomponents?utm_source=chatgpt.com",[33],[179,16756,16758],{"className":8603,"code":16757,"language":8605,"meta":185,"style":185},"\u003Ctemplate>\n  \u003CHeroSection \u002F>\n\n  \u003CLazyTestimonials hydrate-on-visible \u002F>\n\n  \u003CLazyNewsletterForm hydrate-on-visible \u002F>\n\n  \u003CLazyCookieSettings hydrate-on-idle \u002F>\n\u003C\u002Ftemplate>\n",[129,16759,16760,16768,16778,16782,16794,16798,16809,16813,16825],{"__ignoreMap":185},[161,16761,16762,16764,16766],{"class":299,"line":300},[161,16763,304],{"class":303},[161,16765,8692],{"class":307},[161,16767,361],{"class":303},[161,16769,16770,16772,16775],{"class":299,"line":311},[161,16771,8699],{"class":303},[161,16773,16774],{"class":307},"HeroSection",[161,16776,16777],{"class":303}," \u002F>\n",[161,16779,16780],{"class":299,"line":325},[161,16781,3024],{"emptyLinePlaceholder":1099},[161,16783,16784,16786,16789,16792],{"class":299,"line":336},[161,16785,8699],{"class":303},[161,16787,16788],{"class":307},"LazyTestimonials",[161,16790,16791],{"class":314}," hydrate-on-visible",[161,16793,16777],{"class":303},[161,16795,16796],{"class":299,"line":347},[161,16797,3024],{"emptyLinePlaceholder":1099},[161,16799,16800,16802,16805,16807],{"class":299,"line":358},[161,16801,8699],{"class":303},[161,16803,16804],{"class":307},"LazyNewsletterForm",[161,16806,16791],{"class":314},[161,16808,16777],{"class":303},[161,16810,16811],{"class":299,"line":809},[161,16812,3024],{"emptyLinePlaceholder":1099},[161,16814,16815,16817,16820,16823],{"class":299,"line":821},[161,16816,8699],{"class":303},[161,16818,16819],{"class":307},"LazyCookieSettings",[161,16821,16822],{"class":314}," hydrate-on-idle",[161,16824,16777],{"class":303},[161,16826,16827,16829,16831],{"class":299,"line":833},[161,16828,5931],{"class":303},[161,16830,8692],{"class":307},[161,16832,361],{"class":303},[17,16834,16835,16836,16838,16839,35],{},"This is particularly useful for below-the-fold functionality. Do ",[21,16837,151],{}," delay hydration of critical above-the-fold controls simply to reduce a performance score; Nuxt's own documentation warns against delaying hydration of content that users need immediately. (",[29,16840,8374],{"href":16753,"rel":16841},[33],[17,16843,16844,16845,16848],{},"Lazy loading and lazy hydration also solve different problems. A ",[129,16846,16847],{},"Lazy"," component helps split code, while delayed hydration controls when server-rendered content becomes interactive.",[17,16850,16851],{},[161,16852,16853],{},"INTERNAL LINK: Nuxt Hydration Explained",[12,16855,16857],{"id":16856},"keep-data-payloads-small","Keep Data Payloads Small",[17,16859,8424,16860,420,16863,16866,16867,35],{},[129,16861,16862],{},"useAsyncData",[129,16864,16865],{},"useFetch"," are SSR-aware. When data is fetched during server rendering, Nuxt can transfer that result through its payload so the browser does not need to repeat the same request during hydration. (",[29,16868,8374],{"href":16869,"rel":16870},"https:\u002F\u002Fnuxt.com\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-async-data?utm_source=chatgpt.com",[33],[17,16872,16873],{},"That is useful, but it introduces another performance question:",[17,16875,16876],{},[21,16877,16878],{},"How much data are you serializing into the page?",[17,16880,16881],{},"Imagine an API returns 40 fields but the page needs only four.",[17,16883,16884],{},"Instead of transferring the complete object:",[179,16886,16888],{"className":8774,"code":16887,"language":8776,"meta":185,"style":185},"const route = useRoute()\n\nconst { data: product } = await useAsyncData(\n  `product-${route.params.slug}`,\n  () => $fetch(`\u002Fapi\u002Fproducts\u002F${route.params.slug}`),\n  {\n    pick: ['id', 'name', 'price', 'image'],\n    deep: false\n  }\n)\n",[129,16889,16890,16905,16909,16938,16961,16991,16996,17022,17030,17034],{"__ignoreMap":185},[161,16891,16892,16894,16897,16899,16902],{"class":299,"line":300},[161,16893,752],{"class":393},[161,16895,16896],{"class":384}," route",[161,16898,8636],{"class":393},[161,16900,16901],{"class":314}," useRoute",[161,16903,16904],{"class":303},"()\n",[161,16906,16907],{"class":299,"line":311},[161,16908,3024],{"emptyLinePlaceholder":1099},[161,16910,16911,16913,16916,16919,16921,16924,16927,16929,16932,16935],{"class":299,"line":325},[161,16912,752],{"class":393},[161,16914,16915],{"class":303}," { ",[161,16917,16918],{"class":732},"data",[161,16920,387],{"class":303},[161,16922,16923],{"class":384},"product",[161,16925,16926],{"class":303}," } ",[161,16928,318],{"class":393},[161,16930,16931],{"class":393}," await",[161,16933,16934],{"class":314}," useAsyncData",[161,16936,16937],{"class":303},"(\n",[161,16939,16940,16943,16946,16948,16951,16953,16956,16959],{"class":299,"line":336},[161,16941,16942],{"class":321},"  `product-${",[161,16944,16945],{"class":303},"route",[161,16947,174],{"class":321},[161,16949,16950],{"class":303},"params",[161,16952,174],{"class":321},[161,16954,16955],{"class":303},"slug",[161,16957,16958],{"class":321},"}`",[161,16960,830],{"class":303},[161,16962,16963,16966,16968,16971,16973,16976,16978,16980,16982,16984,16986,16988],{"class":299,"line":347},[161,16964,16965],{"class":303},"  () ",[161,16967,739],{"class":393},[161,16969,16970],{"class":314}," $fetch",[161,16972,573],{"class":303},[161,16974,16975],{"class":321},"`\u002Fapi\u002Fproducts\u002F${",[161,16977,16945],{"class":303},[161,16979,174],{"class":321},[161,16981,16950],{"class":303},[161,16983,174],{"class":321},[161,16985,16955],{"class":303},[161,16987,16958],{"class":321},[161,16989,16990],{"class":303},"),\n",[161,16992,16993],{"class":299,"line":358},[161,16994,16995],{"class":303},"  {\n",[161,16997,16998,17001,17004,17006,17009,17011,17014,17016,17019],{"class":299,"line":809},[161,16999,17000],{"class":303},"    pick: [",[161,17002,17003],{"class":321},"'id'",[161,17005,513],{"class":303},[161,17007,17008],{"class":321},"'name'",[161,17010,513],{"class":303},[161,17012,17013],{"class":321},"'price'",[161,17015,513],{"class":303},[161,17017,17018],{"class":321},"'image'",[161,17020,17021],{"class":303},"],\n",[161,17023,17024,17027],{"class":299,"line":821},[161,17025,17026],{"class":303},"    deep: ",[161,17028,17029],{"class":384},"false\n",[161,17031,17032],{"class":299,"line":833},[161,17033,806],{"class":303},[161,17035,17036],{"class":299,"line":842},[161,17037,6460],{"class":303},[17,17039,17040,17043,17044,17046,17047,35],{},[129,17041,17042],{},"pick"," can restrict the result to necessary properties. Nuxt 4's ",[129,17045,16862],{}," also uses shallow reactivity by default, avoiding the cost of making every nested property deeply reactive when that behavior is unnecessary. (",[29,17048,8374],{"href":16869,"rel":17049},[33],[17,17051,17052],{},"For dynamic routes, make cache or async-data keys represent the actual resource. Reusing an ambiguous key across different pages can produce incorrect shared data behavior.",[17,17054,17055,17056,17059,17060,35],{},"Nuxt also supports payload extraction for prerendered and cached routes. Depending on configuration, payload data can live in ",[129,17057,17058],{},"_payload.json"," files and be reused during client navigation. (",[29,17061,8374],{"href":8929,"rel":17062},[33],[12,17064,17066],{"id":17065},"optimize-the-lcp-resource","Optimize the LCP Resource",[17,17068,17069],{},"For many production sites, the LCP element is a large hero image or prominent text block.",[17,17071,17072,17073,17075,17076,35],{},"Google defines good LCP as ",[21,17074,16184],{},", but an LCP problem should be decomposed rather than treated as one number. (",[29,17077,34],{"href":16054,"rel":17078},[33],[17,17080,17081],{},"For a hero image, check:",[17,17083,17084],{},[21,17085,17086],{},"Server response → HTML discovery → image request → download → render",[17,17088,17089],{},"An otherwise optimized image can still produce poor LCP if the browser discovers it late.",[17,17091,17092],{},"With Nuxt Image, provide appropriate dimensions and responsive sizing, and consider preloading the actual LCP image:",[179,17094,17096],{"className":8603,"code":17095,"language":8605,"meta":185,"style":185},"\u003CNuxtImg\n  src=\"\u002Fimages\u002Fhero.webp\"\n  width=\"1440\"\n  height=\"810\"\n  sizes=\"sm:100vw lg:1200px\"\n  :preload=\"{ fetchPriority: 'high' }\"\n  alt=\"Product dashboard\"\n\u002F>\n",[129,17097,17098,17105,17114,17123,17132,17142,17165,17174],{"__ignoreMap":185},[161,17099,17100,17102],{"class":299,"line":300},[161,17101,304],{"class":303},[161,17103,17104],{"class":307},"NuxtImg\n",[161,17106,17107,17109,17111],{"class":299,"line":311},[161,17108,315],{"class":314},[161,17110,318],{"class":303},[161,17112,17113],{"class":321},"\"\u002Fimages\u002Fhero.webp\"\n",[161,17115,17116,17118,17120],{"class":299,"line":325},[161,17117,328],{"class":314},[161,17119,318],{"class":303},[161,17121,17122],{"class":321},"\"1440\"\n",[161,17124,17125,17127,17129],{"class":299,"line":336},[161,17126,339],{"class":314},[161,17128,318],{"class":303},[161,17130,17131],{"class":321},"\"810\"\n",[161,17133,17134,17137,17139],{"class":299,"line":347},[161,17135,17136],{"class":314},"  sizes",[161,17138,318],{"class":303},[161,17140,17141],{"class":321},"\"sm:100vw lg:1200px\"\n",[161,17143,17144,17147,17149,17151,17153,17156,17159,17162],{"class":299,"line":358},[161,17145,17146],{"class":303},"  :",[161,17148,7050],{"class":314},[161,17150,318],{"class":303},[161,17152,2313],{"class":321},[161,17154,17155],{"class":303},"{ fetchPriority: ",[161,17157,17158],{"class":321},"'high'",[161,17160,17161],{"class":303}," }",[161,17163,17164],{"class":321},"\"\n",[161,17166,17167,17169,17171],{"class":299,"line":809},[161,17168,350],{"class":314},[161,17170,318],{"class":303},[161,17172,17173],{"class":321},"\"Product dashboard\"\n",[161,17175,17176],{"class":299,"line":821},[161,17177,17178],{"class":303},"\u002F>\n",[17,17180,17181,17182,17187,17188,17191,17192,35],{},"Nuxt Image supports image preloading and fetch priority controls. (",[29,17183,17186],{"href":17184,"rel":17185},"https:\u002F\u002Fimage.nuxt.com\u002Fusage\u002Fnuxt-img?NOCACHE=10%3A04%3A32+AM&utm_source=chatgpt.com",[33],"image.nuxt.com",") Web performance guidance also recommends ",[129,17189,17190],{},"fetchpriority=\"high\""," where appropriate for an important LCP image, while warning against indiscriminately prioritizing resources. (",[29,17193,34],{"href":17194,"rel":17195},"https:\u002F\u002Fweb.dev\u002Farticles\u002Ffetch-priority?utm_source=chatgpt.com",[33],[17,17197,17198],{},"Do not lazy-load the image that is expected to become the LCP element.",[12,17200,17202],{"id":17201},"control-javascript-cost","Control JavaScript Cost",[17,17204,17205,17206,35],{},"Nuxt automatically performs route-level code splitting, but third-party dependencies can still make individual chunks expensive. (",[29,17207,8374],{"href":16436,"rel":17208},[33],[17,17210,17211],{},"Common offenders include:",[1640,17213,17214,17217,17220,17223,17226,17229,17232],{},[981,17215,17216],{},"editors,",[981,17218,17219],{},"charting libraries,",[981,17221,17222],{},"map SDKs,",[981,17224,17225],{},"animation libraries,",[981,17227,17228],{},"analytics packages,",[981,17230,17231],{},"customer-support widgets,",[981,17233,17234],{},"large utility packages.",[17,17236,17237],{},"A feature that appears only after the user clicks a button should rarely be part of the critical initial bundle.",[179,17239,17241],{"className":8603,"code":17240,"language":8605,"meta":185,"style":185},"\u003Cscript setup lang=\"ts\">\nconst open = ref(false)\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Cbutton @click=\"open = true\">\n    Open analytics\n  \u003C\u002Fbutton>\n\n  \u003CLazyAnalyticsDashboard v-if=\"open\" \u002F>\n\u003C\u002Ftemplate>\n",[129,17242,17243,17259,17276,17284,17288,17296,17311,17316,17324,17328,17345],{"__ignoreMap":185},[161,17244,17245,17247,17249,17251,17253,17255,17257],{"class":299,"line":300},[161,17246,304],{"class":303},[161,17248,5916],{"class":307},[161,17250,8616],{"class":314},[161,17252,8619],{"class":314},[161,17254,318],{"class":303},[161,17256,8624],{"class":321},[161,17258,361],{"class":303},[161,17260,17261,17263,17266,17268,17270,17272,17274],{"class":299,"line":311},[161,17262,752],{"class":393},[161,17264,17265],{"class":384}," open",[161,17267,8636],{"class":393},[161,17269,8639],{"class":314},[161,17271,573],{"class":303},[161,17273,8805],{"class":384},[161,17275,6460],{"class":303},[161,17277,17278,17280,17282],{"class":299,"line":325},[161,17279,5931],{"class":303},[161,17281,5916],{"class":307},[161,17283,361],{"class":303},[161,17285,17286],{"class":299,"line":336},[161,17287,3024],{"emptyLinePlaceholder":1099},[161,17289,17290,17292,17294],{"class":299,"line":347},[161,17291,304],{"class":303},[161,17293,8692],{"class":307},[161,17295,361],{"class":303},[161,17297,17298,17300,17302,17304,17306,17309],{"class":299,"line":358},[161,17299,8699],{"class":303},[161,17301,6373],{"class":307},[161,17303,8704],{"class":314},[161,17305,318],{"class":303},[161,17307,17308],{"class":321},"\"open = true\"",[161,17310,361],{"class":303},[161,17312,17313],{"class":299,"line":809},[161,17314,17315],{"class":303},"    Open analytics\n",[161,17317,17318,17320,17322],{"class":299,"line":821},[161,17319,8721],{"class":303},[161,17321,6373],{"class":307},[161,17323,361],{"class":303},[161,17325,17326],{"class":299,"line":833},[161,17327,3024],{"emptyLinePlaceholder":1099},[161,17329,17330,17332,17335,17338,17340,17343],{"class":299,"line":842},[161,17331,8699],{"class":303},[161,17333,17334],{"class":307},"LazyAnalyticsDashboard",[161,17336,17337],{"class":314}," v-if",[161,17339,318],{"class":303},[161,17341,17342],{"class":321},"\"open\"",[161,17344,16777],{"class":303},[161,17346,17347,17349,17351],{"class":299,"line":3064},[161,17348,5931],{"class":303},[161,17350,8692],{"class":307},[161,17352,361],{"class":303},[17,17354,8424,17355,17357,17358,35],{},[129,17356,16847],{}," component convention uses dynamic imports so optional component code can be loaded later. (",[29,17359,8374],{"href":16753,"rel":17360},[33],[17,17362,17363,17364,35],{},"Plugins deserve the same scrutiny. Nuxt notes that expensive plugin setup can block hydration, and asynchronous plugins that do not depend on each other can use parallel execution. (",[29,17365,8374],{"href":17366,"rel":17367},"https:\u002F\u002Fnuxt.com\u002Fdocs\u002F4.x\u002Fguide\u002Fbest-practices\u002Fplugins?utm_source=chatgpt.com",[33],[12,17369,17371],{"id":17370},"fix-hydration-mismatches","Fix Hydration Mismatches",[17,17373,17374],{},"A hydration warning is not merely cosmetic.",[17,17376,17377,17378,35],{},"Nuxt documents that mismatches can force Vue to re-render component trees, increase time to interactivity, create visual shifts and break event handling. (",[29,17379,8374],{"href":17380,"rel":17381},"https:\u002F\u002Fnuxt.com\u002Fdocs\u002F4.x\u002Fguide\u002Fbest-practices\u002Fhydration?utm_source=chatgpt.com",[33],[17,17383,17384],{},"Common causes include:",[1640,17386,17387,17390,17393,17396,17399],{},[981,17388,17389],{},"server and client producing different values,",[981,17391,17392],{},"browser-only APIs used during SSR,",[981,17394,17395],{},"random values generated separately,",[981,17397,17398],{},"time-dependent output,",[981,17400,17401],{},"incorrect client-only rendering.",[17,17403,17404],{},"Fix the underlying state difference rather than hiding the warning.",[12,17406,17408],{"id":17407},"measure-before-optimizing","Measure Before Optimizing",[17,17410,17411],{},"Performance work should follow:",[17,17413,17414],{},[21,17415,17416],{},"Symptom → measurement → cause → fix → re-measurement",[17,17418,17419,17420,35],{},"Use PageSpeed Insights or CrUX for real-user Core Web Vitals when sufficient field data exists. CrUX represents actual Chrome user experiences, while Lighthouse provides controlled lab diagnostics. (",[29,17421,649],{"href":17422,"rel":17423},"https:\u002F\u002Fdeveloper.chrome.com\u002Fdocs\u002Fcrux\u002Fguides\u002Fcrux-api?utm_source=chatgpt.com",[33],[17,17425,17426],{},"For JavaScript, inspect the production bundle:",[179,17428,17430],{"className":3564,"code":17429,"language":3566,"meta":185,"style":185},"npx nuxt analyze\n",[129,17431,17432],{"__ignoreMap":185},[161,17433,17434,17436,17438],{"class":299,"line":300},[161,17435,8897],{"class":314},[161,17437,8900],{"class":321},[161,17439,17440],{"class":321}," analyze\n",[17,17442,8424,17443,17446,17447,35],{},[129,17444,17445],{},"analyze"," command builds the production application and generates bundle analysis that can reveal unexpectedly large dependencies and chunks. The command is currently documented as experimental. (",[29,17448,8374],{"href":17449,"rel":17450},"https:\u002F\u002Fnuxt.com\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands\u002Fanalyze?utm_source=chatgpt.com",[33],[17,17452,17453],{},"A useful production workflow is:",[978,17455,17456,17459,17462,17465,17468,17471],{},[981,17457,17458],{},"Check field LCP, INP and CLS.",[981,17460,17461],{},"Reproduce the slow route under realistic mobile conditions.",[981,17463,17464],{},"Inspect the network waterfall and performance trace.",[981,17466,17467],{},"Identify the actual blocking resource or main-thread task.",[981,17469,17470],{},"Change one meaningful bottleneck.",[981,17472,17473],{},"Deploy and compare field performance again.",[17,17475,17476],{},"Do not optimize solely for a Lighthouse score.",[12,17478,4702],{"id":4701},[17,17480,17481,17484,17486,17487,35],{},[21,17482,17483],{},"Disabling SSR to make the architecture simpler.",[129,17485,8397],{}," turns the application into client-side rendering and removes many SSR benefits. Nuxt explicitly notes that static SPA output contains an initially empty app container, whereas SSR prerendering provides page HTML immediately. (",[29,17488,8374],{"href":17489,"rel":17490},"https:\u002F\u002Fnuxt.com\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fdeployment?utm_source=chatgpt.com",[33],[17,17492,17493,17496],{},[21,17494,17495],{},"Hydrating everything immediately.","\nServer-rendered HTML does not mean browser work is free. Delay non-critical interactivity.",[17,17498,17499,17502],{},[21,17500,17501],{},"Sending entire API objects.","\nReducing request count while transferring huge serialized payloads only moves the bottleneck.",[17,17504,17505,17508],{},[21,17506,17507],{},"Lazy-loading the LCP image.","\nCritical content should be discovered early, not intentionally delayed.",[17,17510,17511,17514,17515,35],{},[21,17512,17513],{},"Adding every performance experiment.","\nExperimental features can change and may have important trade-offs. For example, Nuxt 4.5 documents experimental SSR streaming, but it changes when response headers and status can be mutated and automatically falls back for several route-rule configurations. Test such features against the actual application before adopting them globally. (",[29,17516,8374],{"href":17517,"rel":17518},"https:\u002F\u002Fnuxt.com\u002Fdocs\u002F4.x\u002Fguide\u002Fgoing-further\u002Fexperimental-features?utm_source=chatgpt.com",[33],[12,17520,887],{"id":886},[17,17522,17523],{},"Optimize Nuxt from the outside in.",[17,17525,17526],{},"First measure what users experience. Then determine whether the bottleneck comes from server response time, rendering strategy, critical resource loading, hydration, JavaScript execution or data transfer.",[17,17528,17529],{},"For most production Nuxt sites, the priority should be:",[17,17531,17532],{},[21,17533,17534],{},"correct rendering strategy → fast critical content → minimal hydration → small payloads → controlled JavaScript → caching → continuous field measurement",[17,17536,17537],{},"A technically sophisticated configuration is not automatically a fast one. The best Nuxt architecture is the one that avoids doing unnecessary work on the server, across the network and in the browser.",[12,17539,907],{"id":906},[909,17541,17543],{"id":17542},"is-ssr-always-faster","Is SSR Always Faster?",[17,17545,17546],{},"No. SSR can improve the initial delivery of HTML, but slow server rendering, large payloads and heavy hydration can still produce poor performance. The correct approach depends on the route.",[909,17548,17550],{"id":17549},"should-every-page-be-prerendered","Should Every Page Be Prerendered?",[17,17552,17553],{},"No. Prerender pages whose output can safely be generated ahead of time. Personalized or frequently changing pages may require dynamic rendering.",[909,17555,17557],{"id":17556},"does-lazy-loading-improve-inp","Does Lazy Loading Improve INP?",[17,17559,17560,17561,35],{},"It can help when it removes unnecessary JavaScript from the critical path, but INP depends on the actual main-thread work performed around user interactions. Google recommends minimizing event-handler work and breaking up long tasks when necessary. (",[29,17562,34],{"href":15279,"rel":17563},[33],[909,17565,17567,17568,6761],{"id":17566},"should-i-use-hydrate-never","Should I Use ",[129,17569,17570],{},"hydrate-never",[17,17572,17573,17574,35],{},"Only for content that does not require client-side interaction. Nuxt can server-render such components without paying their normal hydration cost. (",[29,17575,8374],{"href":16642,"rel":17576},[33],[909,17578,17580],{"id":17579},"how-do-i-know-what-to-optimize-first","How Do I Know What to Optimize First?",[17,17582,17583],{},"Start with real-user Core Web Vitals where available. Then use lab tools and browser traces to locate the cause behind the metric rather than guessing from the metric alone.",[12,17585,960],{"id":959},[17,17587,17588],{},"Nuxt 4 already provides a strong performance foundation, but production performance depends on how much work your architecture asks Nuxt and the browser to perform.",[17,17590,17591],{},"Prerender content that does not need request-time rendering. Cache reusable responses. Ship only the data and JavaScript the page needs. Hydrate interactivity when users actually need it. Prioritize the resource responsible for the initial experience, and verify every meaningful change with measurements.",[17,17593,17594],{},"That approach scales better than collecting isolated optimization tricks because it attacks the actual cost of the page.",[12,17596,976],{"id":975},[1640,17598,17599,17610,17618,17627,17636,17644,17653,17664,17674,17684],{},[981,17600,17601,17602,17605,17606],{},"Nuxt — ",[21,17603,17604],{},"Introduction, Nuxt 4 documentation",". Current documentation identifies v4.5.2. ",[29,17607,17609],{"href":16436,"rel":17608},[33],"Nuxt Introduction",[981,17611,17601,17612,1057,17614],{},[21,17613,8402],{},[29,17615,17617],{"href":8929,"rel":17616},[33],"Nuxt Prerendering",[981,17619,17601,17620,1057,17623],{},[21,17621,17622],{},"Server \u002F Hybrid Rendering",[29,17624,17626],{"href":9002,"rel":17625},[33],"Nuxt Server Documentation",[981,17628,17601,17629,1057,17632],{},[21,17630,17631],{},"Components: Dynamic Imports and Delayed Hydration",[29,17633,17635],{"href":16753,"rel":17634},[33],"Nuxt Components Documentation",[981,17637,17601,17638,1057,17640],{},[21,17639,16862],{},[29,17641,17643],{"href":16869,"rel":17642},[33],"Nuxt useAsyncData Documentation",[981,17645,17601,17646,1057,17649],{},[21,17647,17648],{},"Nuxt and Hydration",[29,17650,17652],{"href":17380,"rel":17651},[33],"Nuxt Hydration Best Practices",[981,17654,17655,17656,1057,17659],{},"Nuxt Image — ",[21,17657,17658],{},"NuxtImg",[29,17660,17663],{"href":17661,"rel":17662},"https:\u002F\u002Fimage.nuxt.com\u002Fusage\u002Fnuxt-img?utm_source=chatgpt.com",[33],"Nuxt Image NuxtImg Documentation",[981,17665,17666,17667,1057,17670],{},"Google web.dev — ",[21,17668,17669],{},"Web Vitals",[29,17671,17669],{"href":17672,"rel":17673},"https:\u002F\u002Fweb.dev\u002Farticles\u002Fvitals?utm_source=chatgpt.com",[33],[981,17675,17676,17677,17680,17681],{},"Google web.dev — Philip Walton and Barry Pollard, ",[21,17678,17679],{},"Optimize Largest Contentful Paint",", updated March 31, 2025. ",[29,17682,17679],{"href":16054,"rel":17683},[33],[981,17685,1038,17686,1057,17689],{},[21,17687,17688],{},"Chrome UX Report API",[29,17690,17692],{"href":17422,"rel":17691},[33],"CrUX API Documentation",[1067,17694,17695],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}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 .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":185,"searchDepth":311,"depth":311,"links":17697},[17698,17699,17700,17701,17704,17705,17706,17707,17708,17709,17710,17711,17712,17713,17714],{"id":16383,"depth":311,"text":16384},{"id":1151,"depth":311,"text":1152},{"id":16440,"depth":311,"text":16441},{"id":16514,"depth":311,"text":16515,"children":17702},[17703],{"id":16631,"depth":325,"text":16632},{"id":16705,"depth":311,"text":16706},{"id":16856,"depth":311,"text":16857},{"id":17065,"depth":311,"text":17066},{"id":17201,"depth":311,"text":17202},{"id":17370,"depth":311,"text":17371},{"id":17407,"depth":311,"text":17408},{"id":4701,"depth":311,"text":4702},{"id":886,"depth":311,"text":887},{"id":906,"depth":311,"text":907},{"id":959,"depth":311,"text":960},{"id":975,"depth":311,"text":976},"Learn how to optimize Nuxt 4 production performance with hybrid rendering, prerendering, lazy hydration, smaller payloads, optimized images, caching and Core Web Vitals measurement.","\u002Fnuxt-4-performance.png","Image of Nuxt",{},"\u002Fblog\u002Fen\u002Fnuxt-4-performance",{"title":16378,"description":17715},"nuxt-performance","blog\u002Fen\u002Fnuxt-4-performance","gmlDbVvuUhDlq0E2im08jt1pZXfZv4qOD-WfThuXeW0",{"id":17725,"title":17726,"author":7,"body":17727,"category":2018,"description":18458,"draft":1097,"extension":1098,"featured":1099,"image":18459,"imageAlt":18460,"locale":1102,"meta":18461,"navigation":1099,"path":18462,"publishedAt":13899,"seo":18463,"slug":17731,"stem":18464,"translationKey":17731,"updatedAt":13899,"__hash__":18465},"blog\u002Fblog\u002Fen\u002Fwhat-observability.md","What Is Observability? Logs, Metrics and Traces Explained",{"type":9,"value":17728,"toc":18439},[17729,17733,17740,17743,17746,17748,17753,17765,17768,17785,17787,17846,17853,17857,17860,17865,17870,17878,17884,17887,17892,17895,17898,17919,17922,17925,17929,17932,17952,17955,17958,17961,17963,17983,17992,17995,17998,18001,18004,18010,18017,18020,18024,18027,18029,18035,18042,18045,18051,18057,18071,18075,18078,18081,18084,18089,18091,18096,18098,18103,18105,18110,18113,18120,18127,18132,18134,18137,18140,18143,18150,18153,18178,18181,18185,18188,18191,18198,18201,18207,18217,18222,18224,18231,18234,18241,18244,18246,18249,18252,18255,18260,18263,18265,18269,18272,18276,18279,18283,18290,18294,18300,18304,18307,18309,18312,18315,18321,18323],[12,17730,17732],{"id":17731},"what-is-observability","What Is Observability?",[17,17734,17735,17736,17739],{},"A system can be online and still be difficult to understand. A checkout may suddenly become slow, one API request may fail only for a specific region, or a database call may behave differently after a deployment. Knowing that something is wrong is useful. Knowing ",[21,17737,17738],{},"why it is happening, where it started, and which users are affected"," is much more useful.",[17,17741,17742],{},"That is the purpose of observability.",[17,17744,17745],{},"Observability gives engineers enough information about a running system to investigate both expected failures and problems they did not know to look for in advance. It becomes especially valuable as applications grow from one server into distributed systems involving APIs, databases, queues, containers, third-party services, and multiple infrastructure layers.",[12,17747,1152],{"id":1151},[17,17749,17750],{},[21,17751,17752],{},"Observability is the ability to understand the internal state and behavior of a system by examining the data it produces.",[17,17754,17755,17756,17759,17760,35],{},"In software, that data is usually called ",[21,17757,17758],{},"telemetry"," and commonly includes metrics, logs, and distributed traces. OpenTelemetry describes observability as the ability to understand a system from the outside and to investigate novel problems—including questions that were not anticipated when dashboards and alerts were originally created. (",[29,17761,17764],{"href":17762,"rel":17763},"https:\u002F\u002Fopentelemetry.io\u002Fdocs\u002Fconcepts\u002Fobservability-primer\u002F?utm_source=chatgpt.com",[33],"opentelemetry.io",[17,17766,17767],{},"Observability is therefore not simply about collecting more data. The goal is to collect sufficiently useful, contextual, and connected data so engineers can answer questions such as:",[1640,17769,17770,17773,17776,17779,17782],{},[981,17771,17772],{},"Why did this request fail?",[981,17774,17775],{},"Which service caused the slowdown?",[981,17777,17778],{},"Did the problem begin after a deployment?",[981,17780,17781],{},"Is every user affected or only one region, endpoint, tenant, or browser?",[981,17783,17784],{},"What changed when the incident started?",[12,17786,2081],{"id":2080},[69,17788,17789,17798],{},[72,17790,17791],{},[75,17792,17793,17795],{},[78,17794,10409],{},[78,17796,17797],{},"What it tells you",[85,17799,17800,17808,17815,17823,17831,17839],{},[75,17801,17802,17805],{},[90,17803,17804],{},"Metrics",[90,17806,17807],{},"What is changing numerically",[75,17809,17810,17812],{},[90,17811,2970],{},[90,17813,17814],{},"What events happened",[75,17816,17817,17820],{},[90,17818,17819],{},"Traces",[90,17821,17822],{},"How a request moved through the system",[75,17824,17825,17828],{},[90,17826,17827],{},"Profiles",[90,17829,17830],{},"Where code consumes resources",[75,17832,17833,17836],{},[90,17834,17835],{},"Monitoring",[90,17837,17838],{},"Whether known conditions require attention",[75,17840,17841,17843],{},[90,17842,9663],{},[90,17844,17845],{},"Enough context to investigate system behavior, including unexpected problems",[17,17847,17848,17849,35],{},"Logs, metrics, and traces remain the most familiar observability signals, but they are not a formal limit on what observability can include. OpenTelemetry currently documents traces, metrics, logs, and profiles among its supported signal concepts. (",[29,17850,17764],{"href":17851,"rel":17852},"https:\u002F\u002Fopentelemetry.io\u002Fdocs\u002Fconcepts\u002Fsignals\u002F?utm_source=chatgpt.com",[33],[12,17854,17856],{"id":17855},"observability-vs-monitoring","Observability vs Monitoring",[17,17858,17859],{},"Observability and monitoring overlap, but they are not identical concepts.",[17,17861,17862,17864],{},[21,17863,17835],{}," usually focuses on predefined measurements and known questions:",[1501,17866,17867],{},[17,17868,17869],{},"Is error rate above the threshold?\nIs CPU usage unusually high?\nIs the service responding?",[17,17871,17872,17873,35],{},"Google's Site Reliability Engineering documentation defines monitoring as collecting, processing, aggregating, and displaying quantitative system data, and uses monitoring for alerting, dashboards, trend analysis, and debugging. Google also notes that terminology in this area is not completely uniform. (",[29,17874,17877],{"href":17875,"rel":17876},"https:\u002F\u002Fsre.google\u002Fsre-book\u002Fmonitoring-distributed-systems\u002F?utm_source=chatgpt.com",[33],"sre.google",[17,17879,17880,17883],{},[21,17881,17882],{},"Observability goes further."," It aims to make enough system context available that engineers can investigate questions they did not predict beforehand.",[17,17885,17886],{},"Imagine that an alert says:",[17,17888,17889],{},[129,17890,17891],{},"Checkout error rate: 8%",[17,17893,17894],{},"Monitoring has detected the problem.",[17,17896,17897],{},"Observability should help you move from that alert toward questions such as:",[17,17899,17900,17903,17904,17903,17907,17903,17910,17903,17913,17903,17916],{},[129,17901,17902],{},"Which checkout requests are failing?","\n→ ",[129,17905,17906],{},"Only requests using one payment provider.",[129,17908,17909],{},"Where do they fail?",[129,17911,17912],{},"Inside the payment-service call.",[129,17914,17915],{},"What changed?",[129,17917,17918],{},"Failures began after version 4.8.2 was deployed.",[17,17920,17921],{},"Monitoring detects a symptom. Observability helps engineers investigate the mechanism behind it.",[17,17923,17924],{},"The distinction is useful, but it should not be treated as a rigid industry standard. Monitoring tools can provide deep diagnostic information, and observability systems normally include monitoring capabilities.",[12,17926,17928],{"id":17927},"how-observability-works","How Observability Works",[17,17930,17931],{},"An observable system usually follows a basic flow:",[17,17933,17934,17903,17937,17903,17940,17903,17943,17903,17946,17903,17949],{},[21,17935,17936],{},"Application and infrastructure",[21,17938,17939],{},"instrumentation",[21,17941,17942],{},"telemetry signals",[21,17944,17945],{},"collection and processing",[21,17947,17948],{},"storage and analysis",[21,17950,17951],{},"dashboards, queries, alerts, and investigation",[17,17953,17954],{},"Instrumentation is the critical first step. Application code, frameworks, infrastructure components, and libraries produce telemetry describing what they are doing.",[220,17956,17804],{"id":17957},"metrics",[17,17959,17960],{},"Metrics represent numerical measurements captured over time.",[17,17962,10352],{},[1640,17964,17965,17968,17971,17974,17977,17980],{},[981,17966,17967],{},"request rate",[981,17969,17970],{},"error rate",[981,17972,17973],{},"response latency",[981,17975,17976],{},"memory usage",[981,17978,17979],{},"CPU utilization",[981,17981,17982],{},"database connection count",[17,17984,17985,17986,239,17989,35],{},"Metrics are efficient for understanding trends and detecting changes across large systems. Google SRE's commonly cited four golden signals are ",[21,17987,17988],{},"latency, traffic, errors, and saturation",[29,17990,17877],{"href":17875,"rel":17991},[33],[17,17993,17994],{},"Metrics are less suitable for describing every detail of an individual request. That is where other signals help.",[220,17996,2970],{"id":17997},"logs",[17,17999,18000],{},"Logs record events.",[17,18002,18003],{},"A log might say:",[179,18005,18008],{"className":18006,"code":18007,"language":184,"meta":185},[182],"2026-09-12T09:42:18Z\npayment_failed\nprovider=stripe\norder_id=84721\nstatus=timeout\n",[129,18009,18007],{"__ignoreMap":185},[17,18011,18012,18013,35],{},"Logs can contain valuable event-level details, but their usefulness depends heavily on structure and context. OpenTelemetry recommends structured logs and supports fields such as timestamps, severity, trace IDs, span IDs, resources, and attributes. (",[29,18014,17764],{"href":18015,"rel":18016},"https:\u002F\u002Fopentelemetry.io\u002Fdocs\u002Fconcepts\u002Fsignals\u002Flogs\u002F?utm_source=chatgpt.com",[33],[17,18018,18019],{},"A million disconnected log lines are not automatically good observability.",[220,18021,18023],{"id":18022},"distributed-traces","Distributed Traces",[17,18025,18026],{},"Distributed tracing follows a request as it passes through multiple components.",[17,18028,1399],{},[179,18030,18033],{"className":18031,"code":18032,"language":184,"meta":185},[182],"Browser\n  ↓\nAPI Gateway\n  ↓\nCheckout Service\n  ↓\nPayment Service\n  ↓\nDatabase\n",[129,18034,18032],{"__ignoreMap":185},[17,18036,18037,18038,18041],{},"A trace is usually divided into ",[21,18039,18040],{},"spans",", where each span describes one operation.",[17,18043,18044],{},"A trace could reveal:",[179,18046,18049],{"className":18047,"code":18048,"language":184,"meta":185},[182],"POST \u002Fcheckout              940 ms\n├─ validate-cart             18 ms\n├─ query-inventory           31 ms\n└─ process-payment          861 ms\n",[129,18050,18048],{"__ignoreMap":185},[17,18052,18053,18054,174],{},"Now the engineer knows that most of the latency occurred inside ",[129,18055,18056],{},"process-payment",[17,18058,18059,18060,420,18063,18066,18067,35],{},"For distributed tracing to remain connected across services, request context must propagate with the request. The W3C Trace Context specification standardizes HTTP headers such as ",[129,18061,18062],{},"traceparent",[129,18064,18065],{},"tracestate"," for this purpose. (",[29,18068,5697],{"href":18069,"rel":18070},"https:\u002F\u002Fwww.w3.org\u002FTR\u002Ftrace-context\u002F?utm_source=chatgpt.com",[33],[12,18072,18074],{"id":18073},"correlation-matters","Correlation Matters",[17,18076,18077],{},"Collecting telemetry signals independently is useful. Connecting them is considerably more powerful.",[17,18079,18080],{},"Suppose a latency metric shows a spike.",[17,18082,18083],{},"An engineer should ideally be able to move from:",[17,18085,18086],{},[21,18087,18088],{},"metric spike",[17,18090,5949],{},[17,18092,18093],{},[21,18094,18095],{},"slow traces",[17,18097,5949],{},[17,18099,18100],{},[21,18101,18102],{},"specific service",[17,18104,5949],{},[17,18106,18107],{},[21,18108,18109],{},"related logs",[17,18111,18112],{},"without manually reconstructing the request across several systems.",[17,18114,18115,18116,35],{},"OpenTelemetry context propagation can correlate telemetry across process and network boundaries and can associate logs with the trace and span that produced them. (",[29,18117,17764],{"href":18118,"rel":18119},"https:\u002F\u002Fopentelemetry.io\u002Fdocs\u002Fconcepts\u002Fcontext-propagation\u002F?utm_source=chatgpt.com",[33],[17,18121,18122,18123,18126],{},"This is one reason identifiers such as ",[129,18124,18125],{},"service.name",", trace IDs, deployment versions, regions, and environment attributes matter.",[17,18128,18129],{},[161,18130,18131],{},"INTERNAL LINK: Distributed Tracing Explained",[12,18133,13586],{"id":13585},[17,18135,18136],{},"Consider an ecommerce platform where customers report slow checkout.",[17,18138,18139],{},"The dashboard shows normal CPU and memory usage. A basic infrastructure monitoring system might therefore reveal nothing obvious.",[17,18141,18142],{},"Observability provides more paths for investigation.",[17,18144,18145,18146,18149],{},"A latency metric shows that only ",[129,18147,18148],{},"POST \u002Fcheckout"," became slower. Distributed traces reveal that requests spend most of their time in the inventory service. Logs from that service show database timeout events. Deployment metadata reveals that a new release changed one inventory query shortly before latency increased.",[17,18151,18152],{},"The investigation becomes:",[17,18154,18155,18157,18158,18160,18161,18163,18164,18166,18167,18170,18171,18173,18174,18177],{},[21,18156,13174],{}," checkout is slow\n→ ",[21,18159,13180],{}," checkout latency increased\n→ ",[21,18162,13189],{}," inventory service\n→ ",[21,18165,13198],{}," traces show long database spans\n→ ",[21,18168,18169],{},"Evidence:"," logs show database timeouts\n→ ",[21,18172,13204],{}," correct the problematic query\n→ ",[21,18175,18176],{},"Re-measurement:"," latency returns to its expected range",[17,18179,18180],{},"No single signal produced the entire answer. The value came from being able to connect them.",[12,18182,18184],{"id":18183},"building-observability","Building Observability",[17,18186,18187],{},"A practical observability strategy should begin with the questions engineers need to answer, not with the number of dashboards they can create.",[17,18189,18190],{},"Start by instrumenting important user journeys and service boundaries. Give services stable identities, record meaningful errors and latency, propagate trace context between components, and add business context when it genuinely improves diagnosis.",[17,18192,18193,18194,35],{},"OpenTelemetry provides vendor-neutral APIs, SDKs, protocols, and tooling for generating and exporting telemetry. Its Collector can receive telemetry, process it through configurable pipelines, and export it to one or more observability backends. (",[29,18195,17764],{"href":18196,"rel":18197},"https:\u002F\u002Fopentelemetry.io\u002Fdocs\u002Fwhat-is-opentelemetry\u002F?utm_source=chatgpt.com",[33],[17,18199,18200],{},"A typical architecture can therefore look like:",[179,18202,18205],{"className":18203,"code":18204,"language":184,"meta":185},[182],"Applications\n     ↓\nOpenTelemetry SDKs\n     ↓\nOpenTelemetry Collector\n     ↓\nMetrics \u002F Logs \u002F Trace Backend\n     ↓\nDashboards + Alerts + Investigation\n",[129,18206,18204],{"__ignoreMap":185},[17,18208,18209,18210,18213,18214,35],{},"OpenTelemetry itself is ",[21,18211,18212],{},"not an observability backend",". Storage, querying, analysis, and visualization are handled by other systems. (",[29,18215,17764],{"href":18196,"rel":18216},[33],[17,18218,18219],{},[161,18220,18221],{},"INTERNAL LINK: What Is OpenTelemetry?",[12,18223,4702],{"id":4701},[17,18225,18226,18227,18230],{},"One mistake is assuming that ",[21,18228,18229],{},"more telemetry automatically means better observability",". Large volumes of poorly structured data can make investigation slower while increasing storage and processing costs.",[17,18232,18233],{},"Another is collecting signals without correlation. Logs, traces, and metrics become much more useful when engineers can move between them using shared context.",[17,18235,18236,18237,35],{},"Metric design also requires care. High-cardinality attributes such as request IDs, arbitrary user input, or raw URLs can create very large numbers of unique metric series. OpenTelemetry explicitly documents cardinality as a memory-cost concern for metrics. (",[29,18238,17764],{"href":18239,"rel":18240},"https:\u002F\u002Fopentelemetry.io\u002Fdocs\u002Fconcepts\u002Fsignals\u002Fmetrics\u002F?utm_source=chatgpt.com",[33],[17,18242,18243],{},"Finally, dashboards should not become the entire observability strategy. Dashboards answer questions that someone anticipated. Production incidents often involve questions nobody anticipated.",[12,18245,887],{"id":886},[17,18247,18248],{},"Treat observability as an engineering capability, not as a collection of tools.",[17,18250,18251],{},"For most production systems, start with a small set of meaningful metrics, structured logs, and end-to-end traces for critical requests. Standardize service and deployment metadata, preserve trace context across service boundaries, and make telemetry searchable across signals.",[17,18253,18254],{},"Then test the system with a practical question:",[17,18256,18257],{},[21,18258,18259],{},"If an important request becomes slow or starts failing tomorrow, can an engineer determine what happened without deploying new diagnostic code?",[17,18261,18262],{},"If the answer is consistently no, the system still has an observability gap.",[12,18264,907],{"id":906},[909,18266,18268],{"id":18267},"is-observability-only-for-microservices","Is observability only for microservices?",[17,18270,18271],{},"No. Microservices make observability especially valuable because requests cross many components, but monolithic applications, APIs, databases, frontend applications, background workers, and infrastructure can all benefit from observability.",[909,18273,18275],{"id":18274},"are-logs-enough","Are logs enough?",[17,18277,18278],{},"Sometimes, particularly for small systems. As complexity grows, metrics and traces can provide information that would be difficult or expensive to reconstruct from logs alone.",[909,18280,18282],{"id":18281},"are-logs-metrics-and-traces-the-three-pillars","Are logs, metrics, and traces the three pillars?",[17,18284,18285,18286,35],{},"They are commonly called the three pillars of observability, including in Microsoft documentation. However, observability should not be defined solely by those three signal types. Modern systems can also use profiles and other telemetry. (",[29,18287,11256],{"href":18288,"rel":18289},"https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fdotnet\u002Fcore\u002Fdiagnostics\u002Fobservability-with-otel?utm_source=chatgpt.com",[33],[909,18291,18293],{"id":18292},"what-is-opentelemetry","What is OpenTelemetry?",[17,18295,18296,18297,35],{},"OpenTelemetry is a vendor-neutral open-source framework for instrumenting applications and generating, collecting, and exporting telemetry such as traces, metrics, and logs. It is not itself a storage or visualization backend. (",[29,18298,17764],{"href":18196,"rel":18299},[33],[909,18301,18303],{"id":18302},"does-observability-replace-monitoring","Does observability replace monitoring?",[17,18305,18306],{},"No. Monitoring remains essential for health checks, dashboards, trends, alerts, SLOs, and known failure conditions. Observability broadens the ability to investigate system behavior when the answer is not already encoded in an alert or dashboard.",[12,18308,960],{"id":959},[17,18310,18311],{},"Observability means being able to understand what a running system is doing from the evidence it produces.",[17,18313,18314],{},"Metrics reveal patterns. Logs describe events. Traces connect operations across distributed systems. Context ties those signals together.",[17,18316,18317,18318],{},"The objective is not maximum telemetry. It is ",[21,18319,18320],{},"enough meaningful, correlated telemetry to move efficiently from “something is wrong” to “this is what happened and why.”",[12,18322,976],{"id":975},[978,18324,18325,18339,18350,18362,18374,18387,18398,18412,18426],{},[981,18326,18327,18328,18331,18332,749,18336,35],{},"OpenTelemetry — ",[21,18329,18330],{},"Observability Primer",", updated 2026. ",[29,18333,18335],{"href":17762,"rel":18334},[33],"OpenTelemetry Observability Primer",[29,18337,17764],{"href":17762,"rel":18338},[33],[981,18340,18327,18341,18343,18344,749,18347,35],{},[21,18342,18293],{},", 2026. ",[29,18345,18293],{"href":18196,"rel":18346},[33],[29,18348,17764],{"href":18196,"rel":18349},[33],[981,18351,18327,18352,18354,18355,749,18359,35],{},[21,18353,15240],{},", updated March 10, 2026. ",[29,18356,18358],{"href":17851,"rel":18357},[33],"OpenTelemetry Signals",[29,18360,17764],{"href":17851,"rel":18361},[33],[981,18363,18327,18364,18331,18367,749,18371,35],{},[21,18365,18366],{},"Context Propagation",[29,18368,18370],{"href":18118,"rel":18369},[33],"OpenTelemetry Context Propagation",[29,18372,17764],{"href":18118,"rel":18373},[33],[981,18375,18327,18376,18343,18379,749,18384,35],{},[21,18377,18378],{},"Collector",[29,18380,18383],{"href":18381,"rel":18382},"https:\u002F\u002Fopentelemetry.io\u002Fdocs\u002Fcollector\u002F?utm_source=chatgpt.com",[33],"OpenTelemetry Collector",[29,18385,17764],{"href":18381,"rel":18386},[33],[981,18388,18327,18389,18343,18391,749,18395,35],{},[21,18390,17804],{},[29,18392,18394],{"href":18239,"rel":18393},[33],"OpenTelemetry Metrics",[29,18396,17764],{"href":18239,"rel":18397},[33],[981,18399,18400,18401,18404,18405,749,18409,35],{},"W3C — ",[21,18402,18403],{},"Trace Context",", W3C Recommendation, November 23, 2021. ",[29,18406,18408],{"href":18069,"rel":18407},[33],"W3C Trace Context",[29,18410,5697],{"href":18069,"rel":18411},[33],[981,18413,18414,18415,18418,18419,749,18423,35],{},"Google — ",[21,18416,18417],{},"Site Reliability Engineering: Monitoring Distributed Systems",", Rob Ewaschuk. ",[29,18420,18422],{"href":17875,"rel":18421},[33],"Google SRE — Monitoring Distributed Systems",[29,18424,17877],{"href":17875,"rel":18425},[33],[981,18427,18428,18429,1057,18432,749,18436,35],{},"Microsoft — ",[21,18430,18431],{},".NET Observability with OpenTelemetry",[29,18433,18435],{"href":18288,"rel":18434},[33],"Microsoft .NET Observability with OpenTelemetry",[29,18437,11256],{"href":18288,"rel":18438},[33],{"title":185,"searchDepth":311,"depth":311,"links":18440},[18441,18442,18443,18444,18445,18450,18451,18452,18453,18454,18455,18456,18457],{"id":17731,"depth":311,"text":17732},{"id":1151,"depth":311,"text":1152},{"id":2080,"depth":311,"text":2081},{"id":17855,"depth":311,"text":17856},{"id":17927,"depth":311,"text":17928,"children":18446},[18447,18448,18449],{"id":17957,"depth":325,"text":17804},{"id":17997,"depth":325,"text":2970},{"id":18022,"depth":325,"text":18023},{"id":18073,"depth":311,"text":18074},{"id":13585,"depth":311,"text":13586},{"id":18183,"depth":311,"text":18184},{"id":4701,"depth":311,"text":4702},{"id":886,"depth":311,"text":887},{"id":906,"depth":311,"text":907},{"id":959,"depth":311,"text":960},{"id":975,"depth":311,"text":976},"Learn what observability means, how metrics, logs and distributed traces work together, how it differs from monitoring, and how to build observable systems.","\u002Fwhat-is-observability.png","image of Observability",{},"\u002Fblog\u002Fen\u002Fwhat-observability",{"title":17726,"description":18458},"blog\u002Fen\u002Fwhat-observability","8uiFq7sA8Hqtb-FYI0PdurpXAfwd2c4-nfL8tBsDM28",{"id":18467,"title":18468,"author":7,"body":18469,"category":4925,"description":19098,"draft":1097,"extension":1098,"featured":1099,"image":19099,"imageAlt":19100,"locale":1102,"meta":19101,"navigation":1099,"path":19102,"publishedAt":19103,"seo":19104,"slug":19105,"stem":19106,"translationKey":19105,"updatedAt":19103,"__hash__":19107},"blog\u002Fblog\u002Fen\u002Fai-overviews-vs-ai-mode.md","AI Overviews vs AI Mode: What Is the Difference?",{"type":9,"value":18470,"toc":19082},[18471,18474,18484,18495,18498,18506,18508,18511,18519,18526,18530,18642,18653,18657,18660,18663,18668,18671,18682,18685,18689,18692,18695,18700,18703,18708,18710,18715,18717,18722,18725,18734,18740,18744,18751,18758,18765,18768,18773,18776,18780,18783,18789,18801,18804,18827,18830,18835,18840,18844,18847,18856,18859,18864,18867,18870,18879,18883,18894,18900,18903,18905,18911,18917,18926,18932,18934,18937,18940,18943,18945,18949,18952,18956,18962,18966,18972,18976,18982,18984,18987,18992,18995,18997],[12,18472,18468],{"id":18473},"ai-overviews-vs-ai-mode-what-is-the-difference",[17,18475,18476,18477,420,18480,18483],{},"Google Search now has two closely related AI experiences: ",[21,18478,18479],{},"AI Overviews",[21,18481,18482],{},"AI Mode",". They use some of the same underlying Search systems, but they are designed for different stages of a search.",[17,18485,18486,18487,18490,18491,18494],{},"An AI Overview is primarily a ",[21,18488,18489],{},"quick AI-generated snapshot inside the normal Google Search results page",". AI Mode is a ",[21,18492,18493],{},"deeper, conversational search experience"," built for questions that require exploration, comparison, reasoning, or follow-up questions. Google has also been connecting the two more closely, so the boundary is becoming less visible to users.",[17,18496,18497],{},"The simplest way to think about it is:",[17,18499,18500,18503],{},[21,18501,18502],{},"AI Overview → understand quickly.",[21,18504,18505],{},"AI Mode → investigate further.",[12,18507,1152],{"id":1151},[17,18509,18510],{},"AI Overviews appear within regular Google Search when Google's systems determine that a generated summary would add value. They give users a concise synthesis plus links to supporting websites.",[17,18512,18513,18514,35],{},"AI Mode is a dedicated AI search experience. It can handle more complex questions, continue conversations through follow-ups, search across multiple subtopics, and accept inputs such as text, voice, images, files, and URLs. (",[29,18515,18518],{"href":18516,"rel":18517},"https:\u002F\u002Fsupport.google.com\u002Fwebsearch\u002Fanswer\u002F16011537?utm_source=chatgpt.com",[33],"support.google.com",[17,18520,18521,18522,35],{},"They are not two completely separate search engines. Both are parts of Google Search, can retrieve information from Google's Search index, can surface links to websites, and may use techniques such as retrieval-augmented generation and query fan-out. (",[29,18523,157],{"href":18524,"rel":18525},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Ffundamentals\u002Fai-optimization-guide",[33],[12,18527,18529],{"id":18528},"key-differences","Key Differences",[69,18531,18532,18542],{},[72,18533,18534],{},[75,18535,18536,18538,18540],{},[78,18537],{},[78,18539,18479],{},[78,18541,18482],{},[85,18543,18544,18554,18565,18576,18587,18598,18609,18620,18631],{},[75,18545,18546,18548,18551],{},[90,18547,12112],{},[90,18549,18550],{},"Quick understanding",[90,18552,18553],{},"Deeper exploration",[75,18555,18556,18559,18562],{},[90,18557,18558],{},"Location",[90,18560,18561],{},"Standard Search results",[90,18563,18564],{},"Dedicated AI search experience",[75,18566,18567,18570,18573],{},[90,18568,18569],{},"Trigger",[90,18571,18572],{},"Google decides when it is useful",[90,18574,18575],{},"User intentionally enters or continues into AI Mode",[75,18577,18578,18581,18584],{},[90,18579,18580],{},"Interaction",[90,18582,18583],{},"Primarily a generated snapshot",[90,18585,18586],{},"Conversational and multi-turn",[75,18588,18589,18592,18595],{},[90,18590,18591],{},"Follow-up questions",[90,18593,18594],{},"Can transition into AI Mode",[90,18596,18597],{},"Core part of the experience",[75,18599,18600,18603,18606],{},[90,18601,18602],{},"Complex comparisons",[90,18604,18605],{},"Possible, but not its main role",[90,18607,18608],{},"Specifically designed for them",[75,18610,18611,18614,18617],{},[90,18612,18613],{},"Inputs",[90,18615,18616],{},"Normal Search interaction",[90,18618,18619],{},"Text, voice, images, files, URLs and other supported inputs",[75,18621,18622,18625,18628],{},[90,18623,18624],{},"Web links",[90,18626,18627],{},"Supporting sources and further reading",[90,18629,18630],{},"Supporting sources throughout the exploration",[75,18632,18633,18636,18639],{},[90,18634,18635],{},"Underlying systems",[90,18637,18638],{},"Search + generative AI",[90,18640,18641],{},"Search + more extensive AI interaction and reasoning",[17,18643,18644,18645,18648,18649,35],{},"Google explicitly says that AI Overviews and AI Mode may use ",[21,18646,18647],{},"different models and techniques",", so the answer and supporting links shown for the same subject do not necessarily match. (",[29,18650,157],{"href":18651,"rel":18652},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fai-features?kgs=aa0bcc3d152ed142",[33],[12,18654,18656],{"id":18655},"what-is-an-ai-overview","What Is an AI Overview?",[17,18658,18659],{},"An AI Overview is an AI-generated summary that can appear near the top of a standard Google Search results page.",[17,18661,18662],{},"For example, someone searching:",[1501,18664,18665],{},[17,18666,18667],{},"why does my website become slow after adding many third-party scripts?",[17,18669,18670],{},"might receive an AI Overview explaining common causes such as additional JavaScript execution, network requests, and main-thread work. The user can still continue through the normal Search results and open individual websites.",[17,18672,18673,18674,18677,18678,35],{},"Google says AI Overviews are intended to help users get the gist of a complicated question quickly and then explore supporting links. They do ",[21,18675,18676],{},"not appear for every query",". Google's systems decide whether the AI-generated response adds enough value beyond normal Search results. (",[29,18679,18518],{"href":18680,"rel":18681},"https:\u002F\u002Fsupport.google.com\u002Fwebsearch\u002Fanswer\u002F14901683?utm_source=chatgpt.com",[33],[17,18683,18684],{},"That distinction matters. AI Overviews are an additional Search result experience, not a replacement that automatically appears whenever somebody searches.",[12,18686,18688],{"id":18687},"what-is-ai-mode","What Is AI Mode?",[17,18690,18691],{},"AI Mode is built for searches that are harder to express as one keyword query.",[17,18693,18694],{},"Instead of searching:",[1501,18696,18697],{},[17,18698,18699],{},"best CDN",[17,18701,18702],{},"then:",[1501,18704,18705],{},[17,18706,18707],{},"CDN for global ecommerce",[17,18709,18702],{},[1501,18711,18712],{},[17,18713,18714],{},"Cloudflare vs Fastly latency",[17,18716,18702],{},[1501,18718,18719],{},[17,18720,18721],{},"which supports image optimization?",[17,18723,18724],{},"a user can ask a detailed question once, receive a synthesized response, and continue with follow-up questions while preserving context.",[17,18726,18727,18728,239,18731,35],{},"Google describes AI Mode as its most powerful AI Search experience. Its systems can break a question into related subtopics, run multiple searches, gather relevant information, and combine the results into a response. Google calls this technique ",[21,18729,18730],{},"query fan-out",[29,18732,18518],{"href":18516,"rel":18733},[33],[17,18735,18736,18737,35],{},"AI Mode also supports richer interaction. Depending on the interface and availability, users can search with text, voice, images, files, webpages, and other contextual inputs. (",[29,18738,18518],{"href":18516,"rel":18739},[33],[12,18741,18743],{"id":18742},"how-they-work-together","How They Work Together",[17,18745,18746,18747,18750],{},"The distinction is becoming increasingly about ",[21,18748,18749],{},"depth of interaction",", rather than two isolated products.",[17,18752,18753,18754,35],{},"In January 2026, Google expanded the ability to continue from an AI Overview directly into AI Mode. The original search context can carry into the conversation instead of forcing the user to start another search. (",[29,18755,10318],{"href":18756,"rel":18757},"https:\u002F\u002Fblog.google\u002Fproducts-and-platforms\u002Fproducts\u002Fsearch\u002Fai-mode-ai-overviews-updates\u002F?utm_source=chatgpt.com",[33],[17,18759,18760,18761,35],{},"Google reinforced this direction at I\u002FO 2026, describing a flow where a user can move from a normal query, to an AI Overview, and then into an AI Mode conversation. (",[29,18762,10318],{"href":18763,"rel":18764},"https:\u002F\u002Fblog.google\u002Finnovation-and-ai\u002Ftechnology\u002Fai\u002Fgoogle-io-2026-all-our-announcements\u002F",[33],[17,18766,18767],{},"A useful mental model is therefore:",[17,18769,18770],{},[21,18771,18772],{},"Search results → AI Overview → deeper AI Mode conversation",[17,18774,18775],{},"The interfaces may continue changing, but the functional difference remains useful: an Overview summarizes; AI Mode explores.",[12,18777,18779],{"id":18778},"what-changes-for-seo","What Changes for SEO?",[17,18781,18782],{},"Less than the terminology might suggest.",[17,18784,18785,18786,35],{},"Google's current Search Central documentation says that the foundational requirements for appearing in AI Overviews and AI Mode remain standard Google Search requirements. A page generally needs to be indexed and eligible to appear in Search with a snippet. Google does not document a separate AI-specific schema requirement. (",[29,18787,157],{"href":18651,"rel":18788},[33],[17,18790,18791,18792,18794,18795,18797,18798,35],{},"Google's July 2026 guidance goes further: from Google's perspective, optimizing for its generative AI search features remains part of ",[21,18793,15504],{},", not a separate technical discipline requiring special markup or an ",[129,18796,4660],{}," file. (",[29,18799,157],{"href":18524,"rel":18800},[33],[17,18802,18803],{},"That means site owners should still prioritize:",[1640,18805,18806,18809,18812,18815,18818,18821,18824],{},[981,18807,18808],{},"crawlability and indexability;",[981,18810,18811],{},"useful internal linking;",[981,18813,18814],{},"clear textual content;",[981,18816,18817],{},"accurate structured data where relevant;",[981,18819,18820],{},"strong page experience;",[981,18822,18823],{},"useful images and video;",[981,18825,18826],{},"original, expert-led, non-commodity content.",[17,18828,18829],{},"There is no documented “AI Mode ranking tag” or “AI Overview schema” that guarantees inclusion.",[17,18831,18832],{},[161,18833,18834],{},"INTERNAL LINK: Does GEO Really Exist? What Google Actually Says",[17,18836,18837],{},[161,18838,18839],{},"INTERNAL LINK: Non-Commodity Content: What It Means for AI Search",[12,18841,18843],{"id":18842},"query-fan-out-matters","Query Fan-Out Matters",[17,18845,18846],{},"One important technical change is that generative Search does not always behave like a single query producing a single ranking.",[17,18848,18849,18850,18852,18853,35],{},"Google documents ",[21,18851,18730],{}," as generating multiple related searches to gather information relevant to different parts of a user's question. Its current documentation says both AI Overviews and AI Mode may use this technique. (",[29,18854,157],{"href":18651,"rel":18855},[33],[17,18857,18858],{},"Suppose someone asks:",[1501,18860,18861],{},[17,18862,18863],{},"Which hosting setup is best for a multilingual ecommerce site serving Europe and Central Asia?",[17,18865,18866],{},"Google may need information about hosting locations, latency, ecommerce requirements, CDN architecture, international SEO, reliability, and other subtopics.",[17,18868,18869],{},"This creates more opportunities for a specialized page to become a supporting source even when it is not the obvious result for the user's exact original wording.",[17,18871,18872,18873,18875,18876,35],{},"It does ",[21,18874,151],{}," mean publishers should create hundreds of pages targeting guessed fan-out queries. Google explicitly warns against scaled pages created primarily to manipulate Search and recommends useful, original content instead. (",[29,18877,157],{"href":18524,"rel":18878},[33],[12,18880,18882],{"id":18881},"measuring-ai-visibility","Measuring AI Visibility",[17,18884,18885,18886,18889,18890,35],{},"Google Search Console now provides a ",[21,18887,18888],{},"Generative AI performance report"," covering impressions from AI Overviews and AI Mode. Google says these insights had rolled out to websites worldwide as of August 31, 2026. (",[29,18891,18518],{"href":18892,"rel":18893},"https:\u002F\u002Fsupport.google.com\u002Fwebmasters\u002Fanswer\u002F16984139?hl=en&utm_source=chatgpt.com",[33],[17,18895,18896,18897,35],{},"There is an important limitation: the documented report groups data by dimensions such as page, country, device, and date. It includes both AI Overviews and AI Mode, but Google does not currently document a dimension that lets publishers cleanly split the report into “AI Overview impressions” versus “AI Mode impressions.” (",[29,18898,18518],{"href":18892,"rel":18899},[33],[17,18901,18902],{},"So a rise in generative AI visibility does not automatically tell you which of the two experiences produced it.",[12,18904,859],{"id":858},[17,18906,18907,18910],{},[21,18908,18909],{},"AI Mode is not simply a longer AI Overview."," It is designed as an interactive search environment with follow-up questions and deeper exploration.",[17,18912,18913,18916],{},[21,18914,18915],{},"AI Overviews are not shown for every search."," Google says they appear when its systems determine that the generative response adds value.",[17,18918,18919,18922,18923,35],{},[21,18920,18921],{},"You do not need separate AI SEO markup."," Google currently documents no special schema or AI file required for inclusion in either feature. (",[29,18924,157],{"href":18651,"rel":18925},[33],[17,18927,18928,18931],{},[21,18929,18930],{},"Neither feature eliminates the web."," Both can surface links to supporting websites, although the way those links are selected and displayed can differ.",[12,18933,887],{"id":886},[17,18935,18936],{},"Do not build separate “AI Overview SEO” and “AI Mode SEO” strategies as though they were independent search engines.",[17,18938,18939],{},"Treat them as different interfaces over an increasingly AI-assisted Google Search system. Make important content crawlable and indexable, answer the real user problem clearly, provide evidence where appropriate, and add information that generic summaries cannot easily replace: firsthand experience, original testing, data, expert analysis, tools, examples, and useful visual material.",[17,18941,18942],{},"Then measure generative AI visibility in Search Console rather than relying on third-party claims about undocumented “AI rankings.”",[12,18944,907],{"id":906},[909,18946,18948],{"id":18947},"is-ai-mode-replacing-ai-overviews","Is AI Mode replacing AI Overviews?",[17,18950,18951],{},"Google has not announced that AI Mode simply replaces AI Overviews. Instead, the company is making the transition between the two increasingly seamless. AI Overviews can provide the initial snapshot, while AI Mode supports deeper conversation.",[909,18953,18955],{"id":18954},"can-the-same-page-appear-in-both","Can the same page appear in both?",[17,18957,18958,18959,35],{},"Yes. Google applies the same fundamental Search eligibility requirements to supporting links in both AI Overviews and AI Mode. However, appearing in one does not guarantee appearing in the other. (",[29,18960,157],{"href":18651,"rel":18961},[33],[909,18963,18965],{"id":18964},"does-ai-mode-use-different-rankings","Does AI Mode use different rankings?",[17,18967,18968,18969,35],{},"Google says AI Overviews and AI Mode may use different models and techniques, and therefore can show different responses and links. Google has not publicly documented enough detail to describe a separate complete “AI Mode ranking algorithm.” (",[29,18970,157],{"href":18651,"rel":18971},[33],[909,18973,18975],{"id":18974},"do-i-need-geo-for-ai-mode","Do I need GEO for AI Mode?",[17,18977,18978,18979,35],{},"You may use GEO as an industry term, but Google currently frames optimization for its own generative AI Search experiences as part of SEO. The company recommends normal technical SEO plus useful, original, people-first content rather than special AI-search hacks. (",[29,18980,157],{"href":18524,"rel":18981},[33],[12,18983,960],{"id":959},[17,18985,18986],{},"AI Overviews and AI Mode solve different depths of the same search problem.",[17,18988,18989],{},[21,18990,18991],{},"AI Overviews help users understand something quickly inside normal Search. AI Mode helps them continue investigating through a richer, conversational experience.",[17,18993,18994],{},"For publishers, the more important insight is that Google currently connects both experiences to its broader Search infrastructure. The interface is changing faster than the underlying SEO fundamentals: accessible pages, strong technical foundations, useful content, original information, and clear evidence remain the practical foundation for visibility.",[12,18996,976],{"id":975},[1640,18998,18999,19009,19018,19028,19039,19049,19060,19071],{},[981,19000,19001,19002,1057,19005],{},"Google Search Help — ",[1625,19003,19004],{},"Find information in faster & easier ways with AI Overviews in Google Search",[29,19006,19008],{"href":18680,"rel":19007},[33],"Google AI Overviews Help",[981,19010,19001,19011,1057,19014],{},[1625,19012,19013],{},"Get AI-powered responses with AI Mode in Google Search",[29,19015,19017],{"href":18516,"rel":19016},[33],"Google AI Mode Help",[981,19019,1023,19020,1057,19023],{},[1625,19021,19022],{},"AI features and your website",[29,19024,19027],{"href":19025,"rel":19026},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fai-features?utm_source=chatgpt.com",[33],"Google Search Central AI Features documentation",[981,19029,1023,19030,19033,19034],{},[1625,19031,19032],{},"Optimizing your website for generative AI features on Google Search",", updated July 10, 2026. ",[29,19035,19038],{"href":19036,"rel":19037},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Ffundamentals\u002Fai-optimization-guide?utm_source=chatgpt.com",[33],"Google generative AI optimization guide",[981,19040,18414,19041,19044,19045],{},[1625,19042,19043],{},"Just ask anything: a seamless new Search experience",", January 27, 2026. ",[29,19046,19048],{"href":18756,"rel":19047},[33],"Google AI Search update",[981,19050,18414,19051,19054,19055],{},[1625,19052,19053],{},"100 things we announced at Google I\u002FO 2026",", May 19, 2026. ",[29,19056,19059],{"href":19057,"rel":19058},"https:\u002F\u002Fblog.google\u002Finnovation-and-ai\u002Ftechnology\u002Fai\u002Fgoogle-io-2026-all-our-announcements\u002F?utm_source=chatgpt.com",[33],"Google I\u002FO 2026 announcements",[981,19061,1023,19062,19065,19066],{},[1625,19063,19064],{},"Introducing Search Generative AI performance reports in Search Console",", June 3, 2026. ",[29,19067,19070],{"href":19068,"rel":19069},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fblog\u002F2026\u002F06\u002Fgen-ai-performance-reports?utm_source=chatgpt.com",[33],"Search Generative AI performance announcement",[981,19072,19073,19074,1057,19077],{},"Google Search Console Help — ",[1625,19075,19076],{},"Generative AI performance report (Search)",[29,19078,19081],{"href":19079,"rel":19080},"https:\u002F\u002Fsupport.google.com\u002Fwebmasters\u002Fanswer\u002F16984139?utm_source=chatgpt.com",[33],"Generative AI performance report documentation",{"title":185,"searchDepth":311,"depth":311,"links":19083},[19084,19085,19086,19087,19088,19089,19090,19091,19092,19093,19094,19095,19096,19097],{"id":18473,"depth":311,"text":18468},{"id":1151,"depth":311,"text":1152},{"id":18528,"depth":311,"text":18529},{"id":18655,"depth":311,"text":18656},{"id":18687,"depth":311,"text":18688},{"id":18742,"depth":311,"text":18743},{"id":18778,"depth":311,"text":18779},{"id":18842,"depth":311,"text":18843},{"id":18881,"depth":311,"text":18882},{"id":858,"depth":311,"text":859},{"id":886,"depth":311,"text":887},{"id":906,"depth":311,"text":907},{"id":959,"depth":311,"text":960},{"id":975,"depth":311,"text":976},"Learn the difference between Google AI Overviews and AI Mode, how each works, how they connect, and what the distinction means for SEO in 2026.","\u002Fai-overviews-ai-mode.png","Image of AI overviews and mode",{},"\u002Fblog\u002Fen\u002Fai-overviews-vs-ai-mode","2026-09-11",{"title":18468,"description":19098},"ai-overviews-vs-ai-mode","blog\u002Fen\u002Fai-overviews-vs-ai-mode","ssoXFIyWqsFfSl3x5BPP_-eXDoUiLSGCK5p8OIu52S8",{"id":19109,"title":19110,"author":7,"body":19111,"category":4925,"description":19650,"draft":1097,"extension":1098,"featured":1099,"image":19651,"imageAlt":19652,"locale":1102,"meta":19653,"navigation":1099,"path":19654,"publishedAt":19103,"seo":19655,"slug":19656,"stem":19657,"translationKey":19115,"updatedAt":19103,"__hash__":19658},"blog\u002Fblog\u002Fen\u002Fchatgpt-search.md","What Is ChatGPT Search? How It Works in 2026",{"type":9,"value":19112,"toc":19635},[19113,19117,19120,19127,19129,19135,19142,19144,19206,19211,19215,19218,19223,19226,19232,19235,19241,19244,19249,19252,19259,19263,19266,19320,19323,19328,19330,19335,19338,19343,19347,19350,19356,19362,19365,19370,19374,19380,19386,19389,19413,19421,19432,19437,19441,19444,19451,19457,19461,19464,19467,19470,19473,19477,19479,19485,19488,19491,19494,19496,19500,19506,19510,19513,19517,19523,19527,19533,19537,19543,19545,19548,19551,19553,19633],[12,19114,19116],{"id":19115},"what-is-chatgpt-search","What Is ChatGPT Search?",[17,19118,19119],{},"ChatGPT can answer from what a model has learned, but some questions depend on information that changes: today’s news, current product details, local businesses, recent research, prices, schedules, or newly published web pages. ChatGPT Search is designed for that gap.",[17,19121,19122,19123,35],{},"Instead of forcing the user to leave the conversation, open a search engine, inspect several pages, and bring the information back, ChatGPT can search the web inside the conversation, synthesize what it finds, and provide links to supporting sources. OpenAI introduced ChatGPT Search on October 31, 2024, after testing a temporary SearchGPT prototype earlier that year. (",[29,19124,4791],{"href":19125,"rel":19126},"https:\u002F\u002Fopenai.com\u002Findex\u002Fintroducing-chatgpt-search\u002F?utm_source=chatgpt.com",[33],[12,19128,1152],{"id":1151},[17,19130,19131,19134],{},[21,19132,19133],{},"ChatGPT Search is ChatGPT’s web-search capability."," It lets ChatGPT retrieve current information from the web, combine relevant findings into a conversational answer, and provide citations or source links that users can inspect.",[17,19136,19137,19138,35],{},"ChatGPT may decide automatically that a question would benefit from web information, or the user can explicitly select Search. As of September 2026, OpenAI says web search is available across its Free, Go, Plus, Pro, Business, Enterprise, and Edu plans, as well as to people who are not signed in. (",[29,19139,4122],{"href":19140,"rel":19141},"https:\u002F\u002Fhelp.openai.com\u002Fen\u002Farticles\u002F9237897-chatgp?utm_source=chatgpt.com",[33],[12,19143,2081],{"id":2080},[69,19145,19146,19154],{},[72,19147,19148],{},[75,19149,19150,19152],{},[78,19151,12094],{},[78,19153,12097],{},[85,19155,19156,19164,19172,19180,19188,19198],{},[75,19157,19158,19161],{},[90,19159,19160],{},"Does it search the live web?",[90,19162,19163],{},"It can retrieve current web information when search is used.",[75,19165,19166,19169],{},[90,19167,19168],{},"Does every ChatGPT answer use search?",[90,19170,19171],{},"No. ChatGPT may search automatically when useful, or the user can select Search.",[75,19173,19174,19177],{},[90,19175,19176],{},"Does it provide sources?",[90,19178,19179],{},"Search answers can include citations and a Sources panel.",[75,19181,19182,19185],{},[90,19183,19184],{},"Can it rewrite your query?",[90,19186,19187],{},"Yes. OpenAI documents that one prompt may become one or more targeted search queries.",[75,19189,19190,19193],{},[90,19191,19192],{},"Can websites control access?",[90,19194,19195,19196,174],{},"Yes. OAI-SearchBot can be controlled through ",[129,19197,1454],{},[75,19199,19200,19203],{},[90,19201,19202],{},"Is search crawling the same as AI training?",[90,19204,19205],{},"No. OpenAI provides separate controls for OAI-SearchBot and GPTBot.",[17,19207,573,19208,35],{},[29,19209,4122],{"href":4825,"rel":19210},[33],[12,19212,19214],{"id":19213},"how-chatgpt-search-works","How ChatGPT Search Works",[17,19216,19217],{},"The simplest mental model is:",[17,19219,19220],{},[21,19221,19222],{},"question → search queries → web sources → synthesis → cited answer",[17,19224,19225],{},"The real process can be more flexible.",[17,19227,19228,19229,35],{},"When web information would improve an answer, ChatGPT can initiate a search. OpenAI says ChatGPT Search may rewrite the user’s original request into one or more more targeted queries for search providers. After examining initial results, it can issue additional, more specific searches. (",[29,19230,4122],{"href":4825,"rel":19231},[33],[17,19233,19234],{},"For example, a person does not necessarily need to formulate a traditional keyword query such as:",[179,19236,19239],{"className":19237,"code":19238,"language":184,"meta":185},[182],"best technical seo tools enterprise 2026\n",[129,19240,19238],{"__ignoreMap":185},[17,19242,19243],{},"They could instead ask:",[1501,19245,19246],{},[17,19247,19248],{},"Which technical SEO tools are best for a 500,000-page ecommerce site, and what are the main trade-offs?",[17,19250,19251],{},"Search can gather relevant web information while ChatGPT handles the conversational interpretation and synthesis.",[17,19253,19254,19255,35],{},"OpenAI also says approximate location derived from an IP address can help with local searches. If device-location sharing is enabled, more precise location can be used. Relevant Memory information may also influence how a prompt is rewritten into a search query. OpenAI states that the IP address itself and ChatGPT account information are not sent to third-party search providers merely to run the search. (",[29,19256,4122],{"href":19257,"rel":19258},"https:\u002F\u002Fhelp.openai.com\u002Fen\u002Farticles\u002F9237897-connectors-in-chatgpt?utm_source=chatgpt.com",[33],[12,19260,19262],{"id":19261},"search-vs-traditional-search","Search vs Traditional Search",[17,19264,19265],{},"The difference is not simply that one interface has AI.",[69,19267,19268,19278],{},[72,19269,19270],{},[75,19271,19272,19275],{},[78,19273,19274],{},"Traditional search",[78,19276,19277],{},"ChatGPT Search",[85,19279,19280,19288,19296,19304,19312],{},[75,19281,19282,19285],{},[90,19283,19284],{},"Usually returns a ranked results page",[90,19286,19287],{},"Often produces a synthesized answer",[75,19289,19290,19293],{},[90,19291,19292],{},"User interprets several results manually",[90,19294,19295],{},"ChatGPT can combine information from several sources",[75,19297,19298,19301],{},[90,19299,19300],{},"New query usually starts another search",[90,19302,19303],{},"Follow-up questions can remain conversational",[75,19305,19306,19309],{},[90,19307,19308],{},"Links are the primary output",[90,19310,19311],{},"Answer and supporting links can appear together",[75,19313,19314,19317],{},[90,19315,19316],{},"User performs most of the synthesis",[90,19318,19319],{},"The model performs part of the synthesis",[17,19321,19322],{},"This changes the user journey from roughly:",[17,19324,19325],{},[21,19326,19327],{},"search → inspect results → open pages → compare information → form answer",[17,19329,5949],{},[17,19331,19332],{},[21,19333,19334],{},"ask → retrieve sources → receive synthesis → verify or continue",[17,19336,19337],{},"That can reduce search effort, but it also introduces an important responsibility: the synthesized answer itself must be checked when accuracy matters.",[17,19339,19340],{},[161,19341,19342],{},"INTERNAL LINK: AI Search vs Traditional Search: How the User Journey Changes",[12,19344,19346],{"id":19345},"sources-still-matter","Sources Still Matter",[17,19348,19349],{},"ChatGPT Search does not make source quality irrelevant. It makes source verification more important.",[17,19351,19352,19353,35],{},"Search responses can contain inline citations, and users can open the cited pages or inspect additional links through the Sources interface. OpenAI explicitly warns that search results and citations can still be incomplete, outdated, or incorrect and recommends checking authoritative sources for important information. (",[29,19354,4122],{"href":4825,"rel":19355},[33],[17,19357,19358,19359],{},"A citation therefore means ",[21,19360,19361],{},"“this source was presented in support of the answer,” not “this statement is automatically correct.”",[17,19363,19364],{},"For medical, financial, legal, scientific, security, or other high-impact decisions, the sensible workflow remains:",[17,19366,19367],{},[21,19368,19369],{},"answer → inspect evidence → confirm the original source → decide",[12,19371,19373],{"id":19372},"what-it-means-for-websites","What It Means for Websites",[17,19375,19376,19377],{},"For publishers and SEO teams, one distinction is especially important: ",[21,19378,19379],{},"OAI-SearchBot and GPTBot have different purposes.",[17,19381,19382,19383,35],{},"OpenAI documents OAI-SearchBot as the crawler used to surface websites in ChatGPT search features. GPTBot, by contrast, is associated with crawling content that may be used to improve OpenAI’s generative AI foundation models. These controls are independent, so a publisher can allow OAI-SearchBot for search visibility while blocking GPTBot for training-related crawling. (",[29,19384,11443],{"href":12055,"rel":19385},[33],[17,19387,19388],{},"A basic configuration could therefore look like:",[179,19390,19391],{"className":1460,"code":4299,"language":1462,"meta":185,"style":185},[129,19392,19393,19397,19401,19405,19409],{"__ignoreMap":185},[161,19394,19395],{"class":299,"line":300},[161,19396,4288],{},[161,19398,19399],{"class":299,"line":311},[161,19400,4293],{},[161,19402,19403],{"class":299,"line":325},[161,19404,3024],{"emptyLinePlaceholder":1099},[161,19406,19407],{"class":299,"line":336},[161,19408,4318],{},[161,19410,19411],{"class":299,"line":347},[161,19412,4323],{},[17,19414,12183,19415,19417,19418,35],{},[21,19416,151],{}," guarantee visibility or a particular position. OpenAI says ChatGPT Search ranking uses multiple factors intended to surface relevant, reliable information and that top placement cannot be guaranteed. (",[29,19419,4122],{"href":19140,"rel":19420},[33],[17,19422,19423,19424,19427,19428,35],{},"OpenAI also says publishers permitting OAI-SearchBot can identify referral visits because ChatGPT adds ",[129,19425,19426],{},"utm_source=chatgpt.com"," to referral URLs. (",[29,19429,4122],{"href":19430,"rel":19431},"https:\u002F\u002Fhelp.openai.com\u002Fen\u002Farticles\u002F12627856-publishers-and-developers-faq%23%3A~%3Atext%3DChatGPT%20automatically%20includes%20the%20UTM%20parameter%20utm_source%3Dchatgpt.com%20in%20referral%20URLs%2C%20enabling%20clear%20tracking%20and%20analysis%20of%20inbound%20traffic%20from%20ChatGPT%20search%20results?utm_source=chatgpt.com",[33],[17,19433,19434],{},[161,19435,19436],{},"INTERNAL LINK: How AI Crawlers Access Your Website",[12,19438,19440],{"id":19439},"searchgpt-vs-chatgpt-search","SearchGPT vs ChatGPT Search",[17,19442,19443],{},"SearchGPT was not a separate permanent search engine.",[17,19445,19446,19447,35],{},"OpenAI launched SearchGPT on July 25, 2024 as a temporary prototype for testing AI search features with a limited group of users and publishers. OpenAI explicitly said it planned to integrate the best parts of that experience into ChatGPT. ChatGPT Search followed on October 31, 2024. (",[29,19448,4791],{"href":19449,"rel":19450},"https:\u002F\u002Fopenai.com\u002Findex\u002Fsearchgpt-prototype\u002F?utm_source=chatgpt.com",[33],[17,19452,19453,19454,19456],{},"So today, when discussing OpenAI’s consumer web-search experience, ",[21,19455,19277],{}," is the more relevant term.",[12,19458,19460],{"id":19459},"what-we-do-not-know","What We Do Not Know",[17,19462,19463],{},"Not every part of ChatGPT Search is publicly documented.",[17,19465,19466],{},"OpenAI explains important pieces such as query rewriting, search-provider use, citations, crawler controls, and location handling. It does not publicly document a complete ranking algorithm or every weighting signal used to decide which pages become sources.",[17,19468,19469],{},"It would therefore be inaccurate to claim that a specific schema type, content format, word count, backlink threshold, or “GEO tactic” guarantees a citation in ChatGPT.",[17,19471,19472],{},"Available evidence supports improving discoverability and technical access. It does not support a formula for guaranteed ChatGPT Search rankings.",[17,19474,19475],{},[161,19476,18834],{},[12,19478,887],{"id":886},[17,19480,19481,19482,174],{},"Treat ChatGPT Search as both a ",[21,19483,19484],{},"search system and an answer interface",[17,19486,19487],{},"For users, take advantage of natural-language questions and follow-ups, but inspect important citations instead of assuming the synthesized answer is authoritative.",[17,19489,19490],{},"For publishers, start with fundamentals: make valuable public content technically accessible to OAI-SearchBot, avoid accidentally blocking its published IP ranges, publish information that genuinely answers user questions, make important claims easy to verify, and measure actual ChatGPT referral traffic.",[17,19492,19493],{},"Do not replace sound SEO and publishing practices with unverified “AI ranking hacks.” OpenAI has not published enough information to justify them.",[12,19495,907],{"id":906},[909,19497,19499],{"id":19498},"does-chatgpt-always-search-the-web","Does ChatGPT always search the web?",[17,19501,19502,19503,35],{},"No. ChatGPT can search automatically when a question would benefit from current web information, and users can also choose Search manually. (",[29,19504,4122],{"href":19140,"rel":19505},[33],[909,19507,19509],{"id":19508},"is-chatgpt-search-a-search-engine","Is ChatGPT Search a search engine?",[17,19511,19512],{},"Functionally, it provides a web-search experience, but its interface differs from a conventional search-results page. It combines retrieval with a language model that synthesizes an answer and can continue the discussion conversationally.",[909,19514,19516],{"id":19515},"does-chatgpt-search-use-only-openais-crawler","Does ChatGPT Search use only OpenAI’s crawler?",[17,19518,19519,19520,35],{},"No. OpenAI says ChatGPT Search can use third-party search providers as well as other available web information. OAI-SearchBot is specifically used to help surface websites in ChatGPT search features. (",[29,19521,4791],{"href":19125,"rel":19522},[33],[909,19524,19526],{"id":19525},"does-allowing-oai-searchbot-allow-ai-training","Does allowing OAI-SearchBot allow AI training?",[17,19528,19529,19530,35],{},"Not by itself. OpenAI documents OAI-SearchBot and GPTBot as separate controls. A site can allow search crawling while disallowing GPTBot. (",[29,19531,11443],{"href":12055,"rel":19532},[33],[909,19534,19536],{"id":19535},"can-chatgpt-search-give-incorrect-information","Can ChatGPT Search give incorrect information?",[17,19538,19539,19540,35],{},"Yes. OpenAI warns that search results, citations, and ChatGPT answers can contain errors. Important claims should still be checked against reliable original sources. (",[29,19541,4122],{"href":4825,"rel":19542},[33],[12,19544,960],{"id":959},[17,19546,19547],{},"ChatGPT Search adds live web retrieval to a conversational AI interface. Its important shift is not simply that ChatGPT can find websites; it can search, reformulate queries, combine information, answer directly, cite sources, and continue reasoning about the result in the same conversation.",[17,19549,19550],{},"That makes web search faster for many questions, but it does not remove the need for reliable sources. For users, verification still matters. For publishers, crawlability, useful content, clear evidence, and genuine relevance matter more than attempts to reverse-engineer an undocumented ranking formula.",[12,19552,976],{"id":975},[978,19554,19555,19568,19581,19594,19606,19619],{},[981,19556,19557,19560,19561,749,19565,35],{},[21,19558,19559],{},"OpenAI Help Center — “Searching the web with ChatGPT.”"," Current documentation, accessed September 11, 2026. ",[29,19562,19564],{"href":4825,"rel":19563},[33],"OpenAI Help Center: Searching the web with ChatGPT",[29,19566,4122],{"href":19140,"rel":19567},[33],[981,19569,19570,19573,19574,749,19578,35],{},[21,19571,19572],{},"OpenAI — “Introducing ChatGPT search.”"," October 31, 2024; page includes subsequent availability updates. ",[29,19575,19577],{"href":19125,"rel":19576},[33],"OpenAI: Introducing ChatGPT search",[29,19579,4791],{"href":19125,"rel":19580},[33],[981,19582,19583,19586,19587,749,19591,35],{},[21,19584,19585],{},"OpenAI — “SearchGPT Prototype.”"," July 25, 2024. ",[29,19588,19590],{"href":19449,"rel":19589},[33],"OpenAI: SearchGPT Prototype",[29,19592,4791],{"href":19449,"rel":19593},[33],[981,19595,19596,19560,19599,749,19603,35],{},[21,19597,19598],{},"OpenAI Developers — “Overview of OpenAI Crawlers.”",[29,19600,19602],{"href":4839,"rel":19601},[33],"OpenAI Developers: Overview of OpenAI Crawlers",[29,19604,11443],{"href":12055,"rel":19605},[33],[981,19607,19608,19611,19612,749,19616,35],{},[21,19609,19610],{},"OpenAI Help Center — “Publishers and Developers – FAQ.”"," Current publisher guidance, accessed September 11, 2026. ",[29,19613,19615],{"href":12179,"rel":19614},[33],"OpenAI: Publishers and Developers FAQ",[29,19617,4122],{"href":19430,"rel":19618},[33],[981,19620,19621,19624,19625,749,19630,35],{},[21,19622,19623],{},"OpenAI Help Center — “Does ChatGPT tell the truth?”"," Current guidance on factual reliability and web search, accessed September 11, 2026. ",[29,19626,19629],{"href":19627,"rel":19628},"https:\u002F\u002Fhelp.openai.com\u002Fen\u002Farticles\u002F8313428?utm_source=chatgpt.com",[33],"OpenAI: Does ChatGPT tell the truth?",[29,19631,4122],{"href":19627,"rel":19632},[33],[1067,19634,10275],{},{"title":185,"searchDepth":311,"depth":311,"links":19636},[19637,19638,19639,19640,19641,19642,19643,19644,19645,19646,19647,19648,19649],{"id":19115,"depth":311,"text":19116},{"id":1151,"depth":311,"text":1152},{"id":2080,"depth":311,"text":2081},{"id":19213,"depth":311,"text":19214},{"id":19261,"depth":311,"text":19262},{"id":19345,"depth":311,"text":19346},{"id":19372,"depth":311,"text":19373},{"id":19439,"depth":311,"text":19440},{"id":19459,"depth":311,"text":19460},{"id":886,"depth":311,"text":887},{"id":906,"depth":311,"text":907},{"id":959,"depth":311,"text":960},{"id":975,"depth":311,"text":976},"Learn what ChatGPT Search is, how it searches the web, uses citations and OAI-SearchBot, and how it differs from traditional search.","\u002Fchatgpt-search.png","Image of ChatGpt search",{},"\u002Fblog\u002Fen\u002Fchatgpt-search",{"title":19110,"description":19650},"chatgpt-search","blog\u002Fen\u002Fchatgpt-search","ilkl0Hdx123lPNkhUWxCTdJ44iii75TiwZJj2aftnvo",{"id":19660,"title":19661,"author":7,"body":19662,"category":4925,"description":20101,"draft":1097,"extension":1098,"featured":1099,"image":20102,"imageAlt":20103,"locale":1102,"meta":20104,"navigation":1099,"path":20105,"publishedAt":19103,"seo":20106,"slug":20107,"stem":20108,"translationKey":20107,"updatedAt":19103,"__hash__":20109},"blog\u002Fblog\u002Fen\u002Fguide-ai-search.md","How Google Says Websites Can Succeed in Generative AI Search",{"type":9,"value":19663,"toc":20087},[19664,19667,19673,19676,19680,19686,19689,19692,19696,19699,19706,19712,19715,19720,19723,19726,19731,19735,19741,19744,19747,19750,19770,19773,19776,19782,19786,19790,19793,19796,19799,19831,19838,19841,19845,19848,19854,19883,19889,19892,19902,19906,19910,19913,19920,19923,19940,19943,19946,19950,19957,19960,19963,19965,19968,19971,19974,19977,19982,19984,19988,19991,19995,20001,20005,20008,20012,20015,20017,20020,20023,20026,20028],[12,19665,19661],{"id":19666},"how-google-says-websites-can-succeed-in-generative-ai-search",[17,19668,19669,19670,19672],{},"Generative AI has changed how Google presents information, but Google’s advice to website owners is less radical than many SEO discussions suggest. According to Google Search Central, succeeding in AI Overviews and AI Mode does ",[21,19671,151],{}," require a separate optimization system, special AI markup, or a new kind of website.",[17,19674,19675],{},"Google’s current position is that generative AI Search is still built on the foundations of Google Search. Strong technical SEO, crawlable and indexable pages, useful content, and genuine original value remain the priorities. In 2026, Google went further by explicitly addressing several popular GEO and AEO tactics—and saying many of them are unnecessary.",[12,19677,19679],{"id":19678},"the-direct-answer","The Direct Answer",[17,19681,19682,19683,174],{},"Google says websites should approach generative AI Search by continuing to follow solid SEO practices while creating ",[21,19684,19685],{},"unique, valuable, non-commodity content for people",[17,19687,19688],{},"AI Overviews and AI Mode use Google’s Search index and core ranking and quality systems to find supporting information. A page therefore needs to be discoverable, crawlable, indexed, and eligible to appear in Google Search before it can become a supporting source in these AI experiences.",[17,19690,19691],{},"There is no special requirement to create an “AI-optimized” version of the site.",[12,19693,19695],{"id":19694},"seo-still-matters","SEO Still Matters",[17,19697,19698],{},"Google explicitly says SEO remains relevant to generative AI Search.",[17,19700,19701,19702,19705],{},"One reason is ",[21,19703,19704],{},"retrieval-augmented generation (RAG)",". In simplified terms, Google can retrieve relevant and up-to-date pages from its Search index and use information from those pages to ground an AI-generated response. The response can then include clickable links to supporting websites.",[17,19707,19708,19709,19711],{},"AI Mode and AI Overviews may also use ",[21,19710,18730],{},". Instead of processing only the exact query a person entered, the system can generate several related searches across subtopics.",[17,19713,19714],{},"For example, a question such as:",[1501,19716,19717],{},[17,19718,19719],{},"“How do I fix a lawn full of weeds?”",[17,19721,19722],{},"could lead the system to explore related questions about herbicides, chemical-free removal methods, and preventing weeds from returning.",[17,19724,19725],{},"This has an important implication: pages do not need to repeat every possible long-tail query word-for-word. Google says its systems can understand meaning and relevance even when a page does not exactly match the wording of the search.",[17,19727,19728],{},[161,19729,19730],{},"INTERNAL LINK: Google AI Mode: How It Works",[12,19732,19734],{"id":19733},"create-non-commodity-content","Create Non-Commodity Content",[17,19736,19737,19738,174],{},"Perhaps the strongest theme in Google’s current guidance is ",[21,19739,19740],{},"non-commodity content",[17,19742,19743],{},"Commodity content is information that could come from almost anywhere: another article, a generic summary, or increasingly, a generative AI model.",[17,19745,19746],{},"Google gives examples that contrast common advice with content based on genuine experience. The point is not that standard informational articles cannot perform. It is that distinctive knowledge gives Google—and readers—a reason to value one source over dozens of similar pages.",[17,19748,19749],{},"Useful differentiation can come from:",[1640,19751,19752,19755,19758,19761,19764,19767],{},[981,19753,19754],{},"first-hand experience;",[981,19756,19757],{},"original research or measurements;",[981,19759,19760],{},"expert analysis;",[981,19762,19763],{},"unique data;",[981,19765,19766],{},"real examples and case studies;",[981,19768,19769],{},"observations that are difficult to reproduce by simply summarizing existing pages.",[17,19771,19772],{},"This aligns with Google’s broader people-first content guidance, which asks whether content contains original information, research or analysis and whether it demonstrates first-hand expertise and meaningful depth.",[17,19774,19775],{},"The practical question is therefore not simply, “Can AI understand this page?”",[17,19777,19778,19779],{},"A better question is, ",[21,19780,19781],{},"“Does this page contribute something worth retrieving?”",[17,19783,19784],{},[161,19785,18839],{},[12,19787,19789],{"id":19788},"keep-technical-seo-clear","Keep Technical SEO Clear",[17,19791,19792],{},"Content quality cannot help if Google cannot properly access the page.",[17,19794,19795],{},"Google says a page must meet Search’s technical requirements, be indexed, and be eligible to appear with a snippet to qualify for generative AI Search visibility. Meeting those conditions does not guarantee selection, indexing, or visibility.",[17,19797,19798],{},"The familiar technical fundamentals still apply:",[1640,19800,19801,19804,19810,19813,19816,19819,19822,19825,19828],{},[981,19802,19803],{},"allow appropriate crawling;",[981,19805,19806,19807,19809],{},"avoid accidentally blocking Googlebot through ",[129,19808,1454],{},", a CDN, or hosting configuration;",[981,19811,19812],{},"make important content accessible to Google;",[981,19814,19815],{},"use sensible internal linking;",[981,19817,19818],{},"follow JavaScript SEO practices when content depends on JavaScript;",[981,19820,19821],{},"provide a good experience across devices;",[981,19823,19824],{},"reduce unnecessary duplicate URLs;",[981,19826,19827],{},"make important information available as text;",[981,19829,19830],{},"use relevant high-quality images and video where useful.",[17,19832,19833,19834,19837],{},"Structured data still has value for supported Search features, but Google says there is ",[21,19835,19836],{},"no special schema.org markup required for generative AI Search",". Structured data should also match what users can actually see on the page.",[17,19839,19840],{},"For ecommerce and local businesses, Google additionally points website owners toward accurate Merchant Center feeds and Google Business Profile information where relevant.",[12,19842,19844],{"id":19843},"geo-hacks-you-can-ignore","GEO Hacks You Can Ignore",[17,19846,19847],{},"Google’s 2026 documentation directly addresses several common AI-search recommendations.",[17,19849,19850,19851,19853],{},"For Google Search, you do ",[21,19852,151],{}," need:",[1640,19855,19856,19862,19865,19868,19871,19874,19877,19880],{},[981,19857,19858,19859,19861],{},"an ",[129,19860,4660],{}," file;",[981,19863,19864],{},"special AI-specific machine-readable markup;",[981,19866,19867],{},"special Markdown copies of pages;",[981,19869,19870],{},"tiny content “chunks” created specifically for AI;",[981,19872,19873],{},"rewritten pages designed only for AI systems;",[981,19875,19876],{},"every imaginable long-tail query variation;",[981,19878,19879],{},"artificial mentions across third-party websites;",[981,19881,19882],{},"special generative-AI schema markup.",[17,19884,19885,19886,19888],{},"Google says ",[129,19887,4660],{},", for example, neither helps nor harms Google Search visibility because Google Search does not use it. Other AI systems may choose to support such files, so this conclusion is specific to Google Search.",[17,19890,19891],{},"This distinction matters. Something marketed as a general “GEO best practice” is not automatically a Google requirement.",[17,19893,19894,19895,420,19898,19901],{},"Google acknowledges the terms ",[21,19896,19897],{},"AEO",[21,19899,19900],{},"GEO",", but from Google Search’s perspective, optimization for its generative AI experiences remains part of SEO.",[17,19903,19904],{},[161,19905,18834],{},[12,19907,19909],{"id":19908},"measure-ai-visibility","Measure AI Visibility",[17,19911,19912],{},"Measurement has also changed.",[17,19914,19915,19916,19919],{},"Google introduced dedicated Search Console generative AI performance reports in June 2026 and states that, as of ",[21,19917,19918],{},"August 31, 2026",", these insights had rolled out to all websites worldwide.",[17,19921,19922],{},"The reports can show:",[1640,19924,19925,19928,19931,19934,19937],{},[981,19926,19927],{},"impressions in generative AI features;",[981,19929,19930],{},"pages that appeared;",[981,19932,19933],{},"visibility by country;",[981,19935,19936],{},"device data for Search;",[981,19938,19939],{},"performance over time.",[17,19941,19942],{},"This gives site owners a better way to evaluate actual AI Search visibility instead of depending entirely on manual searches or third-party visibility estimates. Google also warns that external tools do not have access to its internal ranking or AI systems.",[17,19944,19945],{},"Conversions still matter too. An AI visibility impression has limited business value if visitors do not subscribe, purchase, contact the company, or otherwise complete the intended goal.",[12,19947,19949],{"id":19948},"build-an-audience-too","Build an Audience Too",[17,19951,19952,19953,19956],{},"A newer development is Google’s ",[21,19954,19955],{},"Preferred Sources"," feature.",[17,19958,19959],{},"Users can select publications they want to see more prominently. When a user chooses a website as a preferred source, Google says that site can receive a preferred badge in AI Mode and AI Overviews where those features are available.",[17,19961,19962],{},"That does not replace SEO. It highlights another important principle: building an audience that deliberately values your website can become increasingly meaningful as Search becomes more personalized.",[12,19964,887],{"id":886},[17,19966,19967],{},"Treat Google’s generative AI Search as an expansion of Search, not as permission to abandon SEO and chase a new collection of hacks.",[17,19969,19970],{},"First make the website technically reliable and indexable. Then concentrate editorial effort on information competitors and generic AI summaries cannot easily reproduce: expertise, evidence, experience, useful datasets, clear explanations, strong visuals, and genuine analysis.",[17,19972,19973],{},"Use Google’s new Search Console reports to measure whether those pages actually appear in generative AI experiences.",[17,19975,19976],{},"The strongest AI Search strategy is therefore surprisingly familiar:",[17,19978,19979],{},[21,19980,19981],{},"make information easy for Google to retrieve, but valuable enough that it is worth retrieving.",[12,19983,907],{"id":906},[909,19985,19987],{"id":19986},"does-google-require-geo","Does Google require GEO?",[17,19989,19990],{},"No. Google recognizes GEO as a term used by the industry, but says optimizing for generative AI features in Google Search is still SEO from its perspective.",[909,19992,19994],{"id":19993},"do-i-need-llmstxt","Do I need llms.txt?",[17,19996,19997,19998,20000],{},"Not for Google Search. Google states that Search ignores ",[129,19999,4660],{},"; creating one neither improves nor damages Google Search visibility. Other services may have different requirements.",[909,20002,20004],{"id":20003},"is-special-ai-schema-required","Is special AI schema required?",[17,20006,20007],{},"No. Google says there is no special schema.org structured data required for generative AI Search. Existing structured data remains useful for the Search features that support it.",[909,20009,20011],{"id":20010},"can-good-seo-guarantee-ai-citations","Can good SEO guarantee AI citations?",[17,20013,20014],{},"No. Meeting Google’s technical requirements and best practices makes a page eligible, but Google does not guarantee crawling, indexing, ranking, or inclusion in an AI-generated response.",[12,20016,960],{"id":959},[17,20018,20019],{},"Google’s message is clearer than much of the discussion around GEO: generative AI Search changes how information can be retrieved, synthesized, and presented, but it does not erase the fundamentals of Search.",[17,20021,20022],{},"Technical accessibility gets content into the system. Strong SEO helps Google understand and retrieve it. Unique, people-first, non-commodity information gives the page a reason to stand out.",[17,20024,20025],{},"For Google Search, that is currently a more defensible strategy than attempting to reverse-engineer an undocumented “AI citation algorithm.”",[12,20027,976],{"id":975},[978,20029,20030,20039,20048,20057,20067,20077],{},[981,20031,20032,20035,20036],{},[21,20033,20034],{},"Google Search Central — “Optimizing your website for generative AI features on Google Search.”"," Last updated July 10, 2026.\n",[29,20037,18524],{"href":18524,"rel":20038},[33],[981,20040,20041,20044,20045],{},[21,20042,20043],{},"Google Search Central — “AI Features and Your Website.”"," Last updated December 10, 2025.\n",[29,20046,19025],{"href":19025,"rel":20047},[33],[981,20049,20050,20053],{},[21,20051,20052],{},"Google Search Central — “Creating helpful, reliable, people-first content.”",[29,20054,20055],{"href":20055,"rel":20056},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Ffundamentals\u002Fcreating-helpful-content?utm_source=chatgpt.com",[33],[981,20058,20059,20062,20063],{},[21,20060,20061],{},"Google Search Central — “Introducing Search Generative AI performance reports in Search Console.”"," June 3, 2026; rollout note updated August 31, 2026.\n",[29,20064,20065],{"href":20065,"rel":20066},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fblog\u002F2026\u002F06\u002Fgen-ai-performance-reports",[33],[981,20068,20069,20072,20073],{},[21,20070,20071],{},"Google Search Central — “Help your readers find your site through preferred sources in Google Search.”"," Last updated August 20, 2026.\n",[29,20074,20075],{"href":20075,"rel":20076},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fpreferred-sources?authuser=451499271",[33],[981,20078,20079,20082,20083],{},[21,20080,20081],{},"Google Search Central — “Top ways to ensure your content performs well in Google's AI experiences on Search.”"," May 21, 2025.\n",[29,20084,20085],{"href":20085,"rel":20086},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fblog\u002F2025\u002F05\u002Fsucceeding-in-ai-search?utm_source=chatgpt.com",[33],{"title":185,"searchDepth":311,"depth":311,"links":20088},[20089,20090,20091,20092,20093,20094,20095,20096,20097,20098,20099,20100],{"id":19666,"depth":311,"text":19661},{"id":19678,"depth":311,"text":19679},{"id":19694,"depth":311,"text":19695},{"id":19733,"depth":311,"text":19734},{"id":19788,"depth":311,"text":19789},{"id":19843,"depth":311,"text":19844},{"id":19908,"depth":311,"text":19909},{"id":19948,"depth":311,"text":19949},{"id":886,"depth":311,"text":887},{"id":906,"depth":311,"text":907},{"id":959,"depth":311,"text":960},{"id":975,"depth":311,"text":976},"Learn Google’s official guidance for succeeding in AI Overviews and AI Mode, including SEO fundamentals, non-commodity content, technical requirements, GEO myths, and measurement.","\u002Fguide-ai-search.png","Image of Guide to SI Search",{},"\u002Fblog\u002Fen\u002Fguide-ai-search",{"title":19661,"description":20101},"guide-ai-search","blog\u002Fen\u002Fguide-ai-search","_hRapo0aEdXaJSk0L4p2knirF6W7l5s8ODyWFwj5LyA",{"id":20111,"title":20112,"author":7,"body":20113,"category":4083,"description":20627,"draft":1097,"extension":1098,"featured":1099,"image":20628,"imageAlt":20629,"locale":1102,"meta":20630,"navigation":1099,"path":20631,"publishedAt":19103,"seo":20632,"slug":20633,"stem":20634,"translationKey":20117,"updatedAt":19103,"__hash__":20635},"blog\u002Fblog\u002Fen\u002Fweb-performance.md","What Is Web Performance? A Practical Guide",{"type":9,"value":20114,"toc":20609},[20115,20119,20122,20129,20131,20136,20139,20142,20146,20149,20152,20155,20161,20167,20171,20177,20227,20236,20240,20246,20249,20256,20260,20266,20269,20272,20276,20279,20286,20289,20293,20296,20301,20304,20307,20310,20322,20326,20334,20341,20344,20347,20354,20360,20364,20367,20370,20373,20378,20381,20385,20388,20391,20397,20400,20402,20405,20408,20411,20415,20420,20425,20427,20431,20434,20438,20441,20445,20451,20455,20461,20465,20468,20470,20476,20479,20482,20484],[12,20116,20118],{"id":20117},"what-is-web-performance","What Is Web Performance?",[17,20120,20121],{},"A website can appear visually complete and still feel slow. A button may take too long to react, content may jump while someone is reading, or the main image may arrive several seconds after the page starts loading. All of these are web performance problems.",[17,20123,20124,20125,35],{},"Web performance is broader than “how fast a page loads.” It covers how quickly useful content appears, how responsive the page feels when someone interacts with it, and how stable and smooth the experience remains while the page is being used. MDN describes web performance as both objective measurements and the perceived user experience of loading and runtime behavior. (",[29,20126,5987],{"href":20127,"rel":20128},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FPerformance?utm_source=chatgpt.com",[33],[12,20130,1152],{"id":1151},[17,20132,20133],{},[21,20134,20135],{},"Web performance is the measurement and optimization of how quickly and smoothly a website loads, responds to user input, renders content, and remains visually stable.",[17,20137,20138],{},"It includes network speed, server response time, browser rendering, JavaScript execution, images, fonts, layout behavior, caching, and many other parts of the delivery pipeline.",[17,20140,20141],{},"A fast server alone does not guarantee a fast website. Performance is the result of the entire path from the user's request to what finally appears and reacts inside the browser.",[12,20143,20145],{"id":20144},"why-performance-matters","Why Performance Matters",[17,20147,20148],{},"Users do not experience your hosting server, JavaScript bundle, CDN, or database separately. They experience the final page.",[17,20150,20151],{},"Imagine an ecommerce product page. The HTML arrives quickly, but a large hero image takes several seconds to display. Then the user taps “Add to Cart,” but JavaScript blocks the main thread and the button does not visibly respond immediately. Finally, an advertisement loads above the product description and moves the page downward.",[17,20153,20154],{},"Technically, the website loaded. From the user's perspective, however, it felt slow and unstable.",[17,20156,20157,20158],{},"That distinction is fundamental to modern performance engineering: ",[21,20159,20160],{},"performance should be evaluated from the user's experience, not simply from how quickly a server sends a response.",[17,20162,20163,20164,35],{},"Performance also intersects with SEO. Google documents that Core Web Vitals are used by its ranking systems, but explicitly warns that good Core Web Vitals do not guarantee high rankings. Relevance and many other factors still matter. (",[29,20165,157],{"href":1030,"rel":20166},[33],[12,20168,20170],{"id":20169},"core-web-vitals","Core Web Vitals",[17,20172,20173,20174,35],{},"Core Web Vitals are Google's user-centered metrics for three major aspects of page experience: loading, responsiveness, and visual stability. They are not a complete definition of web performance, but they provide a useful common baseline. (",[29,20175,34],{"href":16503,"rel":20176},[33],[69,20178,20179,20191],{},[72,20180,20181],{},[75,20182,20183,20185,20188],{},[78,20184,16453],{},[78,20186,20187],{},"What it measures",[78,20189,20190],{"align":8449},"Good threshold",[85,20192,20193,20204,20216],{},[75,20194,20195,20199,20202],{},[90,20196,20197],{},[21,20198,15528],{},[90,20200,20201],{},"How quickly the main visible content appears",[90,20203,16469],{"align":8449},[75,20205,20206,20211,20214],{},[90,20207,20208],{},[21,20209,20210],{},"Interaction to Next Paint (INP)",[90,20212,20213],{},"How quickly the page responds visually to interactions",[90,20215,16480],{"align":8449},[75,20217,20218,20222,20225],{},[90,20219,20220],{},[21,20221,23],{},[90,20223,20224],{},"How visually stable the page remains",[90,20226,16490],{"align":8449},[17,20228,20229,20230,20232,20233,35],{},"Google evaluates these targets using the ",[21,20231,123],{},", normally considered separately across mobile and desktop experiences. (",[29,20234,34],{"href":16503,"rel":20235},[33],[220,20237,20239],{"id":20238},"largest-contentful-paint","Largest Contentful Paint",[17,20241,20242,20243,35],{},"LCP measures when the largest visible image, text block, or other eligible content element is rendered in the viewport. It is intended to approximate when the page's main content becomes visible. (",[29,20244,34],{"href":15542,"rel":20245},[33],[17,20247,20248],{},"Poor LCP can come from several different places. A slow server may delay the initial HTML. The browser may discover the main image too late. A large image may take too long to transfer. Render-blocking CSS or heavy JavaScript may prevent an already-downloaded element from appearing.",[17,20250,20251,20252,35],{},"That is why “compress the images” is not a universal LCP fix. You first need to identify which part of the loading path is actually slow. web.dev's LCP guidance breaks the problem into stages such as server response, resource discovery, resource transfer, and rendering delay. (",[29,20253,34],{"href":20254,"rel":20255},"https:\u002F\u002Fweb.dev\u002Farticles\u002Foptimize-lcp?hl=en&utm_source=chatgpt.com",[33],[220,20257,20259],{"id":20258},"interaction-to-next-paint","Interaction to Next Paint",[17,20261,20262,20263,35],{},"INP measures responsiveness by observing qualifying interactions such as clicks, taps, and keyboard input throughout a page visit. It reflects how long users wait before the browser produces the next visual update. (",[29,20264,34],{"href":15279,"rel":20265},[33],[17,20267,20268],{},"A page can therefore have excellent loading performance while still feeling sluggish after it loads.",[17,20270,20271],{},"Heavy JavaScript is a common cause. If the browser's main thread is occupied by a long task, it cannot immediately process an interaction and render the resulting update. Breaking up expensive work, reducing unnecessary JavaScript, and avoiding excessive synchronous processing can improve responsiveness.",[220,20273,20275],{"id":20274},"cumulative-layout-shift","Cumulative Layout Shift",[17,20277,20278],{},"CLS measures unexpected movement of visible content. Unlike LCP and INP, CLS is unitless.",[17,20280,20281,20282,35],{},"Typical problems include images without reserved dimensions, ads or embeds that suddenly expand, dynamically inserted content, and some web-font behavior. (",[29,20283,34],{"href":20284,"rel":20285},"https:\u002F\u002Fweb.dev\u002Farticles\u002Foptimize-cls?hl=en&utm_source=chatgpt.com",[33],[17,20287,20288],{},"A layout shift is more than a cosmetic issue. A user can begin clicking one element just as the interface moves, causing them to activate something else.",[12,20290,20292],{"id":20291},"how-performance-works","How Performance Works",[17,20294,20295],{},"A simplified page load looks like this:",[17,20297,20298],{},[21,20299,20300],{},"Request → server response → HTML parsing → resource discovery → downloads → JavaScript and CSS processing → layout → paint → user interaction",[17,20302,20303],{},"Every stage can introduce delay.",[17,20305,20306],{},"The server influences how quickly the initial document becomes available. The network affects how long HTML, images, CSS, fonts, and JavaScript take to arrive. The browser must then parse those resources and build the structures needed to render the page. JavaScript can consume CPU time on the main thread, while CSS and DOM changes can trigger additional layout and rendering work.",[17,20308,20309],{},"This is why performance optimization is an engineering problem rather than a single setting you enable.",[17,20311,20312,20313,20317,20318,35],{},"Browsers also expose standardized performance information through APIs. The W3C Web Performance work includes specifications such as Navigation Timing, Resource Timing, Performance Timeline, User Timing, Event Timing, and related APIs. (",[29,20314,5697],{"href":20315,"rel":20316},"https:\u002F\u002Fwww.w3.org\u002F2010\u002Fwebperf\u002F?utm_source=chatgpt.com",[33],") MDN's Performance API documentation explains how browsers expose high-precision timing information that can be inspected locally or collected by analytics systems. (",[29,20319,5987],{"href":20320,"rel":20321},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FAPI\u002FPerformance_API?utm_source=chatgpt.com",[33],[12,20323,20325],{"id":20324},"field-vs-lab-data","Field vs Lab Data",[17,20327,20328,20329,420,20331,174],{},"One of the most important performance concepts is the difference between ",[21,20330,641],{},[21,20332,20333],{},"lab data",[17,20335,20336,20337,35],{},"Field data comes from real users. Their phones, laptops, network conditions, locations, cache states, and behavior vary. Google's Chrome UX Report, or CrUX, provides aggregated real-user experience data for eligible pages and origins. Its commonly used API data represents a rolling 28-day window. (",[29,20338,649],{"href":20339,"rel":20340},"https:\u002F\u002Fdeveloper.chrome.com\u002Fdocs\u002Fcrux\u002Fmethodology\u002Ftools?utm_source=chatgpt.com",[33],[17,20342,20343],{},"Lab data comes from controlled tests such as Lighthouse or Chrome DevTools. It is extremely useful for debugging because conditions can be reproduced and inspected in detail.",[17,20345,20346],{},"The two can disagree without either being wrong.",[17,20348,20349,20350,35],{},"For example, a Lighthouse test may never scroll far enough to trigger an image that later causes a layout shift. Real users may encounter that shift regularly. Likewise, cached resources or different network conditions can produce field results that differ substantially from a synthetic test. (",[29,20351,34],{"href":20352,"rel":20353},"https:\u002F\u002Fweb.dev\u002Farticles\u002Flab-and-field-data-differences?hl=en&utm_source=chatgpt.com",[33],[17,20355,20356,20357],{},"The practical rule is simple: ",[21,20358,20359],{},"use field data to understand what users experience, then use lab tools to investigate why.",[12,20361,20363],{"id":20362},"how-to-measure-performance","How to Measure Performance",[17,20365,20366],{},"Start with real-user evidence when it is available. PageSpeed Insights can combine CrUX field data with Lighthouse diagnostics, while Search Console can help identify groups of pages with Core Web Vitals problems. Sites that need more detailed segmentation can collect their own Real User Monitoring data.",[17,20368,20369],{},"Then reproduce important problems in Chrome DevTools or another suitable profiling environment. Look at the network waterfall, the LCP element, long main-thread tasks, layout shifts, resource priority, cache behavior, and the timing of critical requests.",[17,20371,20372],{},"The useful workflow is:",[17,20374,20375],{},[21,20376,20377],{},"Symptom → measurement → possible cause → confirmation → fix → re-measurement",[17,20379,20380],{},"Do not optimize only because a tool displays a warning. Determine whether the warning explains an actual bottleneck.",[12,20382,20384],{"id":20383},"common-performance-mistakes","Common Performance Mistakes",[17,20386,20387],{},"One mistake is treating the Lighthouse performance score as the definition of website speed. Lighthouse is valuable, but it is a controlled lab test. Real-user experience may differ.",[17,20389,20390],{},"Another is optimizing individual files without understanding the critical path. Saving 20 KB from an image that loads long after the main content may have almost no effect on LCP, while fixing late discovery of the actual LCP image could matter much more.",[17,20392,20393,20394,35],{},"A third mistake is chasing perfect scores instead of meaningful user improvements. Google itself advises against focusing on perfect Core Web Vitals scores purely for SEO. (",[29,20395,157],{"href":16235,"rel":20396},[33],[17,20398,20399],{},"Performance work should prioritize bottlenecks that affect real users.",[12,20401,887],{"id":886},[17,20403,20404],{},"Treat web performance as a continuous measurement process rather than a one-time optimization project.",[17,20406,20407],{},"Establish a field-performance baseline, identify the weakest user experience, reproduce the problem in a controlled environment, fix the underlying bottleneck, and measure again after deployment. Monitor important metrics over time so that new features, scripts, design changes, or third-party services do not silently create regressions.",[17,20409,20410],{},"Start with Core Web Vitals because they provide useful standardized targets, but do not stop there. Server latency, resource loading, rendering behavior, application-specific interactions, and user-device constraints may reveal problems that three metrics alone cannot describe.",[17,20412,20413],{},[161,20414,163],{},[17,20416,20417],{},[161,20418,20419],{},"INTERNAL LINK: How to Improve Largest Contentful Paint",[17,20421,20422],{},[161,20423,20424],{},"INTERNAL LINK: Field Data vs Lab Data",[12,20426,907],{"id":906},[909,20428,20430],{"id":20429},"is-web-performance-the-same-as-page-speed","Is web performance the same as page speed?",[17,20432,20433],{},"No. Page loading speed is one part of web performance. Web performance also includes responsiveness during interactions, visual stability, runtime smoothness, and the broader experience of using the page.",[909,20435,20437],{"id":20436},"are-core-web-vitals-all-that-matters","Are Core Web Vitals all that matters?",[17,20439,20440],{},"No. They measure three important user-experience dimensions, but they do not describe every possible performance problem. Metrics such as Time to First Byte and First Contentful Paint, browser traces, network timings, and application-specific measurements can provide additional diagnostic information.",[909,20442,20444],{"id":20443},"is-lighthouse-field-data","Is Lighthouse field data?",[17,20446,20447,20448,35],{},"No. Lighthouse primarily runs controlled lab measurements. Real-user data comes from field measurement systems such as CrUX or your own Real User Monitoring implementation. Lighthouse and field data should be used together rather than treated as interchangeable. (",[29,20449,34],{"href":16503,"rel":20450},[33],[909,20452,20454],{"id":20453},"does-faster-performance-guarantee-better-seo-rankings","Does faster performance guarantee better SEO rankings?",[17,20456,20457,20458,35],{},"No. Google says Core Web Vitals are used by its ranking systems, but good performance does not guarantee top rankings. Search relevance and other signals remain important. (",[29,20459,157],{"href":16235,"rel":20460},[33],[909,20462,20464],{"id":20463},"when-is-a-performance-optimization-successful","When is a performance optimization successful?",[17,20466,20467],{},"When measurements show that the targeted bottleneck improved without creating significant regressions elsewhere. Ideally, the improvement should eventually appear in real-user data rather than only in a local test.",[12,20469,960],{"id":959},[17,20471,20472,20473,174],{},"Web performance is the engineering discipline of making websites ",[21,20474,20475],{},"load quickly, respond quickly, and remain stable while people use them",[17,20477,20478],{},"Core Web Vitals provide useful targets for those experiences, but meaningful optimization begins with diagnosis rather than scores. Measure what real users experience, identify which part of the delivery and rendering pipeline causes the problem, fix that bottleneck, and measure again.",[17,20480,20481],{},"A fast website is not simply one that finishes downloading quickly. It is one that feels ready when the user needs it.",[12,20483,976],{"id":975},[978,20485,20486,20499,20511,20523,20535,20546,20559,20571,20584,20596],{},[981,20487,6869,20488,20491,20492,749,20496,35],{},[1625,20489,20490],{},"Web performance"," — ",[29,20493,20495],{"href":20127,"rel":20494},[33],"MDN Web Performance documentation",[29,20497,5987],{"href":20127,"rel":20498},[33],[981,20500,983,20501,20503,20504,749,20508,35],{},[1625,20502,17669],{}," — Core Web Vitals definitions, thresholds, and measurement guidance — ",[29,20505,20507],{"href":17672,"rel":20506},[33],"web.dev Web Vitals",[29,20509,34],{"href":16503,"rel":20510},[33],[981,20512,1023,20513,20515,20516,749,20520,35],{},[1625,20514,1026],{}," — updated December 10, 2025 — ",[29,20517,20519],{"href":1030,"rel":20518},[33],"Google Core Web Vitals documentation",[29,20521,157],{"href":1030,"rel":20522},[33],[981,20524,1023,20525,20515,20528,749,20532,35],{},[1625,20526,20527],{},"Understanding page experience in Google Search results",[29,20529,20531],{"href":16235,"rel":20530},[33],"Google Page Experience documentation",[29,20533,157],{"href":16235,"rel":20534},[33],[981,20536,983,20537,20539,20540,749,20543,35],{},[1625,20538,17679],{}," — updated March 31, 2025 — ",[29,20541,16293],{"href":16054,"rel":20542},[33],[29,20544,34],{"href":20254,"rel":20545},[33],[981,20547,983,20548,20551,20552,749,20556,35],{},[1625,20549,20550],{},"Optimize Interaction to Next Paint"," — updated September 2, 2025 — ",[29,20553,20555],{"href":15279,"rel":20554},[33],"INP optimization guide",[29,20557,34],{"href":15279,"rel":20558},[33],[981,20560,983,20561,20563,20564,749,20568,35],{},[1625,20562,998],{}," — updated February 7, 2025 — ",[29,20565,20567],{"href":1002,"rel":20566},[33],"CLS optimization guide",[29,20569,34],{"href":20284,"rel":20570},[33],[981,20572,18400,20573,20576,20577,749,20581,35],{},[1625,20574,20575],{},"Web Performance Working Group"," and current publications — ",[29,20578,20580],{"href":20315,"rel":20579},[33],"W3C Web Performance Working Group",[29,20582,5697],{"href":20315,"rel":20583},[33],[981,20585,6869,20586,20491,20589,749,20593,35],{},[1625,20587,20588],{},"Performance APIs",[29,20590,20592],{"href":20320,"rel":20591},[33],"MDN Performance API documentation",[29,20594,5987],{"href":20320,"rel":20595},[33],[981,20597,1038,20598,20601,20602,749,20606,35],{},[1625,20599,20600],{},"CrUX Tools"," — updated September 9, 2025 — ",[29,20603,20605],{"href":20339,"rel":20604},[33],"Chrome UX Report tools documentation",[29,20607,649],{"href":20339,"rel":20608},[33],{"title":185,"searchDepth":311,"depth":311,"links":20610},[20611,20612,20613,20614,20619,20620,20621,20622,20623,20624,20625,20626],{"id":20117,"depth":311,"text":20118},{"id":1151,"depth":311,"text":1152},{"id":20144,"depth":311,"text":20145},{"id":20169,"depth":311,"text":20170,"children":20615},[20616,20617,20618],{"id":20238,"depth":325,"text":20239},{"id":20258,"depth":325,"text":20259},{"id":20274,"depth":325,"text":20275},{"id":20291,"depth":311,"text":20292},{"id":20324,"depth":311,"text":20325},{"id":20362,"depth":311,"text":20363},{"id":20383,"depth":311,"text":20384},{"id":886,"depth":311,"text":887},{"id":906,"depth":311,"text":907},{"id":959,"depth":311,"text":960},{"id":975,"depth":311,"text":976},"Learn what web performance means, how Core Web Vitals measure real user experience, why field and lab data differ, and how to diagnose and improve slow websites.","\u002Fweb-performance.png","Image of Web Performance",{},"\u002Fblog\u002Fen\u002Fweb-performance",{"title":20112,"description":20627},"web-performance","blog\u002Fen\u002Fweb-performance","sM205cxQTcISoicSUi5qf-iNzO9Cf5FehNTnoTw3ees",{"id":20637,"title":20638,"author":7,"body":20639,"category":4925,"description":21132,"draft":1097,"extension":1098,"featured":1099,"image":21133,"imageAlt":21134,"locale":1102,"meta":21135,"navigation":1099,"path":21136,"publishedAt":21137,"seo":21138,"slug":21139,"stem":21140,"translationKey":21139,"updatedAt":21137,"__hash__":21141},"blog\u002Fblog\u002Fen\u002Fai-search-control.md","AI Search Optimization: What You Can and Cannot Control",{"type":9,"value":20640,"toc":21118},[20641,20645,20648,20655,20658,20660,20667,20673,20680,20684,20742,20745,20749,20752,20755,20764,20789,20792,20796,20799,20802,20811,20818,20829,20834,20838,20841,20844,20853,20859,20862,20866,20869,20872,20885,20896,20899,20904,20908,20911,20920,20929,20932,20935,20937,20944,20947,20950,20953,20956,20958,20962,20965,20969,20975,20979,20982,20986,20992,20994,21004,21007,21010,21016,21018],[12,20642,20644],{"id":20643},"what-ai-search-optimization-can-and-cannot-control","What AI Search Optimization Can and Cannot Control",[17,20646,20647],{},"AI search optimization creates an easy misconception: if you format content correctly, add the right schema, or allow the right crawler, an AI system will choose your page and cite it. That is not how modern search systems work.",[17,20649,20650,20651,20654],{},"Website owners ",[21,20652,20653],{},"can control what they publish, what crawlers may access, and some ways content may be reused or previewed",". They can also improve the signals that help search systems understand and retrieve a page. But they cannot command an AI system to select a page, cite it, rank it, or produce a particular answer.",[17,20656,20657],{},"Understanding that boundary makes AI search optimization much more practical.",[12,20659,1152],{"id":1151},[17,20661,20662,20663,20666],{},"AI search optimization can directly control ",[21,20664,20665],{},"your website and the permissions you expose to external systems",". It can influence discovery, indexing, relevance, interpretation, and eligibility.",[17,20668,20669,20670,174],{},"It cannot directly control ",[21,20671,20672],{},"retrieval decisions, ranking, query expansion, source selection, citation placement, generated wording, or whether an AI answer appears at all",[17,20674,20675,20676,35],{},"Google explicitly says there are no additional technical requirements or special schema needed for inclusion in AI Overviews or AI Mode beyond the relevant Search requirements. Meeting those requirements makes a page eligible; it does not guarantee that Google will crawl, index, retrieve, or show it. (",[29,20677,157],{"href":20678,"rel":20679},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fai-features?kgs=aa0bcc3d152ed142&utm_source=chatgpt.com",[33],[12,20681,20683],{"id":20682},"three-levels-of-control","Three Levels of Control",[69,20685,20686,20698],{},[72,20687,20688],{},[75,20689,20690,20693,20695],{},[78,20691,20692],{},"Level",[78,20694,11269],{},[78,20696,20697],{},"Examples",[85,20699,20700,20716,20729],{},[75,20701,20702,20707,20710],{},[90,20703,20704],{},[21,20705,20706],{},"Control",[90,20708,20709],{},"You can directly configure it",[90,20711,20712,20713,20715],{},"Page content, robots.txt, ",[129,20714,1514],{},", canonical signals, structured data",[75,20717,20718,20723,20726],{},[90,20719,20720],{},[21,20721,20722],{},"Influence",[90,20724,20725],{},"You can improve the probability of an outcome",[90,20727,20728],{},"Relevance, crawlability, entity clarity, usefulness, source eligibility",[75,20730,20731,20736,20739],{},[90,20732,20733],{},[21,20734,20735],{},"Cannot control",[90,20737,20738],{},"The search or AI system decides",[90,20740,20741],{},"Ranking, retrieval, citations, generated answers, query fan-out",[17,20743,20744],{},"The mistake is treating an influence as if it were a control.",[12,20746,20748],{"id":20747},"what-you-can-control","What You Can Control",[17,20750,20751],{},"You control the information actually available on your website: text, headings, images, links, structured data, HTTP responses, page architecture, and whether important information is available in crawlable form.",[17,20753,20754],{},"You also have real crawler and indexing controls.",[17,20756,20757,20758,20760,20761,35],{},"For Google Search, ",[129,20759,1454],{}," can restrict Googlebot from requesting particular URLs. However, blocking crawling is not the same as guaranteeing that a URL disappears from Search. Google documents that a blocked URL may still be indexed without its content if Google discovers the URL elsewhere. (",[29,20762,157],{"href":2823,"rel":20763},[33],[17,20765,20766,20767,513,20769,513,20772,520,20775,20778,20779,20781,20782,20784,20785,35],{},"For stronger page-level control, Google supports directives including ",[129,20768,1514],{},[129,20770,20771],{},"nosnippet",[129,20773,20774],{},"max-snippet",[129,20776,20777],{},"data-nosnippet",". In particular, Google documents that ",[129,20780,20771],{}," prevents page content from being used as a direct input for AI Overviews and AI Mode, while ",[129,20783,20774],{}," limits the amount that may be used as a direct input. (",[29,20786,157],{"href":20787,"rel":20788},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fcrawling-indexing\u002Frobots-meta-tag?utm_source=chatgpt.com",[33],[17,20790,20791],{},"These are genuine controls because the publisher is explicitly communicating what the search system is permitted to crawl, index, or expose.",[12,20793,20795],{"id":20794},"what-you-can-influence","What You Can Influence",[17,20797,20798],{},"Most optimization work sits here.",[17,20800,20801],{},"You can make a page technically accessible, clearly structured, internally linked, fast enough to use comfortably, semantically understandable, and genuinely useful. You can publish original evidence, expert explanations, product data, images, videos, comparisons, and other information that gives the page a reason to be retrieved.",[17,20803,20804,20805,20807,20808,35],{},"Google's 2026 guidance specifically emphasizes foundational SEO and useful, ",[21,20806,19740],{}," rather than special \"GEO\" mechanisms. It also says techniques such as unnecessary AI-specific text files or artificial optimization tricks are not required for its generative Search features. (",[29,20809,157],{"href":19036,"rel":20810},[33],[17,20812,20813,20814,35],{},"Structured data belongs in this influence category too. It can help Google understand entities and make a page eligible for particular search features, but correct markup does not guarantee that a feature will appear. (",[29,20815,157],{"href":20816,"rel":20817},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Fsd-policies?utm_source=chatgpt.com",[33],[17,20819,20820,20821,20824,20825,35],{},"Even ",[129,20822,20823],{},"rel=\"canonical\""," is primarily a signal of preference rather than an absolute command. Google may select another canonical URL when its systems consider another version more representative. (",[29,20826,157],{"href":20827,"rel":20828},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fcrawling-indexing\u002Fconsolidate-duplicate-urls?utm_source=chatgpt.com",[33],[17,20830,12412,20831],{},[21,20832,20833],{},"good optimization improves the inputs available to retrieval systems; it does not dictate their final decision.",[12,20835,20837],{"id":20836},"what-you-cannot-control","What You Cannot Control",[17,20839,20840],{},"You cannot force an AI search system to retrieve your URL for a specific prompt.",[17,20842,20843],{},"You also cannot determine exactly which passage will be extracted, which competing sources will be consulted, where your citation will appear, or how the final answer will phrase information from multiple sources.",[17,20845,20846,20847,20849,20850,35],{},"Google says AI Overviews and AI Mode may use ",[21,20848,18730],{},", where the system generates multiple related searches across subtopics and data sources. The models and techniques used can also vary, meaning different searches may retrieve different supporting pages even when the original query appears similar. (",[29,20851,157],{"href":20678,"rel":20852},[33],[17,20854,20855,20856,35],{},"Traditional ranking has the same fundamental limitation. Google describes its ranking systems as evaluating many factors and signals across enormous numbers of pages. Optimizing one factor does not create a guaranteed position. (",[29,20857,157],{"href":8283,"rel":20858},[33],[17,20860,20861],{},"Promises such as \"implement this schema and ChatGPT will cite you\" or \"follow these GEO rules and rank in AI Overviews\" therefore go beyond what public evidence supports.",[12,20863,20865],{"id":20864},"search-is-not-training","Search Is Not Training",[17,20867,20868],{},"Another common mistake is treating AI search access and AI model training as the same permission.",[17,20870,20871],{},"They may be separate.",[17,20873,20874,20875,20877,20878,20880,20881,35],{},"OpenAI currently documents ",[21,20876,4107],{}," as the crawler publishers should allow if they want site content to be available for ChatGPT search summaries and snippets. OpenAI separately uses ",[21,20879,4149],{}," as a control for publishers who want pages excluded from potential model training. (",[29,20882,4122],{"href":20883,"rel":20884},"https:\u002F\u002Fhelp.openai.com\u002Fen\u002Farticles\u002F12627856-publishers-and-developers-faq",[33],[17,20886,20887,20888,20891,20892,35],{},"Google has a similar separation. Googlebot controls crawling for Google Search, including Search features, while ",[21,20889,20890],{},"Google-Extended"," lets publishers manage certain uses involving future Gemini model training and grounding in other Gemini products. Google explicitly states that Google-Extended does not affect inclusion or ranking in Google Search. (",[29,20893,157],{"href":20894,"rel":20895},"https:\u002F\u002Fdevelopers.google.com\u002Fcrawling\u002Fdocs\u002Fcrawlers-fetchers\u002Fgoogle-common-crawlers?authuser=19&utm_source=chatgpt.com",[33],[17,20897,20898],{},"So blocking an AI-training crawler does not automatically mean opting out of every AI-powered search experience, and allowing search crawling does not necessarily grant every possible training use.",[17,20900,20901],{},[161,20902,20903],{},"INTERNAL LINK: AI Crawlers Explained: Googlebot, OAI-SearchBot, GPTBot and Google-Extended",[12,20905,20907],{"id":20906},"measure-instead-of-guess","Measure Instead of Guess",[17,20909,20910],{},"Because source selection cannot be controlled, measurement should focus on outcomes rather than assumed \"AI ranking factors.\"",[17,20912,20913,20914,20916,20917,35],{},"Google introduced dedicated Generative AI performance reporting in Search Console in 2026. According to Google, these reports were rolled out to websites worldwide by ",[21,20915,19918],{},", providing visibility into impressions from generative AI experiences such as AI Overviews and AI Mode. (",[29,20918,157],{"href":19068,"rel":20919},[33],[17,20921,20922,20923,20925,20926,35],{},"OpenAI also documents that ChatGPT search referral URLs include ",[129,20924,19426],{},", allowing publishers to identify referral traffic in analytics tools. (",[29,20927,4122],{"href":20883,"rel":20928},[33],[17,20930,20931],{},"Useful measurements therefore include visibility, referred visits, landing pages, engagement, conversions, and which subjects repeatedly attract AI-search traffic.",[17,20933,20934],{},"These observations still show correlation, not a complete explanation of an AI system's internal retrieval logic.",[12,20936,887],{"id":886},[17,20938,20939,20940,20943],{},"Treat AI search optimization as ",[21,20941,20942],{},"engineering the best available inputs",", not controlling the output.",[17,20945,20946],{},"First, control what is genuinely yours: crawler permissions, indexing rules, previews, content quality, technical accessibility, structured data, canonical signals, and site architecture.",[17,20948,20949],{},"Then improve the factors you can influence: original information, entity clarity, topical depth, internal relationships, evidence, useful multimedia, and information that directly answers real questions.",[17,20951,20952],{},"Finally, accept the external layer as probabilistic. Search providers control retrieval, ranking, model behavior, citations, interface design, and answer generation.",[17,20954,20955],{},"This approach is less exciting than a \"GEO hack,\" but it matches how the systems are actually documented.",[12,20957,907],{"id":906},[909,20959,20961],{"id":20960},"can-i-guarantee-an-ai-citation","Can I Guarantee an AI Citation?",[17,20963,20964],{},"No. You can make content accessible and highly relevant, but public documentation from major providers does not offer a mechanism that guarantees citation for a query.",[909,20966,20968],{"id":20967},"does-schema-guarantee-ai-visibility","Does Schema Guarantee AI Visibility?",[17,20970,20971,20972,35],{},"No. Structured data can improve machine understanding and eligibility for supported features, but Google explicitly says valid structured data does not guarantee a particular search appearance. (",[29,20973,157],{"href":20816,"rel":20974},[33],[909,20976,20978],{"id":20977},"should-i-block-ai-crawlers","Should I Block AI Crawlers?",[17,20980,20981],{},"That depends on your objective. Search crawling, training, agent access, and other uses may have different crawler controls. Decide which uses you want before creating a blanket block.",[909,20983,20985],{"id":20984},"is-ai-optimization-different-from-seo","Is AI Optimization Different From SEO?",[17,20987,20988,20989,35],{},"The terminology varies by industry. For Google Search specifically, Google states that its generative AI experiences remain rooted in core Search systems and that existing SEO fundamentals continue to apply. (",[29,20990,157],{"href":19036,"rel":20991},[33],[12,20993,960],{"id":959},[17,20995,20996,20997,21000,21001,174],{},"AI search optimization gives publishers meaningful ",[21,20998,20999],{},"control over access, content, and permissions",", and meaningful ",[21,21002,21003],{},"influence over discoverability and relevance",[17,21005,21006],{},"It doesn't give them control over the final decision made by a search or generative system.",[17,21008,21009],{},"The useful question is therefore not, \"How do we make the AI cite us?\"",[17,21011,21012,21013],{},"It is: ",[21,21014,21015],{},"\"Have we given retrieval systems the strongest accurate, accessible, distinctive, and permission-compatible source they could reasonably choose?\"",[12,21017,976],{"id":975},[1640,21019,21020,21030,21042,21054,21068,21080,21092,21106],{},[981,21021,1023,21022,18343,21024,749,21027,35],{},[1625,21023,19032],{},[29,21025,2754],{"href":19036,"rel":21026},[33],[29,21028,157],{"href":19036,"rel":21029},[33],[981,21031,1023,21032,21035,21036,749,21039,35],{},[1625,21033,21034],{},"AI Features and Your Website",", updated December 10, 2025. ",[29,21037,2754],{"href":19025,"rel":21038},[33],[29,21040,157],{"href":19025,"rel":21041},[33],[981,21043,1023,21044,21047,21048,749,21051,35],{},[1625,21045,21046],{},"Robots meta tag, data-nosnippet, and X-Robots-Tag specifications",", updated March 24, 2026. ",[29,21049,2754],{"href":20787,"rel":21050},[33],[29,21052,157],{"href":20787,"rel":21053},[33],[981,21055,2814,21056,21059,21060,749,21065,35],{},[1625,21057,21058],{},"Google's common crawlers",", updated July 14, 2026. ",[29,21061,21064],{"href":21062,"rel":21063},"https:\u002F\u002Fdevelopers.google.com\u002Fcrawling\u002Fdocs\u002Fcrawlers-fetchers\u002Fgoogle-common-crawlers?utm_source=chatgpt.com",[33],"Google crawler documentation",[29,21066,157],{"href":20894,"rel":21067},[33],[981,21069,1023,21070,1057,21073,749,21077,35],{},[1625,21071,21072],{},"General Structured Data Guidelines",[29,21074,21076],{"href":20816,"rel":21075},[33],"Structured data guidelines",[29,21078,157],{"href":20816,"rel":21079},[33],[981,21081,1023,21082,18343,21085,749,21089,35],{},[1625,21083,21084],{},"How to Specify a Canonical with rel=\"canonical\" and Other Methods",[29,21086,21088],{"href":20827,"rel":21087},[33],"Canonicalization documentation",[29,21090,157],{"href":20827,"rel":21091},[33],[981,21093,21094,21095,21098,21099,749,21103,35],{},"OpenAI Help Center — ",[1625,21096,21097],{},"Publishers and Developers — FAQ",", updated August 2026. ",[29,21100,21102],{"href":4853,"rel":21101},[33],"OpenAI publisher documentation",[29,21104,4122],{"href":20883,"rel":21105},[33],[981,21107,1023,21108,21110,21111,749,21115,35],{},[1625,21109,19064],{},", June 3, 2026; worldwide rollout noted as complete August 31, 2026. ",[29,21112,21114],{"href":19068,"rel":21113},[33],"Google Search Central announcement",[29,21116,157],{"href":19068,"rel":21117},[33],{"title":185,"searchDepth":311,"depth":311,"links":21119},[21120,21121,21122,21123,21124,21125,21126,21127,21128,21129,21130,21131],{"id":20643,"depth":311,"text":20644},{"id":1151,"depth":311,"text":1152},{"id":20682,"depth":311,"text":20683},{"id":20747,"depth":311,"text":20748},{"id":20794,"depth":311,"text":20795},{"id":20836,"depth":311,"text":20837},{"id":20864,"depth":311,"text":20865},{"id":20906,"depth":311,"text":20907},{"id":886,"depth":311,"text":887},{"id":906,"depth":311,"text":907},{"id":959,"depth":311,"text":960},{"id":975,"depth":311,"text":976},"Learn what AI search optimization can actually control, what it can only influence, and why rankings, citations, retrieval, and generated answers cannot be guaranteed.","\u002Fai-search-optimization.png","Image of AI Search Optimization",{},"\u002Fblog\u002Fen\u002Fai-search-control","2026-09-10",{"title":20638,"description":21132},"ai-search-control","blog\u002Fen\u002Fai-search-control","o9cd6XDFv-1b4igYYmGcFRkzAgrOeVmwGfcE-WxL-7A",{"id":21143,"title":21144,"author":7,"body":21145,"category":19900,"description":21475,"draft":1097,"extension":1098,"featured":1099,"image":21476,"imageAlt":21477,"locale":1102,"meta":21478,"navigation":1099,"path":21479,"publishedAt":21137,"seo":21480,"slug":21481,"stem":21482,"translationKey":21481,"updatedAt":21137,"__hash__":21483},"blog\u002Fblog\u002Fen\u002Fgeo-exist-google-documentation.md","Does GEO Really Exist? What Google Actually Says",{"type":9,"value":21146,"toc":21462},[21147,21151,21154,21165,21167,21172,21175,21178,21183,21187,21194,21197,21204,21207,21211,21214,21220,21223,21229,21235,21238,21242,21248,21251,21277,21280,21284,21287,21293,21296,21303,21307,21313,21316,21319,21323,21326,21333,21336,21339,21343,21349,21355,21361,21364,21367,21369,21375,21381,21384,21386],[12,21148,21150],{"id":21149},"does-geo-really-exist-what-google-documents","Does GEO Really Exist? What Google Documents",[17,21152,21153],{},"Generative Engine Optimization, or GEO, is real—but probably not in the way many marketing claims suggest. The term describes efforts to improve a website’s visibility inside AI-generated answers, citations, and supporting links. It also has an academic foundation: a 2024 KDD paper formalized GEO as an optimization framework for generative search systems.",[17,21155,21156,21157,21160,21161,21164],{},"But when the question is specifically about ",[21,21158,21159],{},"Google Search",", the distinction becomes important. Google now explicitly discusses GEO and AEO in its own documentation, yet says that optimizing for generative AI experiences such as ",[21,21162,21163],{},"AI Overviews and AI Mode is still SEO from Google Search’s perspective",". Google has not documented a separate set of “GEO ranking factors,” a special GEO schema, or a secret technical layer that replaces traditional SEO.",[12,21166,1152],{"id":1151},[17,21168,21169],{},[21,21170,21171],{},"Yes, GEO exists as a concept, research field, and industry term. But Google does not document GEO as a separate optimization system from SEO.",[17,21173,21174],{},"Google’s current guidance says its generative AI features rely on its core Search ranking and quality systems. They add techniques such as retrieval-augmented generation and query fan-out, but the website fundamentals remain familiar: crawlability, indexability, useful content, technical clarity, and good user experience.",[17,21176,21177],{},"That means a useful distinction is:",[17,21179,21180],{},[21,21181,21182],{},"GEO describes a visibility goal. SEO remains the documented foundation for achieving that goal in Google Search.",[12,21184,21186],{"id":21185},"where-geo-came-from","Where GEO Came From",[17,21188,21189,21190,21193],{},"The academic paper ",[1625,21191,21192],{},"GEO: Generative Engine Optimization",", presented at KDD 2024, proposed a framework for improving how sources appear inside answers produced by generative engines. Instead of measuring only traditional ranking positions, the researchers considered visibility inside generated responses and citations.",[17,21195,21196],{},"Their GEO-bench experiments covered 10,000 queries, and some tested optimization approaches produced visibility improvements of up to 40%. The researchers also reported different effects across domains and systems.",[17,21198,21199,21200,21203],{},"That ",[21,21201,21202],{},"does not mean adding citations or statistics will increase Google AI visibility by 40%",". It was a result from a particular research methodology, benchmark, and set of generative systems—not a Google ranking guarantee.",[17,21205,21206],{},"The paper is still important because it gave a formal name to a real problem: traditional search results rank links, while generative systems can retrieve several sources, synthesize them, and cite those sources inside an answer.",[12,21208,21210],{"id":21209},"what-google-says","What Google Says",[17,21212,21213],{},"Google’s July 2026 generative AI optimization guide removes much of the ambiguity.",[17,21215,21216,21217,174],{},"Google explicitly defines AEO as “answer engine optimization” and GEO as “generative engine optimization.” It acknowledges that both terms are commonly used for improving visibility in AI search experiences. However, Google states that, from its perspective, ",[21,21218,21219],{},"optimizing for generative AI Search is optimizing for the Search experience—and is therefore still SEO",[17,21221,21222],{},"Google also documents two important mechanisms behind its AI search experiences.",[17,21224,21225,21228],{},[21,21226,21227],{},"Retrieval-augmented generation (RAG)"," uses Google Search systems to retrieve relevant and current pages from the Search index before generating an answer.",[17,21230,21231,21234],{},[21,21232,21233],{},"Query fan-out"," lets the model issue several related searches around a user’s original question. A complex query may therefore retrieve pages relevant to different subtopics rather than depend on one exact keyword match.",[17,21236,21237],{},"This explains why AI search can change discovery patterns without creating an entirely separate web optimization discipline.",[12,21239,21241],{"id":21240},"what-google-requires","What Google Requires",[17,21243,21244,21245,21247],{},"For a page to be eligible as a supporting link in Google’s generative AI Search features, it needs to be indexed and eligible to appear in Search with a snippet. Google’s minimum Search requirements include allowing Googlebot access, returning a successful HTTP ",[129,21246,1716],{}," response, and providing indexable content. Eligibility does not guarantee that Google will index, rank, or cite the page.",[17,21249,21250],{},"Google’s documented priorities remain largely familiar:",[1640,21252,21253,21256,21259,21262,21265,21268,21271,21274],{},[981,21254,21255],{},"create valuable, original, people-first content;",[981,21257,21258],{},"make important content crawlable and available in textual form;",[981,21260,21261],{},"maintain a clear technical structure;",[981,21263,21264],{},"use internal links so pages can be discovered;",[981,21266,21267],{},"provide a strong page experience;",[981,21269,21270],{},"use relevant images and video when useful;",[981,21272,21273],{},"keep structured data consistent with visible content;",[981,21275,21276],{},"maintain accurate Merchant Center or Business Profile data where applicable.",[17,21278,21279],{},"This is not evidence that “nothing changed.” The retrieval experience changed considerably. What Google rejects is the assumption that those changes require a completely separate collection of technical tricks.",[12,21281,21283],{"id":21282},"what-geo-does-not-require","What GEO Does Not Require",[17,21285,21286],{},"Several popular GEO recommendations are now directly addressed by Google.",[17,21288,19885,21289,21292],{},[21,21290,21291],{},"llms.txt is not used by Google Search"," and neither improves nor harms Google Search visibility. There is no special schema.org markup required for AI Overviews or AI Mode. Pages do not need to be artificially divided into tiny “AI-friendly chunks,” and publishers do not need to rewrite normal content into a special machine-oriented writing style.",[17,21294,21295],{},"Structured data can still be valuable because it helps Google understand certain entities and makes pages eligible for supported rich results. That is normal structured-data SEO—not a special GEO markup layer.",[17,21297,21298,21299,21302],{},"Another distinction matters: ",[21,21300,21301],{},"Google-Extended is not a GEO ranking control",". Google states that the token can control certain uses of crawled content for Gemini training and grounding outside ordinary Search inclusion, but it does not affect inclusion or ranking in Google Search.",[12,21304,21306],{"id":21305},"a-new-search-control","A New Search Control",[17,21308,21309,21310,21312],{},"Google introduced a more direct control in 2026. As of ",[21,21311,19918],{},", the Search generative AI control was rolled out to websites worldwide through Search Console.",[17,21314,21315],{},"Publishers can include or exclude their site from supported generative AI Search experiences such as AI Overviews, AI Mode, and generative AI features in Discover. Inclusion is the default. Exclusion prevents the site’s links and content from appearing or being used to ground responses in those features, while Google says the setting does not affect ranking or inclusion in other parts of Search.",[17,21317,21318],{},"That is a concrete Google-documented AI Search mechanism—not a speculative GEO tactic.",[12,21320,21322],{"id":21321},"geo-is-measurable","GEO Is Measurable",[17,21324,21325],{},"Another major change is measurement.",[17,21327,21328,21329,21332],{},"Google announced dedicated ",[21,21330,21331],{},"Generative AI performance reports"," in Search Console in June 2026 and stated that they had rolled out worldwide by August 31, 2026. The Search report covers impressions from AI Overviews and AI Mode and can break visibility down by pages, countries, devices, and dates.",[17,21334,21335],{},"This gives site owners first-party evidence for something that previously depended heavily on third-party tracking.",[17,21337,21338],{},"It also changes how GEO should be approached: instead of asking whether a supposed AI optimization trick “works,” teams can increasingly measure whether their actual pages gain or lose visibility in generative Search.",[12,21340,21342],{"id":21341},"the-practical-model","The Practical Model",[17,21344,21345,21346,174],{},"The most defensible way to think about GEO today is not as a replacement for SEO but as ",[21,21347,21348],{},"SEO applied to a different search presentation and retrieval environment",[17,21350,21351,21352],{},"Traditional SEO often asks: ",[1625,21353,21354],{},"Can this page be discovered, understood, indexed, ranked, and clicked?",[17,21356,21357,21358],{},"Generative search adds questions such as: ",[1625,21359,21360],{},"Can this page provide useful evidence for a broader or more complex query? Can its information support part of an AI-generated answer? Does the page contain something genuinely useful that competing commodity content does not?",[17,21362,21363],{},"Google specifically emphasizes unique, useful, non-commodity content in its current generative AI guidance. That can include first-hand experience, original analysis, expert knowledge, strong supporting media, or information that goes beyond merely rewriting what already exists online.",[17,21365,21366],{},"That is a meaningful evolution in strategy. It still does not create a documented “GEO algorithm.”",[12,21368,960],{"id":959},[17,21370,21371,21372,21374],{},"GEO is real enough to describe an emerging optimization problem, and the term now appears in Google’s own documentation. What is ",[21,21373,151],{}," supported by Google’s documentation is the idea that GEO is a secret replacement for SEO with its own special markup, content format, or known ranking formula.",[17,21376,21377,21378],{},"For Google Search, the evidence currently points to a simpler model: ",[21,21379,21380],{},"strong SEO makes content eligible and understandable; valuable information makes the page worth retrieving; generative systems then use Search infrastructure, RAG, query fan-out, and AI models to decide which sources help answer a particular question.",[17,21382,21383],{},"So use GEO as a useful strategic label if it helps your team think about AI visibility—but test every “GEO tactic” against documented Search behavior and measurable evidence.",[12,21385,976],{"id":975},[978,21387,21388,21397,21407,21417,21424,21433,21442,21451],{},[981,21389,1023,21390,21392,21393],{},[1625,21391,19032],{},". Last updated July 10, 2026. ",[29,21394,21396],{"href":19036,"rel":21395},[33],"Google AI optimization guide",[981,21398,19073,21399,21402,21403],{},[1625,21400,21401],{},"Search generative AI control",". Worldwide rollout noted August 31, 2026. ",[29,21404,21401],{"href":21405,"rel":21406},"https:\u002F\u002Fsupport.google.com\u002Fwebmasters\u002Fanswer\u002F16908024?hl=en&utm_source=chatgpt.com",[33],[981,21408,21409,21410,21412,21413],{},"Google Search Central Blog — ",[1625,21411,19064],{},". June 3, 2026; worldwide rollout noted August 31, 2026. ",[29,21414,21416],{"href":19068,"rel":21415},[33],"Generative AI performance reports announcement",[981,21418,19073,21419,1057,21421],{},[1625,21420,19076],{},[29,21422,19081],{"href":18892,"rel":21423},[33],[981,21425,1023,21426,21428,21429],{},[1625,21427,5603],{},". Last updated December 18, 2025. ",[29,21430,5603],{"href":21431,"rel":21432},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fessentials\u002Ftechnical?hl=en&utm_source=chatgpt.com",[33],[981,21434,1023,21435,1027,21438],{},[1625,21436,21437],{},"Creating helpful, reliable, people-first content",[29,21439,21441],{"href":20055,"rel":21440},[33],"People-first content guidance",[981,21443,2814,21444,21446,21447],{},[1625,21445,21058],{},". Last updated July 14, 2026. ",[29,21448,21450],{"href":21062,"rel":21449},[33],"Google-Extended documentation",[981,21452,21453,21454,21456,21457],{},"Aggarwal, P., Murahari, V., Rajpurohit, T., Kalyan, A., Narasimhan, K., & Deshpande, A. — ",[1625,21455,21192],{},". KDD 2024. DOI: 10.1145\u002F3637528.3671900. ",[29,21458,21461],{"href":21459,"rel":21460},"https:\u002F\u002Farxiv.org\u002Fabs\u002F2311.09735?utm_source=chatgpt.com",[33],"GEO research paper",{"title":185,"searchDepth":311,"depth":311,"links":21463},[21464,21465,21466,21467,21468,21469,21470,21471,21472,21473,21474],{"id":21149,"depth":311,"text":21150},{"id":1151,"depth":311,"text":1152},{"id":21185,"depth":311,"text":21186},{"id":21209,"depth":311,"text":21210},{"id":21240,"depth":311,"text":21241},{"id":21282,"depth":311,"text":21283},{"id":21305,"depth":311,"text":21306},{"id":21321,"depth":311,"text":21322},{"id":21341,"depth":311,"text":21342},{"id":959,"depth":311,"text":960},{"id":975,"depth":311,"text":976},"Does Generative Engine Optimization really exist? See what Google officially documents about GEO, AI Overviews, AI Mode, SEO, llms.txt, RAG, query fan-out, and AI visibility.","\u002Fgeo-google.png","Images of Google documentation",{},"\u002Fblog\u002Fen\u002Fgeo-exist-google-documentation",{"title":21144,"description":21475},"does-geo-really-exist-google-documentation","blog\u002Fen\u002Fgeo-exist-google-documentation","aeuBUD3Iw5V-hOUfrE90RpDVlUUthitkVBDgAnUnlBw",{"id":21485,"title":21486,"author":7,"body":21487,"category":4925,"description":21916,"draft":1097,"extension":1098,"featured":1099,"image":21917,"imageAlt":21918,"locale":1102,"meta":21919,"navigation":1099,"path":21920,"publishedAt":21137,"seo":21921,"slug":21922,"stem":21923,"translationKey":21922,"updatedAt":21137,"__hash__":21924},"blog\u002Fblog\u002Fen\u002Fgoogle-ai-mode.md","What Is Google AI Mode? How It Works and SEO Impact",{"type":9,"value":21488,"toc":21900},[21489,21493,21496,21499,21501,21506,21509,21519,21523,21526,21573,21576,21581,21585,21590,21593,21598,21601,21604,21610,21615,21618,21622,21625,21628,21633,21636,21641,21644,21655,21658,21662,21668,21671,21674,21696,21702,21711,21716,21720,21722,21731,21734,21737,21739,21745,21751,21757,21763,21765,21768,21771,21777,21779,21783,21786,21790,21793,21797,21800,21804,21807,21809,21815,21818,21820],[12,21490,21492],{"id":21491},"what-is-google-ai-mode","What Is Google AI Mode?",[17,21494,21495],{},"Google AI Mode is a generative AI search experience built directly into Google Search. Instead of responding mainly with a ranked list of webpages, it can interpret a complex question, search across multiple related topics, synthesize information, provide supporting links, and continue the search through follow-up questions.",[17,21497,21498],{},"That makes AI Mode closer to a conversation with a search system than a traditional one-query, one-results-page interaction. But it does not replace the web underneath Google Search. Google says AI Mode still relies on its Search index, ranking systems, web content, and other data sources to ground its responses.",[12,21500,1152],{"id":1151},[17,21502,21503],{},[21,21504,21505],{},"Google AI Mode is Google's conversational, AI-powered Search experience for questions that require exploration, reasoning, comparison, or multiple searches.",[17,21507,21508],{},"A user can ask a detailed question using text, voice, images, or supported files, receive an AI-generated response with links to relevant websites, and then continue with follow-up questions without starting the search again.",[17,21510,21511,21512,21515,21516,174],{},"Google introduced AI Mode experimentally on ",[21,21513,21514],{},"March 5, 2025",", then began rolling it out to U.S. Search users without requiring Search Labs on ",[21,21517,21518],{},"May 20, 2025",[12,21520,21522],{"id":21521},"ai-mode-vs-google-search","AI Mode vs Google Search",[17,21524,21525],{},"The easiest way to understand AI Mode is to compare it with familiar Search experiences.",[69,21527,21528,21540],{},[72,21529,21530],{},[75,21531,21532,21535,21537],{},[78,21533,21534],{},"Experience",[78,21536,12112],{},[78,21538,21539],{},"Typical output",[85,21541,21542,21553,21563],{},[75,21543,21544,21547,21550],{},[90,21545,21546],{},"Traditional Search",[90,21548,21549],{},"Find relevant webpages and information",[90,21551,21552],{},"Ranked results, snippets, images, maps and other Search features",[75,21554,21555,21557,21560],{},[90,21556,18479],{},[90,21558,21559],{},"Quickly summarize a question within Search",[90,21561,21562],{},"AI-generated overview plus supporting links",[75,21564,21565,21567,21570],{},[90,21566,18482],{},[90,21568,21569],{},"Explore complex questions conversationally",[90,21571,21572],{},"Longer AI response, multiple supporting sources and follow-up interaction",[17,21574,21575],{},"AI Overviews are designed to appear when Google determines that an AI-generated summary adds value to the normal results page. AI Mode is a more dedicated experience for deeper exploration, comparisons, reasoning and multi-step questions. Google also notes that AI Overviews and AI Mode may use different models and techniques, so they do not necessarily produce the same answers or links.",[17,21577,21578],{},[161,21579,21580],{},"INTERNAL LINK: Google AI Overviews Explained",[12,21582,21584],{"id":21583},"how-ai-mode-works","How AI Mode Works",[17,21586,21587,21588,174],{},"One of the most important mechanisms behind AI Mode is ",[21,21589,18730],{},[17,21591,21592],{},"Imagine asking:",[1501,21594,21595],{},[17,21596,21597],{},"“What is the best hosting setup for a multilingual ecommerce site with users in Europe and Central Asia?”",[17,21599,21600],{},"A traditional search might process that mainly as one query. AI Mode can break the problem into related searches covering topics such as hosting regions, latency, ecommerce infrastructure, multilingual websites and other relevant considerations.",[17,21602,21603],{},"Google describes query fan-out as generating multiple related queries concurrently, retrieving information for those subtopics and then combining the results into a response.",[17,21605,21606,21607,21609],{},"Google's 2026 Search documentation also explicitly describes ",[21,21608,19704],{}," as part of its generative Search systems. In simplified terms:",[17,21611,21612],{},[21,21613,21614],{},"User question → related searches → relevant Search-index pages → retrieved information → grounded AI response",[17,21616,21617],{},"The important point is that the model is not expected to answer only from information encoded during model training. Google can retrieve fresh information from its Search systems and use that information while generating the response.",[12,21619,21621],{"id":21620},"why-ai-mode-matters","Why AI Mode Matters",[17,21623,21624],{},"AI Mode changes what a search query can look like.",[17,21626,21627],{},"Instead of reducing a problem to short keywords such as:",[17,21629,21630],{},[129,21631,21632],{},"best laptop video editing",[17,21634,21635],{},"a user can ask:",[17,21637,21638],{},[129,21639,21640],{},"I edit 4K video while travelling, need at least eight hours of battery life and don't want a laptop heavier than 1.8 kg. What should I compare before buying?",[17,21642,21643],{},"The search system can interpret the constraints, investigate multiple parts of the problem and continue the conversation when the user adds another requirement.",[17,21645,21646,21647,21650,21651,21654],{},"Google reported in May 2026 that the average AI Mode query in the U.S. was approximately ",[21,21648,21649],{},"three times longer than a traditional Search query",". Google also reported that AI Mode had surpassed ",[21,21652,21653],{},"one billion monthly active users globally"," by that point. These figures are Google's own usage data, not independent measurements.",[17,21656,21657],{},"For website owners, this means Search visibility is increasingly about answering complex information needs rather than matching only one short keyword.",[12,21659,21661],{"id":21660},"what-ai-mode-means-for-seo","What AI Mode Means for SEO",[17,21663,21664,21665,21667],{},"AI Mode does ",[21,21666,151],{}," create a completely separate set of SEO rules.",[17,21669,21670],{},"Google's current documentation says its generative Search features are rooted in core Search ranking and quality systems. To be eligible as a supporting link, a page still needs to be indexable and eligible to appear in Google Search.",[17,21672,21673],{},"Google's guidance continues to emphasize fundamentals such as:",[1640,21675,21676,21679,21681,21684,21687,21690,21693],{},[981,21677,21678],{},"crawlable and indexable pages;",[981,21680,18811],{},[981,21682,21683],{},"important information available as text;",[981,21685,21686],{},"good page experience;",[981,21688,21689],{},"relevant images and video where useful;",[981,21691,21692],{},"structured data that matches visible content;",[981,21694,21695],{},"unique, useful and people-first information.",[17,21697,21698,21699,21701],{},"Since 2026, Google also provides a ",[21,21700,21401],{}," in Search Console. Google's current documentation states that a site must be included in Search generative AI features through this control to be eligible for those experiences.",[17,21703,21704,21705,21707,21708,21710],{},"There is no documented requirement to create special AI schema, rewrite every page into small “AI chunks,” or create an ",[129,21706,4660],{}," file for Google Search. Google's July 2026 guidance explicitly says Google Search does not use ",[129,21709,4660],{}," for generative Search visibility and that no special schema.org markup is required.",[17,21712,21713],{},[161,21714,21715],{},"INTERNAL LINK: SEO vs AEO vs GEO",[12,21717,21719],{"id":21718},"measuring-ai-mode-visibility","Measuring AI Mode Visibility",[17,21721,19912],{},[17,21723,21724,21725,21727,21728,21730],{},"Google launched dedicated ",[21,21726,21331],{}," in Search Console in June 2026 and stated that the reports had rolled out to websites worldwide by ",[21,21729,19918],{},". The Search report includes impressions from AI Overviews and AI Mode and can show visibility by page, country, device and date.",[17,21732,21733],{},"This is important because AI visibility no longer has to be inferred entirely from ordinary organic traffic.",[17,21735,21736],{},"However, an impression does not tell you why a particular page was selected, what fan-out query caused it to appear, or how Google's internal models evaluated the page. Google does not publicly expose that level of ranking detail.",[12,21738,859],{"id":858},[17,21740,21741,21744],{},[21,21742,21743],{},"“AI Mode no longer uses normal Google Search.”","\nIncorrect. Google states that its generative features use core Search systems and retrieve relevant web content to ground responses.",[17,21746,21747,21750],{},[21,21748,21749],{},"“You need special GEO markup.”","\nGoogle currently documents no special AI Mode schema or machine-readable file requirement.",[17,21752,21753,21756],{},[21,21754,21755],{},"“Ranking first for one keyword guarantees an AI Mode citation.”","\nThere is no public evidence supporting that rule. Query fan-out means AI Mode may retrieve pages for related subtopics that differ from the user's original wording.",[17,21758,21759,21762],{},[21,21760,21761],{},"“AI Mode is always correct.”","\nGoogle itself warns that AI Mode can misinterpret information or miss context and recommends checking important information against multiple sources.",[12,21764,887],{"id":886},[17,21766,21767],{},"Treat AI Mode visibility as an extension of strong SEO rather than a separate collection of AI hacks.",[17,21769,21770],{},"Make important pages technically accessible, answer the actual problem behind the query, provide information that adds something beyond generic summaries, and demonstrate useful expertise through evidence, examples, original experience or data where appropriate.",[17,21772,21773,21774,21776],{},"Query fan-out makes topical relevance increasingly important, but that does ",[21,21775,151],{}," mean generating hundreds of pages for every possible subquery. Google's current guidance specifically warns against scaled content created primarily to manipulate Search systems.",[12,21778,907],{"id":906},[909,21780,21782],{"id":21781},"is-google-ai-mode-free","Is Google AI Mode free?",[17,21784,21785],{},"Access and individual capabilities can vary by country, account and feature. Google provides AI Mode directly through Google Search in supported markets, while some experimental or advanced capabilities may have different eligibility requirements.",[220,21787,21789],{"id":21788},"is-ai-mode-replacing-search","Is AI Mode replacing Search?",[17,21791,21792],{},"Google presents AI Mode as part of the evolution of Search, not as a separate replacement for the underlying Search infrastructure. Its technologies are increasingly being integrated into the broader Search experience.",[909,21794,21796],{"id":21795},"can-websites-appear-in-ai-mode","Can websites appear in AI Mode?",[17,21798,21799],{},"Yes. AI Mode provides links to supporting web pages. Google says eligible pages must meet normal Search technical requirements and be indexable and eligible for Search snippets.",[909,21801,21803],{"id":21802},"does-ai-mode-use-rag","Does AI Mode use RAG?",[17,21805,21806],{},"Google's July 2026 generative AI optimization documentation explicitly describes retrieval-augmented generation, or RAG, as one of the AI techniques used by Google's generative Search features.",[12,21808,960],{"id":959},[17,21810,21811,21812,174],{},"Google AI Mode changes Search from a mostly query-and-results interaction into a system that can ",[21,21813,21814],{},"investigate a question, retrieve information across related searches, synthesize an answer and continue the conversation",[17,21816,21817],{},"For users, that means more natural and complex questions. For website owners, the practical lesson is simpler than many AI-search theories suggest: strong technical SEO remains necessary, but useful, distinctive and trustworthy information becomes increasingly important when Search can explore many parts of a question at once.",[12,21819,976],{"id":975},[978,21821,21822,21833,21844,21853,21862,21870,21880,21890],{},[981,21823,21824,21827,21828],{},[21,21825,21826],{},"Google — “Expanding AI Overviews and introducing AI Mode”",", March 5, 2025. ",[29,21829,21832],{"href":21830,"rel":21831},"https:\u002F\u002Fblog.google\u002Fproducts-and-platforms\u002Fproducts\u002Fsearch\u002Fai-mode-search\u002F?utm_source=chatgpt.com",[33],"Google Blog source",[981,21834,21835,21838,21839],{},[21,21836,21837],{},"Google — “AI in Search: Going beyond information to intelligence”",", May 20, 2025. ",[29,21840,21843],{"href":21841,"rel":21842},"https:\u002F\u002Fblog.google\u002Fproducts-and-platforms\u002Fproducts\u002Fsearch\u002Fgoogle-search-ai-mode-update\u002F?utm_source=chatgpt.com",[33],"Google I\u002FO 2025 AI Mode announcement",[981,21845,21846,1984,21849],{},[21,21847,21848],{},"Google Search Help — “Get AI-powered responses with AI Mode in Google Search.”",[29,21850,21852],{"href":18516,"rel":21851},[33],"Google Search Help",[981,21854,21855,21035,21858],{},[21,21856,21857],{},"Google Search Central — “AI features and your website”",[29,21859,21861],{"href":19025,"rel":21860},[33],"Google Search Central documentation",[981,21863,21864,19033,21867],{},[21,21865,21866],{},"Google Search Central — “Optimizing your website for generative AI features on Google Search”",[29,21868,19038],{"href":19036,"rel":21869},[33],[981,21871,21872,19054,21875],{},[21,21873,21874],{},"Google — “How AI Mode is changing the way people search in the U.S.”",[29,21876,21879],{"href":21877,"rel":21878},"https:\u002F\u002Fblog.google\u002Fproducts-and-platforms\u002Fproducts\u002Fsearch\u002Fai-mode-us-insights\u002F?utm_source=chatgpt.com",[33],"Google AI Mode usage report",[981,21881,21882,21885,21886],{},[21,21883,21884],{},"Google Search Central — “Introducing Search Generative AI performance reports in Search Console”",", June 3, 2026; rollout note updated August 31, 2026. ",[29,21887,21889],{"href":19068,"rel":21888},[33],"Google Search Console announcement",[981,21891,21892,21895,21896],{},[21,21893,21894],{},"Google Search Console Help — “Generative AI performance report (Search)”",", rollout note August 31, 2026. ",[29,21897,21899],{"href":19079,"rel":21898},[33],"Search Console report documentation",{"title":185,"searchDepth":311,"depth":311,"links":21901},[21902,21903,21904,21905,21906,21907,21908,21909,21910,21911,21914,21915],{"id":21491,"depth":311,"text":21492},{"id":1151,"depth":311,"text":1152},{"id":21521,"depth":311,"text":21522},{"id":21583,"depth":311,"text":21584},{"id":21620,"depth":311,"text":21621},{"id":21660,"depth":311,"text":21661},{"id":21718,"depth":311,"text":21719},{"id":858,"depth":311,"text":859},{"id":886,"depth":311,"text":887},{"id":906,"depth":311,"text":907,"children":21912},[21913],{"id":21788,"depth":325,"text":21789},{"id":959,"depth":311,"text":960},{"id":975,"depth":311,"text":976},"Learn what Google AI Mode is, how query fan-out and RAG work, how it differs from AI Overviews, and what it means for SEO and Search visibility.","\u002Fgoogle-ai-mode.png","Image of Google AI",{},"\u002Fblog\u002Fen\u002Fgoogle-ai-mode",{"title":21486,"description":21916},"google-ai-mode","blog\u002Fen\u002Fgoogle-ai-mode","zldisC4k0LxFq68sCfhGjqKMQMueX_Z3YFdBXMyHkdY",{"id":21926,"title":21927,"author":7,"body":21928,"category":4925,"description":22381,"draft":1097,"extension":1098,"featured":1099,"image":22382,"imageAlt":21918,"locale":1102,"meta":22383,"navigation":1099,"path":22384,"publishedAt":21137,"seo":22385,"slug":22386,"stem":22387,"translationKey":22386,"updatedAt":21137,"__hash__":22388},"blog\u002Fblog\u002Fen\u002Fgoogle-ai.md","What Are Google AI Overviews? How They Work",{"type":9,"value":21929,"toc":22361},[21930,21934,21937,21944,21946,21952,21958,21960,22024,22035,22039,22042,22051,22060,22066,22069,22076,22079,22085,22090,22094,22097,22100,22106,22112,22116,22120,22123,22133,22136,22139,22144,22148,22158,22161,22179,22182,22184,22186,22195,22201,22204,22206,22210,22213,22217,22223,22227,22233,22235,22238,22241,22244,22246,22250,22253,22257,22260,22264,22270,22274,22280,22282,22285,22292,22294],[12,21931,21933],{"id":21932},"what-are-google-ai-overviews","What Are Google AI Overviews?",[17,21935,21936],{},"Google AI Overviews are changing what a search result can look like. Instead of showing only a list of links, Google may generate a short answer that brings together information relevant to the query, while still providing links to websites where users can investigate further.",[17,21938,21939,21940,35],{},"That distinction matters. An AI Overview is not simply a chatbot placed above Google results, and it does not appear for every search. Google says its systems show an AI Overview when generative AI is expected to add value beyond the traditional search experience. (",[29,21941,18518],{"href":21942,"rel":21943},"https:\u002F\u002Fsupport.google.com\u002Fwebsearch\u002Fanswer\u002F14901683?hl=en&utm_source=chatgpt.com",[33],[12,21945,1152],{"id":1151},[17,21947,1451,21948,21951],{},[21,21949,21950],{},"Google AI Overview"," is an AI-generated summary that can appear in Google Search results. It is designed to help users quickly understand a question or topic using information connected to Google Search and supporting web sources.",[17,21953,21954,21955,35],{},"The overview can contain explanations, recommendations, comparisons and links to relevant pages. Google describes it as a starting point for further exploration rather than a replacement for the web. (",[29,21956,18518],{"href":21942,"rel":21957},[33],[12,21959,2081],{"id":2080},[69,21961,21962,21970],{},[72,21963,21964],{},[75,21965,21966,21968],{},[78,21967,12094],{},[78,21969,12097],{},[85,21971,21972,21979,21986,21993,22000,22008,22016],{},[75,21973,21974,21977],{},[90,21975,21976],{},"Is it AI-generated?",[90,21978,2106],{},[75,21980,21981,21984],{},[90,21982,21983],{},"Does every search show one?",[90,21985,7801],{},[75,21987,21988,21991],{},[90,21989,21990],{},"Does it link to websites?",[90,21992,2106],{},[75,21994,21995,21998],{},[90,21996,21997],{},"Is special AI markup required?",[90,21999,7801],{},[75,22001,22002,22005],{},[90,22003,22004],{},"Must a page be indexable?",[90,22006,22007],{},"Yes, to be eligible as a supporting link",[75,22009,22010,22013],{},[90,22011,22012],{},"Can users completely disable it?",[90,22014,22015],{},"No, but the Web filter can show text-based links",[75,22017,22018,22021],{},[90,22019,22020],{},"Can publishers restrict previews?",[90,22022,22023],{},"Yes, through existing Search preview controls",[17,22025,22026,22027,22030,22031,35],{},"Google reported in August 2026 that AI Overviews had more than ",[21,22028,22029],{},"2.5 billion monthly active users",", indicating that the feature is no longer a small Search experiment. (",[29,22032,10318],{"href":22033,"rel":22034},"https:\u002F\u002Fblog.google\u002Fproducts-and-platforms\u002Fproducts\u002Fsearch\u002Fnew-controls-website-owners\u002F?utm_source=chatgpt.com",[33],[12,22036,22038],{"id":22037},"how-ai-overviews-work","How AI Overviews Work",[17,22040,22041],{},"The simple explanation is that Google searches for relevant information and then uses generative AI to assemble a useful answer.",[17,22043,22044,22045,22047,22048,35],{},"The technical mechanism is more involved. Google describes its generative Search features as being rooted in its existing Search ranking and quality systems. Its current documentation specifically discusses ",[21,22046,19704],{},", or grounding, where relevant and relatively fresh information is retrieved from Google's Search index to support the generated response. (",[29,22049,157],{"href":19036,"rel":22050},[33],[17,22052,22053,22054,22056,22057,35],{},"AI Overviews and AI Mode may also use a technique Google calls ",[21,22055,18730],{},". Instead of treating a complex question as one search, the system can issue multiple related searches across subtopics and data sources, discover supporting pages and use that information when developing the response. (",[29,22058,157],{"href":19025,"rel":22059},[33],[17,22061,22062,22063,35],{},"The exact implementation continues to evolve. On January 27, 2026, Google announced that Gemini 3 had become the default model for AI Overviews. That model choice should be treated as a product implementation detail that Google can change over time, not as a permanent characteristic of AI Overviews. (",[29,22064,10318],{"href":18756,"rel":22065},[33],[12,22067,22068],{"id":19105},"AI Overviews vs AI Mode",[17,22070,22071,22072,22075],{},"AI Overviews and ",[21,22073,22074],{},"Google AI Mode"," are related but different experiences.",[17,22077,22078],{},"An AI Overview appears within a normal Google Search results page when Google's systems determine that an AI-generated summary would be useful. AI Mode is a more conversational Search experience built for deeper exploration, follow-up questions, reasoning and more complex comparisons.",[17,22080,22081,22082,35],{},"Google explicitly notes that the two features may use different models and techniques, so the sources and answers shown for the same topic can differ. (",[29,22083,157],{"href":19025,"rel":22084},[33],[17,22086,22087],{},[161,22088,22089],{},"INTERNAL LINK: What Is Google AI Mode?",[12,22091,22093],{"id":22092},"why-ai-overviews-matter","Why AI Overviews Matter",[17,22095,22096],{},"For users, AI Overviews can reduce the work required to combine information from several search results. A question that previously required opening multiple pages may receive an initial synthesis directly in Search.",[17,22098,22099],{},"For website owners, the important change is that visibility is no longer limited to appearing as one traditional blue link. A page can potentially become a supporting source within an AI-generated response.",[17,22101,22102,22103,22105],{},"However, this does ",[21,22104,151],{}," create a separate technical shortcut for ranking in AI Overviews.",[17,22107,22108,22109,35],{},"Google's documentation says there are no additional technical requirements for appearing in AI Overviews or AI Mode. To be eligible as a supporting link, a page must be indexed and eligible to appear in Google Search with a snippet. Meeting those conditions does not guarantee inclusion. (",[29,22110,157],{"href":19025,"rel":22111},[33],[17,22113,22114],{},[161,22115,21715],{},[12,22117,22119],{"id":22118},"seo-for-ai-overviews","SEO for AI Overviews",[17,22121,22122],{},"The strongest starting point is still conventional technical and content SEO.",[17,22124,22125,22126,22128,22129,35],{},"Google recommends maintaining crawlable, indexable pages and creating useful, reliable, people-first content. Its newer generative-AI guidance also emphasizes ",[21,22127,19740],{},": material that contributes real value rather than reproducing information already available everywhere else. (",[29,22130,157],{"href":22131,"rel":22132},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fblog\u002F2025\u002F05\u002Fsucceeding-in-ai-search?hl=en&utm_source=chatgpt.com",[33],[17,22134,22135],{},"This means there is currently no evidence-based reason to add invented \"AI Overview schema,\" special AI keywords or hidden LLM-targeted text.",[17,22137,22138],{},"A better approach is to make important information explicit, well structured and supported by genuine expertise, examples, original evidence or useful analysis.",[17,22140,22141],{},[161,22142,22143],{},"INTERNAL LINK: What Is Non-Commodity Content?",[12,22145,22147],{"id":22146},"controlling-ai-visibility","Controlling AI Visibility",[17,22149,22150,22151,22154,22155,35],{},"Users cannot completely disable AI Overviews as a Search feature. Google says users who want a simpler result page can select the ",[21,22152,22153],{},"Web"," filter, which displays text-based web links without features such as AI Overviews. (",[29,22156,18518],{"href":21942,"rel":22157},[33],[17,22159,22160],{},"Website owners have different controls.",[17,22162,22163,22164,20781,22166,22168,22169,22171,22172,22174,22175,35],{},"Google says standard Search preview directives also apply to its AI Search experiences. ",[129,22165,20771],{},[129,22167,20774],{}," can limit the amount available. ",[129,22170,20777],{}," can exclude specific page sections, and ",[129,22173,1514],{}," removes the page from Google Search eligibility altogether. (",[29,22176,157],{"href":22177,"rel":22178},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fcrawling-indexing\u002Frobots-meta-tag?authuser=451499271&utm_source=chatgpt.com",[33],[17,22180,22181],{},"These controls should therefore be chosen according to the publisher's Search visibility goals, not added casually.",[12,22183,18882],{"id":18881},[17,22185,19912],{},[17,22187,22188,22189,22192,22193,174],{},"Google introduced dedicated ",[21,22190,22191],{},"Search Generative AI performance reports"," in Search Console on June 3, 2026. Google later stated that the insights had rolled out to all websites worldwide by ",[21,22194,19918],{},[17,22196,22197,22198,35],{},"The reports provide a dedicated view of visibility within generative AI Search features, including AI Overviews and AI Mode, while this activity continues to contribute to overall Search performance data. (",[29,22199,157],{"href":19068,"rel":22200},[33],[17,22202,22203],{},"For SEO teams, this makes Search Console the primary first-party measurement source rather than relying only on manual AI Overview tracking.",[12,22205,859],{"id":858},[220,22207,22209],{"id":22208},"ai-overviews-replace-google-search","“AI Overviews replace Google Search.”",[17,22211,22212],{},"No. They are one feature inside Google Search and appear only when Google's systems determine they are useful.",[220,22214,22216],{"id":22215},"you-need-geo-instead-of-seo","“You need GEO instead of SEO.”",[17,22218,22219,22220,35],{},"Google's current guidance says established SEO practices remain relevant and there are no separate technical requirements for generative Search visibility. (",[29,22221,157],{"href":19036,"rel":22222},[33],[220,22224,22226],{"id":22225},"an-ai-overview-is-always-correct","“An AI Overview is always correct.”",[17,22228,22229,22230,35],{},"No. Google explicitly warns that generative AI responses can contain mistakes and recommends checking important information against supporting sources. (",[29,22231,18518],{"href":21942,"rel":22232},[33],[12,22234,887],{"id":886},[17,22236,22237],{},"Treat AI Overviews as an additional Search surface, not as a separate search engine requiring an entirely new technical foundation.",[17,22239,22240],{},"Keep pages crawlable and indexable, preserve strong technical SEO, answer the user's actual question clearly, and invest in information that contributes something useful beyond generic summaries. Then monitor Search Console to understand whether generative Search visibility is changing alongside traditional Search performance.",[17,22242,22243],{},"Optimization should follow what Google actually documents rather than assumptions about how an LLM might prefer content.",[12,22245,907],{"id":906},[909,22247,22249],{"id":22248},"are-ai-overviews-the-same-as-featured-snippets","Are AI Overviews the Same as Featured Snippets?",[17,22251,22252],{},"No. A featured snippet generally extracts or highlights information associated with a search result, while an AI Overview uses generative AI to synthesize a response supported by Search systems and web sources.",[909,22254,22256],{"id":22255},"can-websites-rank-in-ai-overviews","Can Websites Rank in AI Overviews?",[17,22258,22259],{},"Google does not describe AI Overview inclusion as a separate conventional ranking system. Pages can appear as supporting links, but eligibility does not guarantee that a page will be selected.",[909,22261,22263],{"id":22262},"does-structured-data-guarantee-inclusion","Does Structured Data Guarantee Inclusion?",[17,22265,22266,22267,35],{},"No. Google does not document structured data as a guarantee of AI Overview inclusion. Structured data should accurately represent visible page content and be used for the Search features it is designed to support. (",[29,22268,157],{"href":22131,"rel":22269},[33],[909,22271,22273],{"id":22272},"can-ai-overviews-be-wrong","Can AI Overviews Be Wrong?",[17,22275,22276,22277,35],{},"Yes. Google explicitly states that AI-generated responses can make mistakes, which is why important claims should still be verified against reliable sources. (",[29,22278,18518],{"href":21942,"rel":22279},[33],[12,22281,960],{"id":959},[17,22283,22284],{},"Google AI Overviews combine generative AI with Google's existing Search systems to produce synthesized answers supported by links to the web.",[17,22286,22287,22288,22291],{},"For users, they can make complex searches faster to understand. For publishers and SEO professionals, the central lesson is simpler than much of the surrounding AI-search hype: ",[21,22289,22290],{},"strong Search fundamentals still matter",". Google currently requires no special AI Overview optimization layer, while useful, indexable and genuinely valuable content remains the foundation for visibility.",[12,22293,976],{"id":975},[978,22295,22296,22305,22313,22322,22332,22341,22351],{},[981,22297,22298,22301,22302],{},[21,22299,22300],{},"Google Search Help — “Find information in faster & easier ways with AI Overviews in Google Search.”"," Accessed September 10, 2026. ",[29,22303,21852],{"href":21942,"rel":22304},[33],[981,22306,22307,13368,22310],{},[21,22308,22309],{},"Google Search Central — “AI features and your website.”",[29,22311,21861],{"href":19025,"rel":22312},[33],[981,22314,22315,22317,22318],{},[21,22316,20034],{}," Added to Google documentation in May 2026. ",[29,22319,22321],{"href":19036,"rel":22320},[33],"Generative AI optimization guide",[981,22323,22324,22327,22328],{},[21,22325,22326],{},"Google Search Central — “Robots Meta Tags Specifications.”"," 2026 documentation. ",[29,22329,22331],{"href":22177,"rel":22330},[33],"Robots meta tag documentation",[981,22333,22334,22337,22338],{},[21,22335,22336],{},"Google Search Central Blog — “Introducing Search Generative AI performance reports in Search Console.”"," June 3, 2026; rollout update August 31, 2026. ",[29,22339,22191],{"href":19068,"rel":22340},[33],[981,22342,22343,22346,22347],{},[21,22344,22345],{},"Google — “New opportunities, control and insights for website owners.”"," June 3, 2026; updated August 31, 2026. ",[29,22348,22350],{"href":22033,"rel":22349},[33],"Google Search publisher update",[981,22352,22353,22356,22357],{},[21,22354,22355],{},"Google — “Just ask anything: a seamless new Search experience.”"," January 27, 2026. ",[29,22358,22360],{"href":18756,"rel":22359},[33],"Google AI Overviews update",{"title":185,"searchDepth":311,"depth":311,"links":22362},[22363,22364,22365,22366,22367,22368,22369,22370,22371,22372,22377,22378,22379,22380],{"id":21932,"depth":311,"text":21933},{"id":1151,"depth":311,"text":1152},{"id":2080,"depth":311,"text":2081},{"id":22037,"depth":311,"text":22038},{"id":19105,"depth":311,"text":22068},{"id":22092,"depth":311,"text":22093},{"id":22118,"depth":311,"text":22119},{"id":22146,"depth":311,"text":22147},{"id":18881,"depth":311,"text":18882},{"id":858,"depth":311,"text":859,"children":22373},[22374,22375,22376],{"id":22208,"depth":325,"text":22209},{"id":22215,"depth":325,"text":22216},{"id":22225,"depth":325,"text":22226},{"id":886,"depth":311,"text":887},{"id":906,"depth":311,"text":907},{"id":959,"depth":311,"text":960},{"id":975,"depth":311,"text":976},"Learn what Google AI Overviews are, how they generate answers, how they differ from AI Mode, and what they mean for SEO and website visibility.","\u002Fgoole-ai-overview.png",{},"\u002Fblog\u002Fen\u002Fgoogle-ai",{"title":21927,"description":22381},"google-ai","blog\u002Fen\u002Fgoogle-ai","q8oNFnvfv8Eli9nX7k4dPbmUO-_xAOqdpodG9DM78xc",{"id":22390,"title":22391,"author":7,"body":22392,"category":2018,"description":22823,"draft":1097,"extension":1098,"featured":1099,"image":22824,"imageAlt":22825,"locale":1102,"meta":22826,"navigation":1099,"path":22827,"publishedAt":21137,"seo":22828,"slug":22829,"stem":22830,"translationKey":22829,"updatedAt":21137,"__hash__":22831},"blog\u002Fblog\u002Fen\u002Fnon-commodity-content.md","Non-Commodity Content: What It Means for AI Search",{"type":9,"value":22393,"toc":22810},[22394,22398,22401,22410,22413,22415,22420,22423,22429,22433,22439,22442,22496,22503,22509,22513,22522,22525,22528,22536,22539,22543,22546,22584,22587,22592,22596,22599,22606,22609,22614,22617,22621,22624,22631,22639,22645,22649,22652,22655,22658,22665,22669,22672,22678,22684,22687,22689,22696,22699,22702,22704],[12,22395,22397],{"id":22396},"what-non-commodity-content-means-for-ai-search-visibility","What Non-Commodity Content Means for AI Search Visibility",[17,22399,22400],{},"AI can now produce a competent summary of almost any common topic in seconds. That changes the value of publishing another article that simply repeats what already exists.",[17,22402,22403,22404,22406,22407,35],{},"Google now uses a specific term for the alternative: ",[21,22405,19740],{},". In its 2026 guidance for generative AI features, Google describes content with original experience, expertise, analysis, or perspective as more valuable than material that could come from almost anyone—or be easily reproduced by a generative AI system. (",[29,22408,157],{"href":18524,"rel":22409},[33],[17,22411,22412],{},"The idea matters beyond one phrase: when an AI system already knows the generic answer, publishers need to ask what their page contributes that the answer system cannot obtain everywhere else.",[12,22414,1152],{"id":1151},[17,22416,22417],{},[21,22418,22419],{},"Non-commodity content is content whose useful value is not easily interchangeable with hundreds of other pages.",[17,22421,22422],{},"Instead of merely restating common knowledge, it contributes something distinctive: first-hand experience, original data, expert analysis, documented testing, specific examples, proprietary knowledge, unusual evidence, or a genuinely useful synthesis.",[17,22424,22425,22426,35],{},"Google explicitly recommends this approach for AI Overviews and AI Mode. However, “non-commodity content” should not be treated as a universal, confirmed ranking factor across every AI search engine. Google documents the concept; OpenAI and Microsoft describe related ideas such as relevance, reliability, expertise, evidence, and citation quality without publicly documenting the same named mechanism. (",[29,22427,157],{"href":18524,"rel":22428},[33],[12,22430,22432],{"id":22431},"what-google-means","What Google Means",[17,22434,22435,22436,35],{},"Google's July 2026 generative AI guidance contrasts ordinary information with content that adds unique experience or expertise. Its example distinguishes a generic home-buying tips article from a specific account based on an actual purchasing decision and inspection experience. (",[29,22437,157],{"href":18524,"rel":22438},[33],[17,22440,22441],{},"The difference is not simply whether the wording is original.",[69,22443,22444,22454],{},[72,22445,22446],{},[75,22447,22448,22451],{},[78,22449,22450],{},"Commodity content",[78,22452,22453],{},"Non-commodity content",[85,22455,22456,22464,22472,22480,22488],{},[75,22457,22458,22461],{},[90,22459,22460],{},"Repeats widely available advice",[90,22462,22463],{},"Adds information or reasoning others do not have",[75,22465,22466,22469],{},[90,22467,22468],{},"Summarizes existing articles",[90,22470,22471],{},"Contributes experience, testing, data, or analysis",[75,22473,22474,22477],{},[90,22475,22476],{},"Could come from almost any publisher",[90,22478,22479],{},"Depends meaningfully on the creator or organization",[75,22481,22482,22485],{},[90,22483,22484],{},"Answers only the obvious question",[90,22486,22487],{},"Explains decisions, evidence, edge cases, or consequences",[75,22489,22490,22493],{},[90,22491,22492],{},"Changes mainly in wording",[90,22494,22495],{},"Changes what the reader can actually learn",[17,22497,22498,22499,22502],{},"A rewritten version of the same ten facts is still largely commodity information. A page becomes more differentiated when its ",[21,22500,22501],{},"information",", not merely its sentences, provides additional value.",[17,22504,22505,22506,35],{},"This closely matches Google's broader people-first content guidance, which asks whether a page contains original reporting, research or analysis, goes beyond the obvious, and provides substantial additional value when using other sources. (",[29,22507,157],{"href":20055,"rel":22508},[33],[12,22510,22512],{"id":22511},"why-ai-search-changes-the-equation","Why AI Search Changes the Equation",[17,22514,22515,22516,22518,22519,35],{},"Generative search can synthesize information from multiple sources before the user visits a website. Google says AI Overviews and AI Mode can use retrieval-augmented generation and ",[21,22517,18730],{},", where the system performs multiple related searches to find information needed for a broader answer. (",[29,22520,157],{"href":18524,"rel":22521},[33],[17,22523,22524],{},"That creates an important practical implication.",[17,22526,22527],{},"If 50 pages all explain the same basic definition, an AI system does not necessarily need all 50 to construct its answer. But a page containing a real benchmark, an unusual failure case, expert observations, original images, or documented measurements may contribute information that is harder to substitute.",[17,22529,12183,22530,22532,22533,35],{},[21,22531,151],{}," prove that uniqueness automatically earns an AI citation. Retrieval and selection depend on many factors, and Google does not guarantee crawling, indexing, visibility, or inclusion even when a page follows its recommendations. (",[29,22534,157],{"href":18524,"rel":22535},[33],[17,22537,22538],{},"The better interpretation is that non-commodity information gives a page something distinctive that a retrieval system could potentially find useful.",[12,22540,22542],{"id":22541},"what-counts-as-non-commodity","What Counts as Non-Commodity?",[17,22544,22545],{},"Useful forms can include:",[1640,22547,22548,22554,22560,22566,22572,22578],{},[981,22549,22550,22553],{},[21,22551,22552],{},"First-hand experience:"," what happened when you implemented, tested, bought, migrated, repaired, or measured something.",[981,22555,22556,22559],{},[21,22557,22558],{},"Original evidence:"," benchmarks, datasets, experiments, screenshots, measurements, interviews, or observations you collected.",[981,22561,22562,22565],{},[21,22563,22564],{},"Expert reasoning:"," why one implementation was chosen over another, including constraints and trade-offs.",[981,22567,22568,22571],{},[21,22569,22570],{},"Specific case studies:"," the actual problem, environment, decisions, results, failures, and limitations.",[981,22573,22574,22577],{},[21,22575,22576],{},"Meaningful synthesis:"," connecting reliable sources to reach a useful conclusion that the sources do not individually explain.",[981,22579,22580,22583],{},[21,22581,22582],{},"Local or proprietary knowledge:"," information derived from your customers, systems, processes, market, or operating environment when it can be published responsibly.",[17,22585,22586],{},"For example, an article titled “How to Improve Website Performance” can easily become generic. A study showing how a specific Nuxt site's Largest Contentful Paint changed after image optimization, with before-and-after measurements, configuration details, unsuccessful attempts, and test limitations contains much more difficult-to-replace information.",[17,22588,22589],{},[161,22590,22591],{},"INTERNAL LINK: How to Create Original SEO Research",[12,22593,22595],{"id":22594},"ai-generated-content-is-not-automatically-commodity","AI-Generated Content Is Not Automatically Commodity",[17,22597,22598],{},"Using AI does not itself determine whether content is valuable.",[17,22600,22601,22602,35],{},"Google states that it focuses on content quality rather than simply how the content was produced. AI-assisted content can therefore be useful, while generating many low-value pages primarily to manipulate Search can violate Google's scaled content abuse policy. (",[29,22603,157],{"href":22604,"rel":22605},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fblog\u002F2023\u002F02\u002Fgoogle-search-and-ai-content?utm_source=chatgpt.com",[33],[17,22607,22608],{},"The more useful question is:",[17,22610,22611],{},[21,22612,22613],{},"What information exists on this page because we created this page?",[17,22615,22616],{},"If the answer is only “the wording is different,” the information gain is probably limited. If the page contains a test, decision, observation, dataset, experience, or defensible analysis that did not previously exist in that form, it is much closer to non-commodity content.",[12,22618,22620],{"id":22619},"beyond-google","Beyond Google",[17,22622,22623],{},"The terminology should not be generalized too aggressively.",[17,22625,22626,22627,35],{},"OpenAI says ChatGPT Search uses multiple factors intended to surface reliable and relevant information and that publishers should allow OAI-SearchBot if they want their content available for summaries and citations. Its public guidance does not document a special “non-commodity content” ranking factor. (",[29,22628,4122],{"href":22629,"rel":22630},"https:\u002F\u002Fhelp.openai.com\u002Fen\u002Farticles\u002F9237897-chatgpt-search0?utm_source=chatgpt.com",[33],[17,22632,22633,22634,35],{},"Microsoft's Bing guidance points in a similar practical direction. Its 2026 AI Performance documentation recommends strengthening subject depth and expertise, supporting claims with evidence, improving clarity and structure, and keeping information accurate and current when publishers evaluate AI citation performance. (",[29,22635,22638],{"href":22636,"rel":22637},"https:\u002F\u002Fblogs.bing.com\u002Fwebmaster\u002FFebruary-2026\u002FIntroducing-AI-Performance-in-Bing-Webmaster-Tools-Public-Preview",[33],"blogs.bing.com",[17,22640,22641,22642],{},"So the broader principle is reasonable, but the mechanisms should remain separate: ",[21,22643,22644],{},"Google explicitly uses the term; other AI search systems should be evaluated according to their own documented guidance.",[12,22646,22648],{"id":22647},"how-to-evaluate-your-content","How to Evaluate Your Content",[17,22650,22651],{},"Before publishing, ask whether the page contributes something beyond a competent summary of existing search results.",[17,22653,22654],{},"A simple SeoNest test is to imagine giving a general-purpose AI model only publicly available generic sources. Could it reproduce nearly everything important in your article without access to your organization, author, tests, data, or experience?",[17,22656,22657],{},"If yes, look for genuine information gain rather than artificial uniqueness.",[17,22659,22660,22661,22664],{},"Do not add unsupported opinions simply to appear different. Useful differentiation should make the page ",[21,22662,22663],{},"more accurate, more informative, or more useful",", not merely more unusual.",[12,22666,22668],{"id":22667},"measure-the-result","Measure the Result",[17,22670,22671],{},"Non-commodity content is a strategy, not proof of visibility.",[17,22673,22674,22675,35],{},"Google's dedicated Generative AI performance report in Search Console now reports impressions and pages appearing in supported generative AI Search experiences, including AI Overviews and AI Mode. Google states that these insights were rolled out worldwide by August 31, 2026. (",[29,22676,18518],{"href":18892,"rel":22677},[33],[17,22679,22680,22681,35],{},"Bing Webmaster Tools also introduced AI Performance reporting in February 2026, including citation counts, cited pages, grounding-query samples, and visibility trends across supported Microsoft AI experiences. (",[29,22682,22638],{"href":22636,"rel":22683},[33],[17,22685,22686],{},"Publishers can therefore compare which kinds of pages receive AI visibility instead of assuming that a content strategy works simply because it sounds plausible.",[12,22688,960],{"id":959},[17,22690,22691,22692,22695],{},"Non-commodity content does not mean making every article radically different. It means giving readers—and potentially retrieval systems—a reason to value ",[21,22693,22694],{},"your version"," of the information.",[17,22697,22698],{},"Keep the useful definitions and foundational explanations people need. Then add what cannot be obtained from generic summaries alone: evidence, experience, analysis, specific decisions, measurements, examples, and limitations.",[17,22700,22701],{},"For Google specifically, this is now explicit generative AI Search guidance. For AI search more broadly, it is a strong content principle, but not a universal documented ranking factor.",[12,22703,976],{"id":975},[978,22705,22706,22717,22731,22742,22756,22769,22783,22798],{},[981,22707,1023,22708,22710,22711,749,22714,35],{},[21,22709,19032],{},", last updated July 10, 2026. ",[29,22712,19038],{"href":19036,"rel":22713},[33],[29,22715,157],{"href":18524,"rel":22716},[33],[981,22718,1023,22719,22722,22723,749,22727,35],{},[21,22720,22721],{},"A new resource for optimizing for generative AI in Google Search",", May 15, 2026. ",[29,22724,21114],{"href":22725,"rel":22726},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fblog\u002F2026\u002F05\u002Fa-new-resource-for-optimizing?utm_source=chatgpt.com",[33],[29,22728,157],{"href":22729,"rel":22730},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fblog\u002F2026\u002F05\u002Fa-new-resource-for-optimizing?authuser=002&hl=en&utm_source=chatgpt.com",[33],[981,22732,1023,22733,22735,22736,749,22739,35],{},[21,22734,21437],{},", last updated December 10, 2025. ",[29,22737,21441],{"href":20055,"rel":22738},[33],[29,22740,157],{"href":20055,"rel":22741},[33],[981,22743,1023,22744,22747,22748,749,22752,35],{},[21,22745,22746],{},"Spam Policies for Google Web Search",", including scaled content abuse guidance. ",[29,22749,22751],{"href":10591,"rel":22750},[33],"Google Search spam policies",[29,22753,157],{"href":22754,"rel":22755},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fessentials\u002Fspam-policies?rd=1&visit_id=639173782849165935-1845924883",[33],[981,22757,1023,22758,22761,22762,749,22766,35],{},[21,22759,22760],{},"Google Search's guidance about AI-generated content",", February 8, 2023. ",[29,22763,22765],{"href":22604,"rel":22764},[33],"Google AI-generated content guidance",[29,22767,157],{"href":22604,"rel":22768},[33],[981,22770,22771,22772,22775,22776,749,22780,35],{},"OpenAI — ",[21,22773,22774],{},"Publishers and Developers FAQ",", accessed September 2026. ",[29,22777,22779],{"href":4853,"rel":22778},[33],"OpenAI publisher guidance",[29,22781,4122],{"href":20883,"rel":22782},[33],[981,22784,22785,22786,22789,22790,749,22795,35],{},"Microsoft Bing Webmaster Blog — ",[21,22787,22788],{},"Introducing AI Performance in Bing Webmaster Tools Public Preview",", February 10, 2026. ",[29,22791,22794],{"href":22792,"rel":22793},"https:\u002F\u002Fblogs.bing.com\u002Fwebmaster\u002FFebruary-2026\u002FIntroducing-AI-Performance-in-Bing-Webmaster-Tools-Public-Preview?utm_source=chatgpt.com",[33],"Bing AI Performance announcement",[29,22796,22638],{"href":22636,"rel":22797},[33],[981,22799,19073,22800,22802,22803,749,22807,35],{},[21,22801,19076],{},", worldwide rollout completed August 31, 2026. ",[29,22804,22806],{"href":18892,"rel":22805},[33],"Search Console Generative AI report",[29,22808,18518],{"href":18892,"rel":22809},[33],{"title":185,"searchDepth":311,"depth":311,"links":22811},[22812,22813,22814,22815,22816,22817,22818,22819,22820,22821,22822],{"id":22396,"depth":311,"text":22397},{"id":1151,"depth":311,"text":1152},{"id":22431,"depth":311,"text":22432},{"id":22511,"depth":311,"text":22512},{"id":22541,"depth":311,"text":22542},{"id":22594,"depth":311,"text":22595},{"id":22619,"depth":311,"text":22620},{"id":22647,"depth":311,"text":22648},{"id":22667,"depth":311,"text":22668},{"id":959,"depth":311,"text":960},{"id":975,"depth":311,"text":976},"Learn what Google means by non-commodity content, why it matters for AI search visibility, what qualifies, and how to measure its impact.","\u002Fnon-commodity-content.png","Non commodity content image ",{},"\u002Fblog\u002Fen\u002Fnon-commodity-content",{"title":22391,"description":22823},"non-commodity-content","blog\u002Fen\u002Fnon-commodity-content","7OFJKzxKfZSwF1dN1xAnppzbblL4v_nBGeyU5vd4yzk",{"id":22833,"title":22834,"author":7,"body":22835,"category":4925,"description":23373,"draft":1097,"extension":1098,"featured":1099,"image":23374,"imageAlt":23375,"locale":1102,"meta":23376,"navigation":1099,"path":23377,"publishedAt":23378,"seo":23379,"slug":23380,"stem":23381,"translationKey":23380,"updatedAt":23378,"__hash__":23382},"blog\u002Fblog\u002Fen\u002Fai_traditional_search.md","AI Search vs Traditional Search: How the User Journey Changes",{"type":9,"value":22836,"toc":23357},[22837,22841,22844,22847,22849,22855,22866,22869,22874,22877,22882,22885,22889,22981,22984,22988,22991,22994,22997,23002,23005,23011,23014,23018,23021,23027,23030,23035,23038,23043,23046,23051,23057,23060,23065,23069,23072,23075,23095,23100,23103,23105,23108,23111,23114,23117,23123,23129,23132,23137,23141,23144,23146,23173,23176,23180,23183,23186,23191,23197,23200,23204,23208,23211,23214,23221,23223,23226,23229,23232,23234,23238,23241,23245,23248,23252,23255,23259,23262,23264,23270,23276,23279,23282,23284],[12,22838,22840],{"id":22839},"ai-search-vs-traditional-search-user-journey","AI Search vs Traditional Search: User Journey",[17,22842,22843],{},"Traditional search and AI search can use much of the same web, but they change what the user does with it. In a conventional search journey, the user usually submits a query, evaluates a results page, opens one or more sources, extracts information, and searches again if the answer is incomplete. AI search moves part of that work into the search interface itself: the system can gather information, synthesize an answer, maintain context, and respond to follow-up questions.",[17,22845,22846],{},"That difference matters for users, publishers, SEO teams, and businesses. The goal is no longer only to become one of the links someone might click. Content can also become evidence that helps an AI-powered search experience construct an answer.",[12,22848,1152],{"id":1151},[17,22850,22851,22852,174],{},"The main difference is ",[21,22853,22854],{},"where synthesis happens",[17,22856,22857,22858,22861,22862,22865],{},"Traditional search primarily helps users ",[21,22859,22860],{},"find sources",". AI search can help users ",[21,22863,22864],{},"find, combine, and interpret information"," before they visit those sources. Google AI Mode, for example, can divide a question into subtopics, search them simultaneously, combine the results, and let the user continue with follow-up questions. ChatGPT Search similarly combines conversational questions with current web information and source citations.",[17,22867,22868],{},"The journey therefore shifts from:",[17,22870,22871],{},[21,22872,22873],{},"query → results → clicks → reading → new query",[17,22875,22876],{},"toward:",[17,22878,22879],{},[21,22880,22881],{},"question → synthesized answer → follow-up → selective source exploration or action",[17,22883,22884],{},"These are not absolute models. Modern traditional search already contains direct answers, maps, rich results, snippets, and other features, while AI search still links users to websites.",[12,22886,22888],{"id":22887},"journey-comparison","Journey Comparison",[69,22890,22891,22902],{},[72,22892,22893],{},[75,22894,22895,22897,22899],{},[78,22896,1185],{},[78,22898,21546],{},[78,22900,22901],{},"AI Search",[85,22903,22904,22915,22926,22937,22948,22959,22970],{},[75,22905,22906,22909,22912],{},[90,22907,22908],{},"Input",[90,22910,22911],{},"Usually a keyword or query",[90,22913,22914],{},"Natural-language question, often longer or multimodal",[75,22916,22917,22920,22923],{},[90,22918,22919],{},"Exploration",[90,22921,22922],{},"User scans results",[90,22924,22925],{},"System can explore multiple subtopics",[75,22927,22928,22931,22934],{},[90,22929,22930],{},"Synthesis",[90,22932,22933],{},"Mostly done by the user",[90,22935,22936],{},"Partly done by the AI system",[75,22938,22939,22942,22945],{},[90,22940,22941],{},"Refinement",[90,22943,22944],{},"New query",[90,22946,22947],{},"Conversational follow-up",[75,22949,22950,22953,22956],{},[90,22951,22952],{},"Context",[90,22954,22955],{},"Often reconstructed between searches",[90,22957,22958],{},"Can continue across the conversation",[75,22960,22961,22964,22967],{},[90,22962,22963],{},"Source use",[90,22965,22966],{},"Sources are usually visited early",[90,22968,22969],{},"Sources may be inspected after an initial answer",[75,22971,22972,22975,22978],{},[90,22973,22974],{},"Success",[90,22976,22977],{},"Find the right page",[90,22979,22980],{},"Reach a useful answer, source, decision, or action",[17,22982,22983],{},"The distinction is important because Google Search itself is becoming hybrid. AI Overviews can summarize a topic while linking to supporting pages, and users can continue from an AI Overview into AI Mode without restarting the query context.",[12,22985,22987],{"id":22986},"traditional-search-journey","Traditional Search Journey",[17,22989,22990],{},"At a technical level, Google Search still depends on crawling, indexing, and serving relevant information. Googlebot discovers and processes pages, Google builds its index, and ranking systems choose results relevant to the query.",[17,22992,22993],{},"For the user, however, much of the interpretation traditionally happens after the results appear.",[17,22995,22996],{},"Imagine someone researching:",[1501,22998,22999],{},[17,23000,23001],{},"“best hosting architecture for a high-traffic Nuxt website”",[17,23003,23004],{},"They may search that phrase, open several hosting providers and technical articles, compare CDN options, search again for server-side rendering considerations, investigate cost, and finally build a conclusion.",[17,23006,23007,23008],{},"Search retrieves the information environment. ",[21,23009,23010],{},"The user acts as the synthesis layer.",[17,23012,23013],{},"That model works especially well when the user wants a particular website, an original document, a product page, firsthand evidence, or direct control over which sources they evaluate.",[12,23015,23017],{"id":23016},"ai-search-journey","AI Search Journey",[17,23019,23020],{},"AI search can compress several of those steps.",[17,23022,23023,23024,23026],{},"Google documents that AI Mode uses a ",[21,23025,18730],{}," technique: it can divide a question into subtopics, search multiple data sources simultaneously, and combine what it finds into a response. Users can then continue with follow-up questions instead of reconstructing another standalone query.",[17,23028,23029],{},"The same hosting question could become:",[1501,23031,23032],{},[17,23033,23034],{},"“Compare practical hosting architectures for a Nuxt site expecting traffic spikes. Prioritize low latency in Central Asia, manageable infrastructure, and predictable cost.”",[17,23036,23037],{},"The user can then ask:",[1501,23039,23040],{},[17,23041,23042],{},"“What changes if I need PostgreSQL and Redis?”",[17,23044,23045],{},"and later:",[1501,23047,23048],{},[17,23049,23050],{},"“Which option would you choose for a small engineering team?”",[17,23052,23053,23054,174],{},"The interaction has changed from a sequence of independent searches into a ",[21,23055,23056],{},"progressive investigation",[17,23058,23059],{},"ChatGPT Search follows a similar conversational pattern: it can search the current web when needed, answer using retrieved information, provide citations, and retain the context of follow-up questions.",[17,23061,23062],{},[161,23063,23064],{},"INTERNAL LINK: How AI Search Engines Find and Use Web Content",[12,23066,23068],{"id":23067},"clicks-change-role","Clicks Change Role",[17,23070,23071],{},"One of the most important consequences is that a click may happen at a different stage.",[17,23073,23074],{},"In traditional search, clicking a result is often necessary before the user can evaluate the answer. In AI search, the user may first receive a synthesis and then visit a source because they want:",[1640,23076,23077,23080,23083,23086,23089,23092],{},[981,23078,23079],{},"deeper technical detail;",[981,23081,23082],{},"primary evidence;",[981,23084,23085],{},"verification;",[981,23087,23088],{},"a comparison the summary cannot resolve;",[981,23090,23091],{},"a product, service, tool, or transaction;",[981,23093,23094],{},"firsthand experience or original research.",[17,23096,14931,23097,23099],{},[21,23098,151],{}," mean websites become unnecessary. Both Google AI features and ChatGPT Search expose links to web sources. Google describes AI Overviews as a starting point from which users can explore supporting content, while AI Mode provides links for deeper exploration.",[17,23101,23102],{},"The practical change is that simply repeating information available everywhere becomes less defensible. A page has more reason to earn the next click when it provides something the generated answer cannot fully substitute.",[12,23104,18779],{"id":18778},[17,23106,23107],{},"The mistake would be to conclude that AI search requires abandoning traditional SEO.",[17,23109,23110],{},"Google explicitly says the foundational SEO practices used for normal Google Search also apply to AI Overviews and AI Mode. Pages must still be indexable and eligible to appear in Search, and Google documents no separate technical requirement for becoming a supporting link in these AI experiences.",[17,23112,23113],{},"Google's 2026 guidance also emphasizes unique, useful, non-commodity content rather than special “GEO hacks.” It warns against manufacturing pages for every possible fan-out query merely to manipulate generative search visibility.",[17,23115,23116],{},"For publishers, that means the optimization target becomes broader:",[17,23118,23119,23122],{},[21,23120,23121],{},"Traditional SEO:","\nCan the right person discover this page for a relevant query?",[17,23124,23125,23128],{},[21,23126,23127],{},"AI-search visibility:","\nCan a search system understand what this page contributes, and is that contribution useful enough to surface or support an answer?",[17,23130,23131],{},"Strong technical SEO remains the foundation. The additional opportunity is to make the information itself easier to understand, verify, distinguish, and reuse accurately.",[17,23133,23134],{},[161,23135,23136],{},"INTERNAL LINK: SEO vs AEO vs GEO: What Actually Changes?",[12,23138,23140],{"id":23139},"content-that-still-earns-attention","Content That Still Earns Attention",[17,23142,23143],{},"AI search increases the value of information that cannot be cheaply reconstructed from dozens of interchangeable summaries.",[17,23145,10352],{},[1640,23147,23148,23151,23154,23156,23159,23162,23164,23167,23170],{},[981,23149,23150],{},"original research and datasets;",[981,23152,23153],{},"first-hand testing;",[981,23155,19760],{},[981,23157,23158],{},"precise technical documentation;",[981,23160,23161],{},"detailed comparisons;",[981,23163,19766],{},[981,23165,23166],{},"clear evidence and source attribution;",[981,23168,23169],{},"tools, calculators, products, or interactive experiences;",[981,23171,23172],{},"opinions backed by demonstrated expertise.",[17,23174,23175],{},"Google's people-first guidance already encourages original information, substantial analysis, firsthand expertise, and content that adds value beyond simply rewriting other sources. Its newer generative-search guidance carries the same principle forward.",[12,23177,23179],{"id":23178},"measure-the-new-journey","Measure the New Journey",[17,23181,23182],{},"Measurement must evolve with the interface.",[17,23184,23185],{},"Traditional search analysis commonly focuses on impressions, ranking positions, clicks, CTR, landing-page engagement, and conversions. AI visibility introduces another question:",[17,23187,23188],{},[21,23189,23190],{},"Was the site used or shown during an AI-powered search experience even when the journey did not begin with a conventional result click?",[17,23192,23193,23194,23196],{},"Google began introducing dedicated Generative AI performance reports in Search Console in June 2026. Google states that, as of ",[21,23195,19918],{},", these insights had rolled out to websites worldwide. The reports expose information such as impressions, pages, countries, devices, and dates for visibility in generative AI features including AI Overviews and AI Mode.",[17,23198,23199],{},"This makes AI visibility increasingly measurable, but visibility should not be confused automatically with business value. Teams still need to connect search exposure with qualified visits, engagement, leads, sales, or other meaningful outcomes.",[12,23201,23203],{"id":23202},"common-misconception","Common Misconception",[909,23205,23207],{"id":23206},"ai-search-replaces-search-engines","“AI Search Replaces Search Engines”",[17,23209,23210],{},"The boundary is less clean than that.",[17,23212,23213],{},"Google combines classic Search with AI Overviews and AI Mode. ChatGPT can perform live web searches and cite external sources. Bing can provide generated answers grounded in web search results with source references.",[17,23215,23216,23217,23220],{},"AI search is therefore better understood as an evolution of the ",[21,23218,23219],{},"information-access interface"," rather than a complete separation from search infrastructure or the web.",[12,23222,887],{"id":886},[17,23224,23225],{},"Optimize for the complete information journey rather than one SERP position.",[17,23227,23228],{},"Maintain strong crawling, indexing, internal linking, page experience, and conventional SEO fundamentals. Then make important pages unusually useful: answer the core question clearly, provide evidence near claims, contribute original knowledge where possible, expose relevant entities and relationships naturally, and give readers a reason to visit the source even after an AI-generated summary.",[17,23230,23231],{},"Do not optimize for imagined AI ranking tricks. Optimize for being a source worth discovering, understanding, citing, and visiting.",[12,23233,907],{"id":906},[909,23235,23237],{"id":23236},"does-ai-search-eliminate-website-clicks","Does AI search eliminate website clicks?",[17,23239,23240],{},"No. AI systems can answer some questions before a click, but they also expose sources for verification, deeper exploration, products, services, and additional detail. The effect varies by query and search experience.",[909,23242,23244],{"id":23243},"is-traditional-seo-still-necessary","Is traditional SEO still necessary?",[17,23246,23247],{},"Yes. Google states that normal SEO foundations remain relevant to its generative AI features, and pages must still meet Search eligibility requirements to appear as supporting links.",[909,23249,23251],{"id":23250},"what-is-the-biggest-user-journey-change","What is the biggest user-journey change?",[17,23253,23254],{},"Information synthesis moves earlier. Instead of requiring users to manually combine several pages before reaching a conclusion, AI search can perform part of that synthesis before the user chooses which sources to explore.",[909,23256,23258],{"id":23257},"should-websites-create-separate-pages-for-ai-queries","Should websites create separate pages for AI queries?",[17,23260,23261],{},"Not simply to cover every prompt variation. Google specifically warns against scaled pages created around query variations or fan-out queries for ranking manipulation.",[12,23263,960],{"id":959},[17,23265,23266,23267],{},"Traditional search asks, ",[21,23268,23269],{},"“Which sources should I open?”",[17,23271,23272,23273],{},"AI search can begin with, ",[21,23274,23275],{},"“What is the answer, and which sources should I investigate next?”",[17,23277,23278],{},"That small-looking change restructures the entire journey. Discovery, synthesis, refinement, verification, and action can now happen in different places and in a different order.",[17,23280,23281],{},"For websites, the durable strategy remains surprisingly familiar: be technically accessible, genuinely useful, trustworthy, and distinctive enough that both people and search systems have a reason to choose your information.",[12,23283,976],{"id":975},[978,23285,23286,23295,23304,23312,23321,23329,23337,23346],{},[981,23287,1023,23288,21428,23291],{},[1625,23289,23290],{},"In-depth Guide to How Google Search Works",[29,23292,23294],{"href":1144,"rel":23293},[33],"Google Search Central source",[981,23296,19001,23297,23299,23300],{},[1625,23298,19013],{},". Accessed September 2026. ",[29,23301,23303],{"href":18516,"rel":23302},[33],"Google AI Mode documentation",[981,23305,1023,23306,1057,23308],{},[1625,23307,21034],{},[29,23309,23311],{"href":19025,"rel":23310},[33],"Google AI features documentation",[981,23313,1023,23314,23317,23318],{},[1625,23315,23316],{},"Google's Guide to Optimizing for Generative AI Features on Google Search",". 2026. ",[29,23319,19038],{"href":19036,"rel":23320},[33],[981,23322,1023,23323,21412,23325],{},[1625,23324,19064],{},[29,23326,23328],{"href":19068,"rel":23327},[33],"Search Console announcement",[981,23330,1023,23331,1027,23334],{},[1625,23332,23333],{},"Creating Helpful, Reliable, People-First Content",[29,23335,21441],{"href":20055,"rel":23336},[33],[981,23338,21094,23339,23299,23342],{},[1625,23340,23341],{},"Searching the web with ChatGPT",[29,23343,23345],{"href":4825,"rel":23344},[33],"ChatGPT Search documentation",[981,23347,23348,23349,23299,23352],{},"Microsoft Support — ",[1625,23350,23351],{},"How Bing delivers search results",[29,23353,23356],{"href":23354,"rel":23355},"https:\u002F\u002Fsupport.microsoft.com\u002Fen-us\u002Fbing\u002Fhow-bing-delivers-search-results?utm_source=chatgpt.com",[33],"Microsoft Bing documentation",{"title":185,"searchDepth":311,"depth":311,"links":23358},[23359,23360,23361,23362,23363,23364,23365,23366,23367,23368,23369,23370,23371,23372],{"id":22839,"depth":311,"text":22840},{"id":1151,"depth":311,"text":1152},{"id":22887,"depth":311,"text":22888},{"id":22986,"depth":311,"text":22987},{"id":23016,"depth":311,"text":23017},{"id":23067,"depth":311,"text":23068},{"id":18778,"depth":311,"text":18779},{"id":23139,"depth":311,"text":23140},{"id":23178,"depth":311,"text":23179},{"id":23202,"depth":311,"text":23203},{"id":886,"depth":311,"text":887},{"id":906,"depth":311,"text":907},{"id":959,"depth":311,"text":960},{"id":975,"depth":311,"text":976},"Learn how AI search changes the traditional search journey, from queries and clicks to synthesized answers, follow-ups, source verification, and SEO strategy.","\u002Fai_vs_traditional_search.png","AI and Traditional search images",{},"\u002Fblog\u002Fen\u002Fai_traditional_search","2026-09-09",{"title":22834,"description":23373},"ai-vs-traditional-search","blog\u002Fen\u002Fai_traditional_search","O18AMZ1WJe5M6YhWYPxCrZxIYM2TlHB45x4Prfn5ZU4",{"id":23384,"title":23385,"author":7,"body":23386,"category":19897,"description":23862,"draft":1097,"extension":1098,"featured":1099,"image":23863,"imageAlt":23864,"locale":1102,"meta":23865,"navigation":1099,"path":23866,"publishedAt":23378,"seo":23867,"slug":23868,"stem":23869,"translationKey":23868,"updatedAt":23378,"__hash__":23870},"blog\u002Fblog\u002Fen\u002Fanswer-engine-optimization.md","What Is Answer Engine Optimization (AEO)?",{"type":9,"value":23387,"toc":23846},[23388,23391,23398,23401,23407,23409,23414,23417,23420,23424,23427,23480,23483,23486,23491,23496,23500,23503,23511,23514,23519,23522,23528,23531,23535,23541,23544,23547,23573,23580,23583,23585,23588,23591,23598,23601,23606,23609,23614,23617,23622,23624,23627,23632,23635,23638,23643,23646,23652,23656,23659,23662,23665,23668,23671,23674,23678,23681,23684,23693,23696,23700,23703,23706,23709,23716,23718,23721,23724,23727,23733,23735,23739,23742,23746,23749,23753,23756,23760,23767,23769,23775,23778,23781,23783],[12,23389,23385],{"id":23390},"what-is-answer-engine-optimization-aeo",[17,23392,23393,23394,23397],{},"Search is no longer limited to a page of blue links. Google can answer questions through featured snippets, AI Overviews, and AI Mode, while systems such as ChatGPT Search can generate responses supported by web sources. That change has made ",[21,23395,23396],{},"Answer Engine Optimization (AEO)"," a common term in SEO.",[17,23399,23400],{},"The important distinction is that AEO is not a documented replacement for SEO. Google explicitly describes AEO as a term used for improving visibility in AI search experiences, while stating that, from Google Search's perspective, this work is still SEO.",[17,23402,23403,23404,174],{},"Understanding AEO is therefore less about discovering a new ranking trick and more about making useful information easy to ",[21,23405,23406],{},"find, understand, retrieve, and confidently use in an answer",[12,23408,1152],{"id":1151},[17,23410,23411],{},[21,23412,23413],{},"Answer Engine Optimization (AEO) is the practice of improving web content so search and AI-powered answer systems can find it, understand what question it answers, and potentially use or cite it when responding to users.",[17,23415,23416],{},"In practice, AEO combines established SEO fundamentals—crawlability, indexing, relevance, content quality, technical clarity, and authority—with content that answers real questions clearly.",[17,23418,23419],{},"There is no universal AEO standard, special AEO schema, or guaranteed method for becoming the selected answer. Google specifically says its generative AI features require no special optimization beyond strong SEO fundamentals.",[12,23421,23423],{"id":23422},"aeo-seo-and-geo","AEO, SEO, and GEO",[17,23425,23426],{},"These terms overlap, but they emphasize different outcomes.",[69,23428,23429,23442],{},[72,23430,23431],{},[75,23432,23433,23436,23439],{},[78,23434,23435],{},"Approach",[78,23437,23438],{},"Primary focus",[78,23440,23441],{},"Typical outcome",[85,23443,23444,23456,23468],{},[75,23445,23446,23450,23453],{},[90,23447,23448],{},[21,23449,15504],{},[90,23451,23452],{},"Search visibility",[90,23454,23455],{},"Ranking and appearing in search results",[75,23457,23458,23462,23465],{},[90,23459,23460],{},[21,23461,19897],{},[90,23463,23464],{},"Answer visibility",[90,23466,23467],{},"Being useful for direct answers, snippets, or cited responses",[75,23469,23470,23474,23477],{},[90,23471,23472],{},[21,23473,19900],{},[90,23475,23476],{},"Generative search visibility",[90,23478,23479],{},"Being discovered or referenced in AI-generated search experiences",[17,23481,23482],{},"The boundaries are not formal. Google explicitly groups AEO and GEO with work intended to improve AI-search visibility and says that, for Google Search, optimizing for those experiences remains part of SEO.",[17,23484,23485],{},"A useful way to think about it is:",[17,23487,23488],{},[21,23489,23490],{},"SEO helps a system find and rank the page. AEO focuses on making the information inside that page easy to use when answering a question.",[17,23492,23493],{},[161,23494,23495],{},"INTERNAL LINK: What Is Generative Engine Optimization (GEO)?",[12,23497,23499],{"id":23498},"how-aeo-works","How AEO Works",[17,23501,23502],{},"There is no single “answer engine” architecture. Different products use different retrieval, ranking, generation, and citation systems.",[17,23504,23505,23506,420,23508,23510],{},"Google has disclosed that its generative Search features can use ",[21,23507,19704],{},[21,23509,18730],{},". RAG retrieves relevant information from Google's Search index to ground an AI-generated response. Query fan-out can generate several related searches so the system can explore different aspects of a complex question.",[17,23512,23513],{},"A simplified process looks like this:",[17,23515,23516],{},[21,23517,23518],{},"Discovery → Indexing → Retrieval → Interpretation → Answer generation or extraction → Source presentation",[17,23520,23521],{},"Traditional featured snippets demonstrate a related principle without requiring generative AI. Google automatically determines whether a page is suitable for a featured snippet; publishers cannot mark a page as “the featured snippet.”",[17,23523,23524,23525,23527],{},"ChatGPT Search has its own systems. OpenAI states that public websites can appear in ChatGPT Search and that allowing ",[21,23526,4107],{}," helps content remain discoverable for search results, although placement is not guaranteed.",[17,23529,23530],{},"This is why AEO should be treated as a multi-system strategy rather than optimization for one secret algorithm.",[12,23532,23534],{"id":23533},"answer-friendly-content","Answer-Friendly Content",[17,23536,23537,23538,174],{},"Good AEO content normally starts with the same thing good technical writing starts with: ",[21,23539,23540],{},"answer the question clearly",[17,23542,23543],{},"For example, a page targeting “What is canonicalization?” should not require readers—or retrieval systems—to process 500 words of background before encountering the definition. A concise answer can appear early, followed by examples, limitations, technical mechanisms, and related concepts.",[17,23545,23546],{},"Useful characteristics include:",[1640,23548,23549,23552,23555,23558,23561,23564,23567,23570],{},[981,23550,23551],{},"a clear answer close to the relevant question;",[981,23553,23554],{},"descriptive headings and logical sections;",[981,23556,23557],{},"specific terminology instead of vague references;",[981,23559,23560],{},"evidence located near factual claims;",[981,23562,23563],{},"examples that clarify complex ideas;",[981,23565,23566],{},"original expertise, data, analysis, or experience;",[981,23568,23569],{},"important information available as readable text;",[981,23571,23572],{},"technically crawlable and indexable pages.",[17,23574,23575,23576,23579],{},"Google's 2026 generative-search guidance particularly emphasizes ",[21,23577,23578],{},"valuable, non-commodity content"," rather than simply reproducing information already available elsewhere. It also recommends clear organization while warning publishers not to manufacture pages for every possible query variation.",[17,23581,23582],{},"That distinction matters. AEO is not about converting every paragraph into tiny question-and-answer blocks. Google explicitly says that “chunking” content into small pieces is not required for its generative Search systems.",[12,23584,15159],{"id":15158},[17,23586,23587],{},"Structured data can help search engines understand explicit facts and entities on a page and can make pages eligible for supported rich results.",[17,23589,23590],{},"But it should not be confused with an AEO switch.",[17,23592,23593,23594,23597],{},"Google states that ",[21,23595,23596],{},"structured data is not required for generative AI search and there is no special schema.org markup for it",". Existing structured data remains useful when it accurately describes visible content and supports applicable Search features.",[17,23599,23600],{},"So this is reasonable:",[17,23602,23603],{},[21,23604,23605],{},"Visible content → correct structured data → clearer machine-readable context",[17,23607,23608],{},"This is not:",[17,23610,23611],{},[21,23612,23613],{},"Add schema → guaranteed AI citation",[17,23615,23616],{},"Even correctly implemented structured data does not guarantee a particular search appearance.",[17,23618,23619],{},[161,23620,23621],{},"INTERNAL LINK: Structured Data for SEO",[12,23623,13586],{"id":13585},[17,23625,23626],{},"Imagine a cybersecurity company has a page answering:",[17,23628,23629],{},[21,23630,23631],{},"“What is phishing?”",[17,23633,23634],{},"A weak page might spend several paragraphs discussing the history of cybercrime before defining phishing.",[17,23636,23637],{},"A stronger answer-oriented page might begin:",[1501,23639,23640],{},[17,23641,23642],{},"Phishing is a social-engineering attack in which an attacker impersonates a trusted organization or person to trick someone into revealing sensitive information, opening malicious files, or visiting fraudulent websites.",[17,23644,23645],{},"The page could then explain phishing emails, fake login pages, detection methods, examples, limitations, and prevention.",[17,23647,23648,23649,174],{},"The improvement is not that the paragraph follows a secret AEO format. The improvement is that the page provides a ",[21,23650,23651],{},"clear, self-contained answer supported by deeper useful information",[12,23653,23655],{"id":23654},"how-to-implement-aeo","How to Implement AEO",[17,23657,23658],{},"Start with real user problems rather than trying to guess AI prompts individually.",[17,23660,23661],{},"First, identify the major questions surrounding the topic. Separate definitions, comparisons, troubleshooting questions, buying decisions, and advanced technical questions. Then create pages whose purpose genuinely matches those needs.",[17,23663,23664],{},"On each page, provide the core answer early and expand it only where additional depth helps. Support factual claims with reliable evidence and add experience, examples, testing, original analysis, or specialist knowledge where available.",[17,23666,23667],{},"Technical SEO remains essential. Important pages must be crawlable, indexable, internally discoverable, and available in a form search systems can process. Google requires pages to be indexed and eligible to appear with a snippet before they can appear as supporting links in AI Overviews or AI Mode.",[17,23669,23670],{},"For platforms outside Google, crawler access should be checked independently. OpenAI, for example, documents OAI-SearchBot for ChatGPT Search discovery.",[17,23672,23673],{},"Finally, measure outcomes rather than assuming that optimization worked. Search visibility, impressions, clicks, conversions, referral traffic, citations, and platform-specific reporting are more useful than an arbitrary “AEO score.”",[12,23675,23677],{"id":23676},"common-aeo-mistakes","Common AEO Mistakes",[17,23679,23680],{},"The biggest mistake is treating AEO as a collection of shortcuts.",[17,23682,23683],{},"Creating hundreds of near-identical Q&A pages, repeating keywords unnaturally, adding unsupported schema, artificially shortening every paragraph, or producing generic AI summaries may increase content volume without increasing information value.",[17,23685,23686,23687,23689,23690,23692],{},"Another misconception is that ",[21,23688,4660],{}," is required for Google AI visibility. Google's July 2026 guidance explicitly says Google Search does not use ",[129,23691,4660],{}," as a special mechanism for appearing or ranking in its generative search features.",[17,23694,23695],{},"That does not establish whether other systems might use such files now or in the future. Platform-specific behavior must be evaluated separately.",[12,23697,23699],{"id":23698},"limits-of-aeo","Limits of AEO",[17,23701,23702],{},"No publisher can guarantee that an answer engine will quote, cite, or select a particular page.",[17,23704,23705],{},"Different systems use different indexes, crawlers, retrieval systems, models, ranking signals, and product interfaces. They also change over time.",[17,23707,23708],{},"Even Google states that satisfying its requirements and best practices does not guarantee crawling, indexing, or serving. OpenAI similarly says placement in ChatGPT Search is not guaranteed.",[17,23710,23711,23712,23715],{},"AEO should therefore improve ",[21,23713,23714],{},"eligibility and usefulness",", not be sold as deterministic control over AI answers.",[12,23717,887],{"id":886},[17,23719,23720],{},"Treat AEO as an extension of strong technical SEO and high-quality information architecture.",[17,23722,23723],{},"Make every important page useful to humans first. Give direct answers where direct answers help. Build technically accessible pages. Establish entities and relationships clearly. Provide evidence. Add information that generic summaries cannot reproduce easily.",[17,23725,23726],{},"Then verify platform-specific requirements instead of applying supposed “AI SEO hacks” universally.",[17,23728,23729,23730,174],{},"The strongest AEO strategy is usually not writing more content for machines. It is producing ",[21,23731,23732],{},"better information that machines can access without making the human experience worse",[12,23734,907],{"id":906},[909,23736,23738],{"id":23737},"is-aeo-replacing-seo","Is AEO Replacing SEO?",[17,23740,23741],{},"No. AEO describes optimization for answer-oriented search experiences, but fundamental SEO remains necessary for discovery, indexing, relevance, and visibility. Google explicitly considers optimization for its generative Search experiences part of SEO.",[909,23743,23745],{"id":23744},"does-aeo-require-schema-markup","Does AEO Require Schema Markup?",[17,23747,23748],{},"No universal AEO schema exists. Structured data can help describe page content and enable supported search features, but Google says no special schema is required for its generative AI features.",[909,23750,23752],{"id":23751},"can-aeo-guarantee-ai-citations","Can AEO Guarantee AI Citations?",[17,23754,23755],{},"No. Eligibility, retrieval, ranking, generation, and citation decisions are controlled by each platform. Neither Google nor OpenAI guarantees inclusion or placement.",[909,23757,23759],{"id":23758},"should-answers-always-be-short","Should Answers Always Be Short?",[17,23761,23762,23763,23766],{},"No. The ",[21,23764,23765],{},"direct answer should be as concise as the question allows",", but complex subjects may need substantial supporting explanation. Google specifically says there is no ideal page length for generative Search.",[12,23768,960],{"id":959},[17,23770,23771,23772,174],{},"Answer Engine Optimization is best understood as making authoritative web information ",[21,23773,23774],{},"discoverable, understandable, retrievable, and useful when search systems construct answers",[17,23776,23777],{},"The fundamentals are familiar: strong SEO, accessible technical architecture, useful content, clear answers, trustworthy evidence, and genuine information value. What has changed is the search experience in which that information may appear.",[17,23779,23780],{},"AEO matters—but it works best when treated as an evolution of good search engineering, not as a separate collection of AI-ranking tricks.",[12,23782,976],{"id":975},[978,23784,23785,23792,23801,23810,23819,23827,23837],{},[981,23786,23787,20035,23789],{},[21,23788,20034],{},[29,23790,18524],{"href":18524,"rel":23791},[33],[981,23793,23794,23796,23797],{},[21,23795,22309],{}," Google documentation covering AI Overviews, AI Mode, eligibility, technical requirements, and SEO fundamentals.\n",[29,23798,23799],{"href":23799,"rel":23800},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fai-features",[33],[981,23802,23803,20044,23806],{},[21,23804,23805],{},"Google Search Central — “Featured snippets and your website.”",[29,23807,23808],{"href":23808,"rel":23809},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Ffeatured-snippets",[33],[981,23811,23812,23815],{},[21,23813,23814],{},"Google Search Central — “Introduction to structured data markup in Google Search.”",[29,23816,23817],{"href":23817,"rel":23818},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Fintro-structured-data",[33],[981,23820,23821,23823],{},[21,23822,20052],{},[29,23824,23825],{"href":23825,"rel":23826},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Ffundamentals\u002Fcreating-helpful-content",[33],[981,23828,23829,23832,23833],{},[21,23830,23831],{},"OpenAI — “Publishers and Developers FAQ.”"," Accessed September 9, 2026.\n",[29,23834,23835],{"href":23835,"rel":23836},"https:\u002F\u002Fhelp.openai.com\u002Fen\u002Farticles\u002F12627856",[33],[981,23838,23839,23832,23842],{},[21,23840,23841],{},"OpenAI — “ChatGPT Search.”",[29,23843,23844],{"href":23844,"rel":23845},"https:\u002F\u002Fhelp.openai.com\u002Fen\u002Farticles\u002F9237897",[33],{"title":185,"searchDepth":311,"depth":311,"links":23847},[23848,23849,23850,23851,23852,23853,23854,23855,23856,23857,23858,23859,23860,23861],{"id":23390,"depth":311,"text":23385},{"id":1151,"depth":311,"text":1152},{"id":23422,"depth":311,"text":23423},{"id":23498,"depth":311,"text":23499},{"id":23533,"depth":311,"text":23534},{"id":15158,"depth":311,"text":15159},{"id":13585,"depth":311,"text":13586},{"id":23654,"depth":311,"text":23655},{"id":23676,"depth":311,"text":23677},{"id":23698,"depth":311,"text":23699},{"id":886,"depth":311,"text":887},{"id":906,"depth":311,"text":907},{"id":959,"depth":311,"text":960},{"id":975,"depth":311,"text":976},"Learn what Answer Engine Optimization (AEO) is, how it differs from SEO and GEO, how answer engines use web content, and how to optimize effectively.","\u002Faeo.png","About AEO image",{},"\u002Fblog\u002Fen\u002Fanswer-engine-optimization",{"title":23385,"description":23862},"answer-engine-optimization","blog\u002Fen\u002Fanswer-engine-optimization","WgttnoYm1_sg8_sWLyRFilNs8n7ELYf4A59WPskW6ig",{"id":23872,"title":23873,"author":7,"body":23874,"category":19900,"description":24478,"draft":1097,"extension":1098,"featured":1099,"image":24479,"imageAlt":24480,"locale":1102,"meta":24481,"navigation":1099,"path":24482,"publishedAt":23378,"seo":24483,"slug":24484,"stem":24485,"translationKey":24484,"updatedAt":23378,"__hash__":24486},"blog\u002Fblog\u002Fen\u002Fgenerative-engine-optimization.md","What Is Generative Engine Optimization (GEO)?",{"type":9,"value":23875,"toc":24456},[23876,23879,23882,23888,23894,23896,23902,23911,23920,23924,23927,23932,23935,23940,23992,23995,24000,24004,24007,24012,24023,24026,24034,24037,24041,24044,24047,24051,24054,24060,24072,24075,24080,24084,24087,24097,24100,24124,24127,24131,24134,24137,24142,24145,24148,24158,24162,24165,24169,24176,24180,24186,24190,24198,24202,24205,24209,24212,24215,24238,24248,24258,24267,24270,24275,24278,24282,24285,24288,24320,24326,24328,24332,24338,24342,24348,24352,24358,24362,24368,24370,24376,24379,24382,24384],[12,23877,23873],{"id":23878},"what-is-generative-engine-optimization-geo",[17,23880,23881],{},"Search is no longer limited to a page of blue links. Google AI Overviews and AI Mode, ChatGPT Search, Microsoft Copilot, and other generative systems can retrieve information from multiple sources, synthesize it, and present an answer directly to the user.",[17,23883,23884,23885],{},"That shift creates a new visibility question: ",[21,23886,23887],{},"will your website become one of the sources an AI system discovers, trusts, uses, or cites?",[17,23889,23890,23891,23893],{},"Generative Engine Optimization, or ",[21,23892,19900],{},", is the emerging practice of improving that visibility. But GEO is not a replacement for SEO, and many supposed “AI optimization hacks” have little evidence behind them. The useful part of GEO begins with strong SEO and extends it toward content quality, source eligibility, citations, entity clarity, and measurement inside generative search.",[12,23895,1152],{"id":1151},[17,23897,23898,23901],{},[21,23899,23900],{},"Generative Engine Optimization (GEO)"," is the practice of improving the likelihood that content is discovered, understood, selected, referenced, or cited by generative search and answer systems.",[17,23903,23904,23905,23907,23908,35],{},"The term was formalized in the 2023 research paper ",[1625,23906,21192],{},", which studied ways publishers might improve visibility inside generated answers. The paper reported visibility improvements of up to 40% in its experimental setup, but that result was benchmark-specific—not a universal ranking guarantee. (",[29,23909,11364],{"href":21459,"rel":23910},[33],[17,23912,23913,23914,23916,23917,35],{},"Google now explicitly discusses GEO and AEO, but says that, from Google Search's perspective, optimizing for generative AI experiences remains fundamentally ",[21,23915,15504],{}," rather than a separate technical discipline. (",[29,23918,157],{"href":19036,"rel":23919},[33],[12,23921,23923],{"id":23922},"geo-vs-seo","GEO vs SEO",[17,23925,23926],{},"Traditional SEO usually asks:",[17,23928,23929],{},[21,23930,23931],{},"Can search engines crawl, understand, rank, and show this page?",[17,23933,23934],{},"GEO adds another question:",[17,23936,23937],{},[21,23938,23939],{},"Can a generative system retrieve and use this information when constructing an answer?",[69,23941,23942,23950],{},[72,23943,23944],{},[75,23945,23946,23948],{},[78,23947,15504],{},[78,23949,19900],{},[85,23951,23952,23960,23968,23976,23984],{},[75,23953,23954,23957],{},[90,23955,23956],{},"Targets search visibility",[90,23958,23959],{},"Targets generative-answer visibility",[75,23961,23962,23965],{},[90,23963,23964],{},"Often measured through rankings, impressions and clicks",[90,23966,23967],{},"May include citations, references and AI referral traffic",[75,23969,23970,23973],{},[90,23971,23972],{},"Optimizes pages for retrieval and ranking",[90,23974,23975],{},"Also considers whether information is useful during answer synthesis",[75,23977,23978,23981],{},[90,23979,23980],{},"Depends heavily on crawlability and indexing",[90,23982,23983],{},"Still depends on discovery, retrieval and source accessibility",[75,23985,23986,23989],{},[90,23987,23988],{},"Usually leads users to search results",[90,23990,23991],{},"May expose information directly inside generated answers",[17,23993,23994],{},"The two overlap heavily. A page that cannot be crawled, indexed, interpreted, or trusted is unlikely to become a reliable generative-search source either.",[17,23996,23997],{},[161,23998,23999],{},"INTERNAL LINK: What Is Search Engine Optimization?",[12,24001,24003],{"id":24002},"how-geo-works","How GEO Works",[17,24005,24006],{},"A simplified generative-search flow looks like this:",[17,24008,24009],{},[21,24010,24011],{},"User query → query interpretation → retrieval → source selection → answer generation → citations or links",[17,24013,24014,24015,420,24017,24019,24020,35],{},"Google publicly describes techniques including ",[21,24016,19704],{},[21,24018,18730],{}," for its generative Search experiences. RAG grounds generated responses in retrieved information, while query fan-out can generate multiple related searches to gather enough evidence for a broader answer. (",[29,24021,157],{"href":19036,"rel":24022},[33],[17,24024,24025],{},"This has an important consequence for publishers. A page does not necessarily compete only for the exact phrase the user typed. It may also become relevant to one of several supporting questions generated during retrieval.",[17,24027,12183,24028,24030,24031,35],{},[21,24029,151],{}," mean publishers should create hundreds of pages targeting every possible question variation. Google explicitly warns against producing scaled pages primarily to manipulate search visibility and says its systems can understand related meanings without exact keyword matching. (",[29,24032,157],{"href":19036,"rel":24033},[33],[17,24035,24036],{},"The better strategy is to cover a subject completely enough that a page contains useful evidence for the main question and its natural subtopics.",[12,24038,24040],{"id":24039},"what-geo-optimizes","What GEO Optimizes",[17,24042,24043],{},"There is no publicly documented universal “GEO ranking algorithm.” Different systems use different retrieval pipelines, models, indexes and source-selection mechanisms.",[17,24045,24046],{},"In practice, GEO should therefore focus on several controllable layers.",[220,24048,24050],{"id":24049},"source-access","Source Access",[17,24052,24053],{},"An AI system cannot reliably retrieve content that its relevant crawler cannot access.",[17,24055,24056,24057,35],{},"Google says pages appearing as supporting links in its AI features must satisfy normal Search eligibility requirements. (",[29,24058,157],{"href":20678,"rel":24059},[33],[17,24061,24062,24063,24065,24066,24068,24069,35],{},"OpenAI separately documents ",[21,24064,4107],{}," for ChatGPT search discovery. Publishers that want content included in ChatGPT search summaries and snippets should avoid blocking this crawler. OpenAI also distinguishes OAI-SearchBot from ",[21,24067,4149],{},", which is associated with potential model training rather than search visibility. (",[29,24070,4122],{"href":12179,"rel":24071},[33],[17,24073,24074],{},"Crawler policies therefore need to be deliberate rather than based on a blanket “block all AI bots” rule.",[17,24076,24077],{},[161,24078,24079],{},"INTERNAL LINK: AI Crawlers and robots.txt Explained",[220,24081,24083],{"id":24082},"information-quality","Information Quality",[17,24085,24086],{},"Generative systems need material worth retrieving.",[17,24088,24089,24090,24093,24094,35],{},"Google's current generative-AI guidance emphasizes ",[21,24091,24092],{},"unique, valuable, non-commodity content"," rather than pages that merely repeat information already available elsewhere. Its broader people-first guidance similarly encourages original reporting, research, analysis, first-hand expertise and meaningful additional value. (",[29,24095,157],{"href":19036,"rel":24096},[33],[17,24098,24099],{},"For GEO, useful information gain may include:",[1640,24101,24102,24105,24108,24110,24112,24115,24118,24121],{},[981,24103,24104],{},"original measurements or datasets;",[981,24106,24107],{},"expert explanations;",[981,24109,19754],{},[981,24111,23161],{},[981,24113,24114],{},"clearly sourced statistics;",[981,24116,24117],{},"tested implementation steps;",[981,24119,24120],{},"limitations and edge cases;",[981,24122,24123],{},"answers to questions competing pages leave unresolved.",[17,24125,24126],{},"This is more defensible than rewriting existing search results into slightly different wording.",[220,24128,24130],{"id":24129},"answer-clarity","Answer Clarity",[17,24132,24133],{},"Important information should be easy to extract without making the article robotic.",[17,24135,24136],{},"For example, instead of hiding a definition behind several paragraphs of introduction, a page about GEO should plainly state:",[1501,24138,24139],{},[17,24140,24141],{},"Generative Engine Optimization is the practice of improving content visibility in AI-generated search and answer experiences.",[17,24143,24144],{},"That passage works for a human reader and remains understandable when retrieved independently.",[17,24146,24147],{},"Clear headings, direct definitions, useful tables, descriptive terminology and self-contained explanations can therefore improve content usability. This is an editorial recommendation, however—not evidence of a universal “AI chunking” ranking factor.",[17,24149,24150,24151,24154,24155,35],{},"In fact, Google explicitly says there is ",[21,24152,24153],{},"no requirement to split content into tiny chunks"," for its generative search systems. (",[29,24156,157],{"href":19036,"rel":24157},[33],[12,24159,24161],{"id":24160},"what-geo-is-not","What GEO Is Not",[17,24163,24164],{},"Several claims around GEO currently go beyond available evidence.",[220,24166,24168],{"id":24167},"geo-is-not-keyword-stuffing","GEO Is Not Keyword Stuffing",[17,24170,24171,24172,35],{},"Creating dozens of near-identical variations for AI queries is unlikely to create durable value and can cross into scaled content abuse when pages primarily exist to manipulate search systems. (",[29,24173,157],{"href":24174,"rel":24175},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fessentials\u002Fspam-policies?authuser=451499271&utm_source=chatgpt.com",[33],[220,24177,24179],{"id":24178},"geo-does-not-require-special-schema","GEO Does Not Require Special Schema",[17,24181,24182,24183,35],{},"Structured data remains useful when it accurately represents page content and enables supported search features, but Google says there is no special schema.org markup required for generative AI visibility. (",[29,24184,157],{"href":19036,"rel":24185},[33],[220,24187,24189],{"id":24188},"llmstxt-is-not-a-google-geo-requirement","llms.txt Is Not a Google GEO Requirement",[17,24191,23593,24192,24194,24195,35],{},[129,24193,4660],{}," is not used for Google Search and neither improves nor harms visibility there. Other systems may independently support similar mechanisms, so its usefulness must be evaluated per platform rather than treated as an industry-wide requirement. (",[29,24196,157],{"href":19036,"rel":24197},[33],[220,24199,24201],{"id":24200},"citations-are-not-guaranteed","Citations Are Not Guaranteed",[17,24203,24204],{},"Even technically perfect and highly authoritative content is not guaranteed to be retrieved or cited. Generative systems remain probabilistic and their source-selection mechanisms are only partially public.",[12,24206,24208],{"id":24207},"measuring-geo","Measuring GEO",[17,24210,24211],{},"GEO measurement should move beyond conventional keyword rankings.",[17,24213,24214],{},"Useful metrics include:",[1640,24216,24217,24220,24223,24226,24229,24232,24235],{},[981,24218,24219],{},"AI citations or references;",[981,24221,24222],{},"URLs selected as sources;",[981,24224,24225],{},"AI referral sessions;",[981,24227,24228],{},"conversions from AI referrals;",[981,24230,24231],{},"query\u002Ftopic coverage;",[981,24233,24234],{},"crawl accessibility;",[981,24236,24237],{},"changes in citation frequency over time.",[17,24239,24240,24241,24244,24245,35],{},"Google's latest guidance points publishers to a ",[21,24242,24243],{},"Generative AI performance report in Search Console"," for its generative Search features. (",[29,24246,157],{"href":19036,"rel":24247},[33],[17,24249,24250,24251,24254,24255,35],{},"Microsoft introduced ",[21,24252,24253],{},"AI Performance in Bing Webmaster Tools"," in February 2026, showing citation activity and URLs referenced across Microsoft Copilot, Bing AI-generated answers and selected partner experiences. (",[29,24256,22638],{"href":22792,"rel":24257},[33],[17,24259,24260,24261,24263,24264,35],{},"OpenAI says ChatGPT referral links include ",[129,24262,19426],{},", allowing publishers to identify incoming ChatGPT traffic in analytics systems. (",[29,24265,4122],{"href":12179,"rel":24266},[33],[17,24268,24269],{},"This creates a better measurement model:",[17,24271,24272],{},[21,24273,24274],{},"Visibility → citation → referral → engagement → conversion",[17,24276,24277],{},"A citation without traffic may still improve brand exposure, while a smaller number of highly qualified AI referrals may produce meaningful business outcomes.",[12,24279,24281],{"id":24280},"a-practical-geo-strategy","A Practical GEO Strategy",[17,24283,24284],{},"For most websites, the strongest GEO strategy is not a separate collection of AI tricks. It is an extension of disciplined technical SEO and high-quality publishing.",[17,24286,24287],{},"Start with these priorities:",[978,24289,24290,24293,24296,24299,24302,24305,24308,24311,24314,24317],{},[981,24291,24292],{},"Make important pages crawlable and indexable.",[981,24294,24295],{},"Check relevant AI crawler policies intentionally.",[981,24297,24298],{},"Publish original, useful information instead of commodity summaries.",[981,24300,24301],{},"Answer the primary question early and clearly.",[981,24303,24304],{},"Support important claims with trustworthy evidence.",[981,24306,24307],{},"Use descriptive headings and logical page structure.",[981,24309,24310],{},"Keep authorship, organization, product and subject information consistent.",[981,24312,24313],{},"Maintain structured data where it is genuinely supported.",[981,24315,24316],{},"Measure AI citations and referral traffic separately from ordinary search.",[981,24318,24319],{},"Test platform-specific behavior instead of assuming every generative engine works the same way.",[17,24321,24322,24323],{},"The central principle is simple: ",[21,24324,24325],{},"make your site technically accessible and make its information worth retrieving.",[12,24327,907],{"id":906},[909,24329,24331],{"id":24330},"does-geo-replace-seo","Does GEO Replace SEO?",[17,24333,24334,24335,35],{},"No. GEO substantially overlaps with SEO. Google explicitly treats optimization for its generative search features as part of SEO. Other AI systems can introduce additional crawler, citation and measurement considerations. (",[29,24336,157],{"href":19036,"rel":24337},[33],[909,24339,24341],{"id":24340},"can-geo-guarantee-chatgpt-citations","Can GEO Guarantee ChatGPT Citations?",[17,24343,24344,24345,35],{},"No. OpenAI documents how publishers can make content accessible to ChatGPT search, but it does not publish a formula that guarantees selection or citation. (",[29,24346,4122],{"href":12179,"rel":24347},[33],[909,24349,24351],{"id":24350},"does-structured-data-improve-geo","Does Structured Data Improve GEO?",[17,24353,24354,24355,35],{},"Structured data can improve machine-readable clarity and remains important for supported search features, but Google states that no special structured data is required specifically for generative AI search. (",[29,24356,157],{"href":19036,"rel":24357},[33],[909,24359,24361],{"id":24360},"should-every-paragraph-be-optimized-for-ai-extraction","Should Every Paragraph Be Optimized for AI Extraction?",[17,24363,24364,24365,35],{},"No. Important explanations should be clear and self-contained, but forcing every paragraph into artificial “AI chunks” can damage human readability. Google specifically says tiny content chunks are not required for its generative Search systems. (",[29,24366,157],{"href":19036,"rel":24367},[33],[12,24369,960],{"id":959},[17,24371,24372,24373,174],{},"GEO is best understood as ",[21,24374,24375],{},"optimization for visibility inside generative information systems",[17,24377,24378],{},"Its durable foundation is not a new markup file, secret prompt pattern or keyword formula. It is the combination of technical accessibility, strong SEO, useful original information, explicit answers, trustworthy evidence and platform-aware measurement.",[17,24380,24381],{},"As generative search evolves, individual tactics will change. The safer long-term strategy is to create information that retrieval systems can access—and that both machines and people have a genuine reason to select.",[12,24383,976],{"id":975},[978,24385,24386,24398,24410,24421,24432,24444],{},[981,24387,24388,24389,24391,24392,736,24395],{},"Aggarwal, Pranjal et al. ",[1625,24390,21192],{},". arXiv:2311.09735, November 16, 2023. (",[29,24393,11364],{"href":21459,"rel":24394},[33],[29,24396,21461],{"href":21459,"rel":24397},[33],[981,24399,24400,24401,24403,24404,736,24407],{},"Google Search Central. ",[1625,24402,19032],{},". Last updated July 10, 2026. (",[29,24405,157],{"href":19036,"rel":24406},[33],[29,24408,19038],{"href":19036,"rel":24409},[33],[981,24411,24400,24412,24414,24415,736,24418],{},[1625,24413,21034],{},". Last updated December 10, 2025. (",[29,24416,157],{"href":20678,"rel":24417},[33],[29,24419,23311],{"href":19025,"rel":24420},[33],[981,24422,24400,24423,24414,24425,736,24428],{},[1625,24424,23333],{},[29,24426,157],{"href":20055,"rel":24427},[33],[29,24429,24431],{"href":20055,"rel":24430},[33],"Google people-first content guidance",[981,24433,24434,24435,24437,24438,736,24441],{},"OpenAI. ",[1625,24436,21097],{},". Current publisher guidance for ChatGPT search discovery and OAI-SearchBot. (",[29,24439,4122],{"href":12179,"rel":24440},[33],[29,24442,22779],{"href":12179,"rel":24443},[33],[981,24445,24446,24447,24449,24450,736,24453],{},"Microsoft Bing. ",[1625,24448,22788],{},". February 10, 2026. (",[29,24451,22638],{"href":22792,"rel":24452},[33],[29,24454,22794],{"href":22792,"rel":24455},[33],{"title":185,"searchDepth":311,"depth":311,"links":24457},[24458,24459,24460,24461,24462,24467,24473,24474,24475,24476,24477],{"id":23878,"depth":311,"text":23873},{"id":1151,"depth":311,"text":1152},{"id":23922,"depth":311,"text":23923},{"id":24002,"depth":311,"text":24003},{"id":24039,"depth":311,"text":24040,"children":24463},[24464,24465,24466],{"id":24049,"depth":325,"text":24050},{"id":24082,"depth":325,"text":24083},{"id":24129,"depth":325,"text":24130},{"id":24160,"depth":311,"text":24161,"children":24468},[24469,24470,24471,24472],{"id":24167,"depth":325,"text":24168},{"id":24178,"depth":325,"text":24179},{"id":24188,"depth":325,"text":24189},{"id":24200,"depth":325,"text":24201},{"id":24207,"depth":311,"text":24208},{"id":24280,"depth":311,"text":24281},{"id":906,"depth":311,"text":907},{"id":959,"depth":311,"text":960},{"id":975,"depth":311,"text":976},"Learn what Generative Engine Optimization (GEO) is, how it differs from SEO, how AI search retrieves sources, and how to improve and measure AI visibility.","\u002Fgeo.png","About GEO image",{},"\u002Fblog\u002Fen\u002Fgenerative-engine-optimization",{"title":23873,"description":24478},"generative-engine-optimization","blog\u002Fen\u002Fgenerative-engine-optimization","k91vq6gALHijfrmS9XlWhtuVWsZQpvfay-iA2VTlVIc",{"id":24488,"title":24489,"author":7,"body":24490,"category":24971,"description":24972,"draft":1097,"extension":1098,"featured":1099,"image":24973,"imageAlt":24974,"locale":1102,"meta":24975,"navigation":1099,"path":24976,"publishedAt":23378,"seo":24977,"slug":24978,"stem":24979,"translationKey":24978,"updatedAt":23378,"__hash__":24980},"blog\u002Fblog\u002Fen\u002Fseo-aeo-geo.md","SEO vs AEO vs GEO: What Actually Changes?",{"type":9,"value":24491,"toc":24957},[24492,24495,24498,24501,24503,24508,24514,24520,24527,24531,24628,24631,24635,24641,24647,24650,24655,24660,24664,24667,24670,24675,24678,24684,24691,24695,24698,24701,24709,24715,24719,24722,24731,24734,24739,24743,24746,24749,24796,24802,24804,24808,24815,24819,24828,24832,24838,24842,24848,24850,24861,24864,24867,24869,24872,24887,24890,24892],[12,24493,24489],{"id":24494},"seo-vs-aeo-vs-geo-what-actually-changes",[17,24496,24497],{},"SEO, AEO, and GEO are often presented as three separate disciplines. That framing is useful for explaining different goals, but technically the boundaries are much less clean. SEO remains the foundation: search systems must still discover, understand, evaluate, and retrieve useful web content. AEO emphasizes making that content suitable for direct answers, while GEO focuses on visibility inside generative responses that synthesize information from multiple sources.",[17,24499,24500],{},"The important change is therefore not that SEO has been replaced. It is that websites now compete for visibility across more search surfaces: traditional results, direct answers, AI-generated summaries, citations, recommendations, and conversational search.",[12,24502,19679],{"id":19678},[17,24504,24505,24507],{},[21,24506,15504],{}," optimizes a website for discovery, indexing, ranking, and visibility in search results.",[17,24509,24510,24513],{},[21,24511,24512],{},"AEO — Answer Engine Optimization"," is a practical industry term for making information easy for systems to use when answering specific questions directly.",[17,24515,24516,24519],{},[21,24517,24518],{},"GEO — Generative Engine Optimization"," focuses on increasing the likelihood that information is retrieved, used, referenced, or cited inside generative AI responses.",[17,24521,24522,24523,35],{},"Google now explicitly acknowledges the terms AEO and GEO, but says that, from Google Search's perspective, optimizing for generative AI search is still SEO. Its generative features remain connected to Google's existing Search ranking and quality systems. (",[29,24524,157],{"href":24525,"rel":24526},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Ffundamentals\u002Fai-optimization-guide?authuser=4&hl=en",[33],[12,24528,24530],{"id":24529},"what-actually-changes","What Actually Changes?",[69,24532,24533,24545],{},[72,24534,24535],{},[75,24536,24537,24539,24541,24543],{},[78,24538,2904],{},[78,24540,15504],{},[78,24542,19897],{},[78,24544,19900],{},[85,24546,24547,24560,24574,24588,24602,24614],{},[75,24548,24549,24552,24554,24557],{},[90,24550,24551],{},"Main goal",[90,24553,23452],{},[90,24555,24556],{},"Direct-answer usefulness",[90,24558,24559],{},"Generative-answer visibility",[75,24561,24562,24565,24568,24571],{},[90,24563,24564],{},"Typical surface",[90,24566,24567],{},"Search results",[90,24569,24570],{},"Answer-oriented results",[90,24572,24573],{},"AI-generated responses",[75,24575,24576,24579,24582,24585],{},[90,24577,24578],{},"Main unit",[90,24580,24581],{},"Page\u002Fdocument",[90,24583,24584],{},"Question and answer",[90,24586,24587],{},"Source, passage, claim",[75,24589,24590,24593,24596,24599],{},[90,24591,24592],{},"Content emphasis",[90,24594,24595],{},"Relevance and quality",[90,24597,24598],{},"Clear answers",[90,24600,24601],{},"Evidence-rich, reusable information",[75,24603,24604,24606,24609,24611],{},[90,24605,15209],{},[90,24607,24608],{},"Rankings, impressions, clicks",[90,24610,23464],{},[90,24612,24613],{},"Citations, mentions, referrals",[75,24615,24616,24619,24622,24625],{},[90,24617,24618],{},"Technical foundation",[90,24620,24621],{},"Crawlability and indexing",[90,24623,24624],{},"Mostly SEO foundations",[90,24626,24627],{},"SEO foundations + AI crawler access where relevant",[17,24629,24630],{},"These are not isolated systems. A well-built page can succeed across all three.",[12,24632,24634],{"id":24633},"seo-is-still-the-foundation","SEO Is Still the Foundation",[17,24636,24637,24638,35],{},"Google's Search Essentials continue to emphasize helpful content, crawlable pages, understandable page structure, and language that reflects what users actually search for. Google also says its ranking systems are designed to prioritize helpful, reliable, people-first information. (",[29,24639,157],{"href":20055,"rel":24640},[33],[17,24642,24643,24644,35],{},"That foundation still matters in AI search. Google's generative search documentation says AI Overviews and AI Mode use information from Google's Search index. Techniques including retrieval-augmented generation and query fan-out help the systems retrieve relevant pages before generating responses. (",[29,24645,157],{"href":20678,"rel":24646},[33],[17,24648,24649],{},"This creates an important dependency:",[17,24651,24652],{},[21,24653,24654],{},"If a system cannot reliably discover, access, understand, or retrieve your content, later GEO tactics have little to work with.",[17,24656,24657],{},[161,24658,24659],{},"INTERNAL LINK: Technical SEO Explained",[12,24661,24663],{"id":24662},"where-aeo-fits","Where AEO Fits",[17,24665,24666],{},"AEO is best understood as an optimization lens rather than a completely separate technical discipline.",[17,24668,24669],{},"Suppose someone searches:",[1501,24671,24672],{},[17,24673,24674],{},"How long should a meta description be?",[17,24676,24677],{},"A traditional SEO page may explain meta descriptions across several sections. An answer-oriented version should still provide that depth, but it would also place a clear, self-contained answer near the relevant question.",[17,24679,24680,24681,35],{},"The goal is not to reduce every article to tiny Q&A blocks. Google specifically says there is no requirement to artificially \"chunk\" content into small pieces for generative AI systems. (",[29,24682,157],{"href":24525,"rel":24683},[33],[17,24685,24686,24687,24690],{},"A better principle is ",[21,24688,24689],{},"answer clarity",": important passages should state what something is, why it matters, and any important qualification without forcing a reader—or retrieval system—to reconstruct the meaning from several unrelated paragraphs.",[12,24692,24694],{"id":24693},"where-geo-goes-further","Where GEO Goes Further",[17,24696,24697],{},"GEO becomes relevant when the final experience is generated rather than simply selected from a list of search results.",[17,24699,24700],{},"A generative system may retrieve several sources, compare their information, and synthesize an answer. That makes qualities such as source credibility, specificity, evidence, unique information, and clear claims increasingly useful.",[17,24702,21189,24703,24705,24706,35],{},[1625,24704,21192],{},", first released in 2023, formalized GEO as optimization for visibility in generative engines. Its experiments reported visibility improvements of up to 40% under its benchmark and tested strategies, but that figure is an experimental result—not a universal performance expectation for commercial AI search systems. (",[29,24707,11364],{"href":21459,"rel":24708},[33],[17,24710,24711,24712,35],{},"For Google specifically, there is no special GEO schema or separate technical eligibility layer. Google says normal SEO practices remain relevant and warns against supposed GEO shortcuts such as unnecessary AI-specific markup, artificial content chunking, and inauthentic mentions. (",[29,24713,157],{"href":24525,"rel":24714},[33],[12,24716,24718],{"id":24717},"ai-platforms-can-differ","AI Platforms Can Differ",[17,24720,24721],{},"One reason GEO cannot be reduced to a single checklist is that different systems have different retrieval architectures and crawler controls.",[17,24723,24724,24725,24727,24728,35],{},"For example, OpenAI says websites that want their content to be discoverable for ChatGPT search should allow ",[21,24726,4107],{}," and ensure their hosting or CDN does not block OpenAI's published crawler traffic. OpenAI also states that inclusion or placement is not guaranteed. (",[29,24729,4122],{"href":4825,"rel":24730},[33],[17,24732,24733],{},"This is a genuine GEO-specific operational task: traditional Googlebot access alone does not guarantee that another AI search provider can crawl the same website.",[17,24735,24736],{},[161,24737,24738],{},"INTERNAL LINK: AI Crawler Access and robots.txt",[12,24740,24742],{"id":24741},"what-should-you-optimize","What Should You Optimize?",[17,24744,24745],{},"The practical strategy is not to maintain separate \"SEO content,\" \"AEO content,\" and \"GEO content.\"",[17,24747,24748],{},"Build one strong information architecture:",[978,24750,24751,24757,24763,24769,24775,24784,24790],{},[981,24752,24753,24756],{},[21,24754,24755],{},"Make pages technically accessible."," Check crawling, indexing, canonicalization, internal links, rendering, and server accessibility.",[981,24758,24759,24762],{},[21,24760,24761],{},"Answer the primary intent clearly."," Readers should understand the core answer quickly.",[981,24764,24765,24768],{},[21,24766,24767],{},"Add evidence and specificity."," Original tests, first-hand experience, measurements, examples, and authoritative sources provide information that generic summaries cannot.",[981,24770,24771,24774],{},[21,24772,24773],{},"Keep claims self-contained."," Important statements should remain understandable when quoted or extracted.",[981,24776,24777,24780,24781,35],{},[21,24778,24779],{},"Use structured data correctly."," It can help Google understand page entities and enable eligible rich-result features, but it does not guarantee visibility and is not a special GEO requirement. (",[29,24782,157],{"href":20816,"rel":24783},[33],[981,24785,24786,24789],{},[21,24787,24788],{},"Check relevant AI crawlers."," Do this only for platforms that matter to your audience.",[981,24791,24792,24795],{},[21,24793,24794],{},"Measure outcomes beyond rankings."," Track search clicks, AI referrals, conversions, citations where observable, and business outcomes.",[17,24797,24798,24799],{},"The strongest overlap between SEO, AEO, and GEO is therefore simple: ",[21,24800,24801],{},"publish information worth retrieving.",[12,24803,907],{"id":906},[909,24805,24807],{"id":24806},"is-geo-replacing-seo","Is GEO replacing SEO?",[17,24809,24810,24811,35],{},"No. At least for Google, current documentation explicitly says foundational SEO remains relevant to generative search. (",[29,24812,157],{"href":24813,"rel":24814},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Ffundamentals\u002Fai-optimization-guide?authuser=4&hl=en&utm_source=chatgpt.com",[33],[909,24816,24818],{"id":24817},"do-i-need-llmstxt-for-google-geo","Do I need llms.txt for Google GEO?",[17,24820,24821,24822,24824,24825,35],{},"No. Google states that ",[129,24823,4660],{}," and similar AI-specific files do not improve visibility or rankings in Google Search. (",[29,24826,157],{"href":24525,"rel":24827},[33],[909,24829,24831],{"id":24830},"does-schema-guarantee-ai-citations","Does schema guarantee AI citations?",[17,24833,24834,24835,35],{},"No. Google says structured data does not guarantee even eligible rich-result appearances, and its generative search features do not require special structured data. (",[29,24836,157],{"href":20816,"rel":24837},[33],[909,24839,24841],{"id":24840},"should-every-paragraph-be-written-for-ai-extraction","Should every paragraph be written for AI extraction?",[17,24843,24844,24845,35],{},"No. Clear, self-contained passages are useful, but content should still be organized primarily for humans. Google explicitly discourages unnecessary AI-specific rewriting and artificial chunking. (",[29,24846,157],{"href":24525,"rel":24847},[33],[12,24849,887],{"id":886},[17,24851,2654,24852,513,24855,520,24858,174],{},[21,24853,24854],{},"SEO as the infrastructure",[21,24856,24857],{},"AEO as an answer-design discipline",[21,24859,24860],{},"GEO as a visibility layer for generative systems",[17,24862,24863],{},"Do not rebuild your content strategy around speculative AI hacks. First make the site crawlable, technically sound, useful, trustworthy, and meaningfully different from commodity content. Then improve answer clarity, evidence, entity relationships, crawler accessibility, and measurement for the AI platforms that actually matter to your business.",[17,24865,24866],{},"The terminology may continue changing. Those underlying engineering principles are much more stable.",[12,24868,960],{"id":959},[17,24870,24871],{},"SEO, AEO, and GEO describe different visibility goals, but they largely share the same foundation.",[17,24873,24874,24875,24878,24879,24882,24883,24886],{},"SEO helps systems ",[21,24876,24877],{},"find and evaluate"," your content. AEO helps them ",[21,24880,24881],{},"extract useful answers",". GEO considers whether generative systems can ",[21,24884,24885],{},"retrieve, trust, synthesize, and potentially cite"," that information.",[17,24888,24889],{},"The strategic shift is not from SEO to GEO. It is from optimizing only for ranked pages to designing information that remains useful across both traditional and generative search.",[12,24891,976],{"id":975},[1640,24893,24894,24902,24909,24916,24923,24932,24940,24947],{},[981,24895,1023,24896,24898,24899],{},[1625,24897,19032],{},", added May 15, 2026. ",[29,24900,2754],{"href":24813,"rel":24901},[33],[981,24903,1023,24904,21035,24906],{},[1625,24905,21034],{},[29,24907,2754],{"href":20678,"rel":24908},[33],[981,24910,1023,24911,21035,24913],{},[1625,24912,23333],{},[29,24914,2754],{"href":20055,"rel":24915},[33],[981,24917,1023,24918,19033,24920],{},[1625,24919,21072],{},[29,24921,2754],{"href":20816,"rel":24922},[33],[981,24924,1023,24925,1057,24928],{},[1625,24926,24927],{},"Google Search Essentials",[29,24929,2754],{"href":24930,"rel":24931},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fessentials?utm_source=chatgpt.com",[33],[981,24933,22771,24934,21098,24936],{},[1625,24935,22774],{},[29,24937,24939],{"href":12179,"rel":24938},[33],"OpenAI documentation",[981,24941,22771,24942,18331,24944],{},[1625,24943,23341],{},[29,24945,24939],{"href":4825,"rel":24946},[33],[981,24948,24949,24950,24952,24953],{},"Aggarwal, Murahari, Rajpurohit et al. — ",[1625,24951,21192],{},", November 16, 2023, arXiv:2311.09735. ",[29,24954,24956],{"href":21459,"rel":24955},[33],"arXiv paper",{"title":185,"searchDepth":311,"depth":311,"links":24958},[24959,24960,24961,24962,24963,24964,24965,24966,24967,24968,24969,24970],{"id":24494,"depth":311,"text":24489},{"id":19678,"depth":311,"text":19679},{"id":24529,"depth":311,"text":24530},{"id":24633,"depth":311,"text":24634},{"id":24662,"depth":311,"text":24663},{"id":24693,"depth":311,"text":24694},{"id":24717,"depth":311,"text":24718},{"id":24741,"depth":311,"text":24742},{"id":906,"depth":311,"text":907},{"id":886,"depth":311,"text":887},{"id":959,"depth":311,"text":960},{"id":975,"depth":311,"text":976},"AI SEO","Understand the real difference between SEO, AEO, and GEO, what changes in AI search, what stays the same, and which optimizations actually matter.","\u002Fseo_vs_aeo_vs_geo.png","AI SEO image",{},"\u002Fblog\u002Fen\u002Fseo-aeo-geo",{"title":24489,"description":24972},"difference-SEO-AEO-GEO","blog\u002Fen\u002Fseo-aeo-geo","4zA6eoohGibqVJplR9CsxkNl00ztMF0VmKlCv-_mWPQ",{"id":24982,"title":24983,"author":7,"body":24984,"category":24971,"description":25404,"draft":1097,"extension":1098,"featured":1099,"image":25405,"imageAlt":25406,"locale":1102,"meta":25407,"navigation":1099,"path":25408,"publishedAt":25409,"seo":25410,"slug":25411,"stem":25412,"translationKey":25411,"updatedAt":25409,"__hash__":25413},"blog\u002Fblog\u002Fen\u002Fwebsite-speed-seo.md","What Is AI SEO? A Practical Definition",{"type":9,"value":24985,"toc":25389},[24986,24989,24995,25001,25005,25010,25016,25023,25027,25030,25044,25047,25059,25062,25116,25119,25123,25127,25133,25146,25151,25155,25158,25168,25171,25175,25178,25186,25192,25197,25201,25213,25219,25228,25232,25235,25244,25250,25259,25262,25267,25270,25272,25279,25282,25285,25287,25291,25294,25298,25304,25308,25314,25318,25324,25326,25333,25336,25338],[15691,24987,24983],{"id":24988},"what-is-ai-seo-a-practical-definition",[17,24990,24991,24992],{},"Search is no longer limited to a page of blue links. Google can generate AI Overviews and AI Mode responses, ChatGPT can search the web and cite sources, and Microsoft surfaces publisher content inside Bing and Copilot experiences. That creates a practical question for website owners: ",[21,24993,24994],{},"does SEO need a new discipline for AI search?",[17,24996,24997,24998,35],{},"Partly—but not in the way many “AI SEO hacks” suggest. The foundations remain familiar: crawlability, indexability, useful content, clear site architecture, accurate information, and a good user experience. What changes is the number of places where that content may be discovered, retrieved, summarized, cited, or used to support an AI-generated answer. (",[29,24999,157],{"href":18524,"rel":25000},[33],[12,25002,25004],{"id":25003},"what-is-ai-seo","What Is AI SEO?",[17,25006,25007],{},[21,25008,25009],{},"AI SEO is the practice of making web content discoverable, understandable, trustworthy, and useful across both traditional search results and AI-powered search or answer experiences.",[17,25011,25012,25013,35],{},"It is best treated as an extension of SEO rather than a replacement for it. Google explicitly describes AEO (Answer Engine Optimization) and GEO (Generative Engine Optimization) as terms used for work focused on AI-search visibility, while stating that, from Google's perspective, optimizing for generative search is still SEO. (",[29,25014,157],{"href":18524,"rel":25015},[33],[17,25017,25018,25019,25022],{},"There is no single technical standard called “AI SEO,” so the term is used inconsistently. It can also refer to using AI tools to automate keyword research, content production, or SEO analysis. That is a different idea. ",[21,25020,25021],{},"Using AI for SEO describes the tool; optimizing for AI search describes the discovery problem."," This article focuses on the second meaning.",[12,25024,25026],{"id":25025},"how-ai-seo-differs-from-traditional-seo","How AI SEO Differs From Traditional SEO",[17,25028,25029],{},"Traditional SEO commonly asks:",[1640,25031,25032,25035,25038,25041],{},[981,25033,25034],{},"Can the search engine crawl and index the page?",[981,25036,25037],{},"Is the page relevant to a query?",[981,25039,25040],{},"Is the content useful and trustworthy?",[981,25042,25043],{},"Can it rank and earn a click?",[17,25045,25046],{},"AI-powered search adds another possibility: a system may retrieve information from several sources and construct an answer before the user visits any of them.",[17,25048,25049,25050,25052,25053,25055,25056,35],{},"Google documents two mechanisms behind its generative Search features: ",[21,25051,19704],{},", where relevant information is retrieved from the Search index to ground a response, and ",[21,25054,18730],{},", where a system performs multiple related searches to investigate different parts of a user's question. (",[29,25057,157],{"href":18524,"rel":25058},[33],[17,25060,25061],{},"This changes the visibility model:",[69,25063,25064,25074],{},[72,25065,25066],{},[75,25067,25068,25071],{},[78,25069,25070],{},"Traditional SEO",[78,25072,25073],{},"AI SEO adds",[85,25075,25076,25084,25092,25100,25108],{},[75,25077,25078,25081],{},[90,25079,25080],{},"Ranking for a query",[90,25082,25083],{},"Being retrieved for related subqueries",[75,25085,25086,25089],{},[90,25087,25088],{},"Search-result impressions",[90,25090,25091],{},"Visibility inside generated answers",[75,25093,25094,25097],{},[90,25095,25096],{},"Organic clicks",[90,25098,25099],{},"Citations and references",[75,25101,25102,25105],{},[90,25103,25104],{},"Keyword-focused analysis",[90,25106,25107],{},"Topic and entity coverage",[75,25109,25110,25113],{},[90,25111,25112],{},"Search Console metrics",[90,25114,25115],{},"AI-specific visibility measurements where available",[17,25117,25118],{},"The underlying website does not suddenly need a separate “AI version.” It needs information that retrieval systems can access and confidently use.",[12,25120,25122],{"id":25121},"what-actually-matters-for-ai-search-visibility","What Actually Matters for AI Search Visibility?",[220,25124,25126],{"id":25125},"strong-seo-fundamentals-still-come-first","Strong SEO Fundamentals Still Come First",[17,25128,25129,25130,35],{},"For Google's AI Overviews and AI Mode, pages still need the same basic Search foundation. Google says a supporting page must be indexed and eligible to appear in Search with a snippet, and it does not require special AI markup. Crawlability, internal links, textual content, page experience, and accurate structured data remain relevant. (",[29,25131,157],{"href":23799,"rel":25132},[33],[17,25134,25135,25136,25138,25139,25141,25142,35],{},"For ChatGPT search, crawler access can be a separate technical consideration. OpenAI documents that publishers who want content to be available for summaries and snippets should not block ",[21,25137,4107],{},". OpenAI also distinguishes this search crawler from ",[21,25140,4149],{},", which publishers can block when they want to opt relevant pages out of potential training use. (",[29,25143,4122],{"href":25144,"rel":25145},"https:\u002F\u002Fhelp.openai.com\u002Fen\u002Farticles\u002F12627856-publishers-and-developers-faq%23%3A~%3Atext%3DChatGPT%20automatically%20includes%20the%20UTM%20parameter%20utm_source%3Dchatgpt.com%20in%20referral%20URLs%2C%20enabling%20clear%20tracking%20and%20analysis%20of%20inbound%20traffic%20from%20ChatGPT%20search%20results",[33],[17,25147,25148],{},[161,25149,25150],{},"INTERNAL LINK: AI Crawlers Explained: GPTBot, OAI-SearchBot and Googlebot",[220,25152,25154],{"id":25153},"information-gain-matters-more-than-producing-more-pages","Information Gain Matters More Than Producing More Pages",[17,25156,25157],{},"AI systems can already summarize common information. Rewriting the same generic article that dozens of sites have published gives a retrieval system little reason to prefer your page.",[17,25159,25160,25161,25164,25165,35],{},"Google's 2026 generative-search guidance specifically emphasizes ",[21,25162,25163],{},"unique, non-commodity content",": first-hand experience, expert knowledge, original analysis, useful evidence, or information that goes beyond commonly repeated material. It also warns against creating large numbers of pages merely to capture fan-out or query variations. (",[29,25166,157],{"href":18524,"rel":25167},[33],[17,25169,25170],{},"For example, “10 Ways to Improve Website Speed” is easy to reproduce. A study showing how your team reduced LCP across 30 Nuxt sites, including measurements, implementation decisions, failures, and limitations, contains information another source cannot simply recreate.",[220,25172,25174],{"id":25173},"clarity-helps-humans-and-retrieval-systems","Clarity Helps Humans and Retrieval Systems",[17,25176,25177],{},"Important facts should be easy to locate and interpret. Use descriptive headings, answer important questions directly, define entities clearly, distinguish facts from opinions, and support technical claims with evidence.",[17,25179,12183,25180,25182,25183,35],{},[21,25181,151],{}," mean writing robotic paragraphs specifically for LLMs. Google explicitly says there is no requirement to split content into tiny “AI-friendly chunks” or rewrite pages in a special generative-search style. (",[29,25184,157],{"href":18524,"rel":25185},[33],[17,25187,25188,25189,35],{},"Structured data can still help search engines understand specific entities and can make pages eligible for supported rich results, but Google states that there is no special schema.org type required for generative AI Search. (",[29,25190,157],{"href":23799,"rel":25191},[33],[17,25193,25194],{},[161,25195,25196],{},"INTERNAL LINK: Structured Data for SEO: What Schema Actually Does",[12,25198,25200],{"id":25199},"common-ai-seo-misconceptions","Common AI SEO Misconceptions",[17,25202,25203,25206,25207,25209,25210,35],{},[21,25204,25205],{},"“We need an llms.txt file to rank in AI search.”"," Not for Google. Its current documentation says Google Search ignores ",[129,25208,4660],{}," for ranking and visibility. Other systems may choose to use such files, so their usefulness has to be evaluated provider by provider. (",[29,25211,157],{"href":18524,"rel":25212},[33],[17,25214,25215,25218],{},[21,25216,25217],{},"“AI SEO means publishing lots of AI-generated articles.”"," No. Content-generation technology and search optimization are separate concerns. At scale, low-value generated pages can create the same quality and spam problems as low-value human-written pages.",[17,25220,25221,25224,25225,35],{},[21,25222,25223],{},"“There is one AI ranking position we can track.”"," Current platforms work differently. Microsoft, for example, reports citation counts and grounding queries in Bing Webmaster Tools while explicitly noting that citation counts do not represent ranking, authority, or answer placement. (",[29,25226,22638],{"href":22636,"rel":25227},[33],[12,25229,25231],{"id":25230},"how-do-you-measure-ai-seo","How Do You Measure AI SEO?",[17,25233,25234],{},"Measurement is becoming more concrete.",[17,25236,25237,25238,25240,25241,35],{},"As of ",[21,25239,19918],{},", Google says its dedicated Generative AI performance insights in Search Console are available to websites worldwide. The reports expose information such as generative-feature impressions, appearing pages, countries, devices, and changes over time. (",[29,25242,157],{"href":20065,"rel":25243},[33],[17,25245,25246,25247,35],{},"Microsoft's Bing Webmaster Tools AI Performance dashboard can report total citations, page-level citation activity, grounding-query samples, and visibility trends across supported Bing, Copilot, and partner AI experiences. (",[29,25248,22638],{"href":22636,"rel":25249},[33],[17,25251,25252,25253,25255,25256,35],{},"OpenAI states that ChatGPT search referral links include ",[129,25254,19426],{},", allowing publishers to analyze resulting traffic in analytics tools. (",[29,25257,4122],{"href":25144,"rel":25258},[33],[17,25260,25261],{},"This suggests a practical measurement framework:",[17,25263,25264],{},[21,25265,25266],{},"crawlability → index\u002Fdiscovery → AI visibility → citations → referral traffic → conversions",[17,25268,25269],{},"Do not reduce AI SEO to citation counts alone. A citation without useful traffic may have different business value from a lower-volume query that generates qualified visitors or conversions.",[12,25271,887],{"id":886},[17,25273,25274,25275,25278],{},"Treat AI SEO as ",[21,25276,25277],{},"SEO expanded for retrieval-driven search",", not as a collection of shortcuts.",[17,25280,25281],{},"Start by fixing the fundamentals: crawlability, indexing, canonicalization, internal linking, performance, accessible textual information, and technically correct pages. Then improve the information itself—clear answers, precise entities, expert knowledge, original evidence, useful comparisons, and details competitors cannot easily reproduce.",[17,25283,25284],{},"Finally, test each major discovery platform independently. Google Search, ChatGPT, Bing, Copilot, and future AI agents do not necessarily crawl, retrieve, measure, or cite information in exactly the same way.",[12,25286,907],{"id":906},[909,25288,25290],{"id":25289},"is-ai-seo-the-same-as-geo","Is AI SEO the Same as GEO?",[17,25292,25293],{},"GEO usually refers specifically to Generative Engine Optimization. AI SEO can be used as a broader umbrella covering generative search, answer systems, AI crawlers, citations, and traditional SEO foundations. There is no universal industry standard defining either term.",[909,25295,25297],{"id":25296},"will-traditional-seo-become-obsolete","Will Traditional SEO Become Obsolete?",[17,25299,25300,25301,35],{},"Current evidence does not support that conclusion. Google's generative Search systems continue to depend on its Search index and ranking infrastructure, making foundational SEO directly relevant to AI visibility. (",[29,25302,157],{"href":18524,"rel":25303},[33],[909,25305,25307],{"id":25306},"do-i-need-special-ai-schema-markup","Do I Need Special AI Schema Markup?",[17,25309,25310,25311,35],{},"Not for Google's generative Search features. Google states that no special schema.org markup is required. Use structured data where it accurately describes visible page content and supports existing search features. (",[29,25312,157],{"href":18524,"rel":25313},[33],[909,25315,25317],{"id":25316},"should-ai-crawlers-be-allowed-in-robotstxt","Should AI Crawlers Be Allowed in robots.txt?",[17,25319,25320,25321,35],{},"Only when that matches your goals. For example, OpenAI says OAI-SearchBot access is relevant to inclusion in ChatGPT search summaries and snippets. Different crawlers can serve different purposes, so crawler policy should be configured deliberately rather than allowing or blocking every AI bot as a group. (",[29,25322,4122],{"href":25144,"rel":25323},[33],[12,25325,960],{"id":959},[17,25327,25328,25329,25332],{},"AI SEO is not a separate replacement for SEO. It is the adaptation of SEO to a search environment where systems increasingly ",[21,25330,25331],{},"retrieve, synthesize, cite, and act on web information",", rather than only ranking links.",[17,25334,25335],{},"The most defensible strategy is therefore surprisingly familiar: make your content technically accessible, genuinely useful, unambiguous, evidence-backed, and difficult to replace with a generic summary. The interfaces around search are changing quickly. Those fundamentals are much more durable.",[12,25337,976],{"id":975},[1640,25339,25340,25347,25354,25363,25372,25380],{},[981,25341,1023,25342,19033,25344],{},[1625,25343,19032],{},[29,25345,2754],{"href":19036,"rel":25346},[33],[981,25348,1023,25349,21035,25351],{},[1625,25350,19022],{},[29,25352,2754],{"href":19025,"rel":25353},[33],[981,25355,1023,25356,25358,25359],{},[1625,25357,19064],{},", June 3, 2026; worldwide-rollout note updated August 31, 2026. ",[29,25360,25362],{"href":19068,"rel":25361},[33],"Google announcement",[981,25364,1023,25365,1057,25368],{},[1625,25366,25367],{},"Overview of Search appearance topics \u002F Structured Data",[29,25369,25371],{"href":10643,"rel":25370},[33],"Google Search appearance documentation",[981,25373,22771,25374,22775,25377],{},[1625,25375,25376],{},"Publishers and Developers – FAQ",[29,25378,22779],{"href":4853,"rel":25379},[33],[981,25381,25382,25383,22789,25385],{},"Microsoft Bing — ",[1625,25384,22788],{},[29,25386,25388],{"href":22792,"rel":25387},[33],"Microsoft Bing announcement",{"title":185,"searchDepth":311,"depth":311,"links":25390},[25391,25392,25393,25398,25399,25400,25401,25402,25403],{"id":25003,"depth":311,"text":25004},{"id":25025,"depth":311,"text":25026},{"id":25121,"depth":311,"text":25122,"children":25394},[25395,25396,25397],{"id":25125,"depth":325,"text":25126},{"id":25153,"depth":325,"text":25154},{"id":25173,"depth":325,"text":25174},{"id":25199,"depth":311,"text":25200},{"id":25230,"depth":311,"text":25231},{"id":886,"depth":311,"text":887},{"id":906,"depth":311,"text":907},{"id":959,"depth":311,"text":960},{"id":975,"depth":311,"text":976},"AI SEO means optimizing websites for AI-powered search, retrieval, and citations without abandoning traditional SEO. Learn how it works, what matters, and which AI SEO myths to ignore.","\u002Faiseo.png","Website speed and performance analysis",{},"\u002Fblog\u002Fen\u002Fwebsite-speed-seo","2026-09-07",{"title":24983,"description":25404},"what-ai-seo","blog\u002Fen\u002Fwebsite-speed-seo","c3rTBBtADuVKtt0XAlfu7nUevQPAKO0NkKc3cIhrWRw",1789910354570]