{"id":712853,"date":"2026-02-21T12:40:15","date_gmt":"2026-02-21T09:40:15","guid":{"rendered":"https:\/\/buradabiliyorum.com\/en\/how-to-vibe-code-an-seo-tool-without-losing-control-of-your-llm-2\/"},"modified":"2026-02-21T12:40:15","modified_gmt":"2026-02-21T09:40:15","slug":"how-to-vibe-code-an-seo-tool-without-losing-control-of-your-llm-2","status":"publish","type":"post","link":"https:\/\/buradabiliyorum.com\/en\/how-to-vibe-code-an-seo-tool-without-losing-control-of-your-llm-2\/","title":{"rendered":"How to vibe-code an SEO tool without losing control of your LLM"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_85 counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<label for=\"ez-toc-cssicon-toggle-item-6a36e16655374\" class=\"ez-toc-cssicon-toggle-label\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #dd3333;color:#dd3333\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #dd3333;color:#dd3333\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/label><input type=\"checkbox\"  id=\"ez-toc-cssicon-toggle-item-6a36e16655374\" checked aria-label=\"Toggle\" \/><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-vibe-code-an-seo-tool-without-losing-control-of-your-llm-2\/#Vibe_coding_isnt_just_prompting_Learn_how_to_manage_context_windows_troubleshoot_smarter_and_build_an_AI_Overview_extractor_step_by_step\" >Vibe coding isn\u2019t just prompting. Learn how to manage context windows, troubleshoot smarter, and build an AI Overview extractor step by step.<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-vibe-code-an-seo-tool-without-losing-control-of-your-llm-2\/#Choose_your_vibe-coding_environment\" >Choose your vibe-coding environment<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-vibe-code-an-seo-tool-without-losing-control-of-your-llm-2\/#Why_prompting_alone_isnt_enough\" >Why prompting alone isn\u2019t enough<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-vibe-code-an-seo-tool-without-losing-control-of-your-llm-2\/#Tutorial_Lets_vibe-code_an_AI_Overview_question_extraction_system\" >Tutorial: Let\u2019s vibe-code an AI Overview question extraction system<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-vibe-code-an-seo-tool-without-losing-control-of-your-llm-2\/#Step_1_Planning\" >Step 1: Planning<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-vibe-code-an-seo-tool-without-losing-control-of-your-llm-2\/#Step_2_Set_the_groundwork\" >Step 2: Set the groundwork<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-vibe-code-an-seo-tool-without-losing-control-of-your-llm-2\/#Step_3_Building\" >Step 3: Building<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-vibe-code-an-seo-tool-without-losing-control-of-your-llm-2\/#Oh_no_%E2%80%A6_theres_a_problem\" >Oh no \u2026 there\u2019s a problem!<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-vibe-code-an-seo-tool-without-losing-control-of-your-llm-2\/#Logging_and_tracing_your_outputs\" >Logging and tracing your outputs<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-vibe-code-an-seo-tool-without-losing-control-of-your-llm-2\/#Structure_beats_vibes\" >Structure beats vibes<\/a><\/li><\/ul><\/nav><\/div>\n<h2 class=\"subhead\" itemprop=\"alternativeHeadline\"><span class=\"ez-toc-section\" id=\"Vibe_coding_isnt_just_prompting_Learn_how_to_manage_context_windows_troubleshoot_smarter_and_build_an_AI_Overview_extractor_step_by_step\"><\/span>Vibe coding isn\u2019t just prompting. Learn how to manage context windows, troubleshoot smarter, and build an AI Overview extractor step by step.<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><\/p>\n<div class=\"bialty-container\">\n<p>We all use LLMs daily. Most of us use them at work. Many of us use them heavily.<\/p>\n<p>People in tech \u2014 yes, you \u2014 use LLMs at <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/rethinkpriorities.org\/research-area\/adoption-llms-tech-workers\/\" target=\"_blank\" rel=\"noopener\">twice the rate of the general population<\/a>. Many of us spend more than a full day each week using them \u2014 yes, me.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1600\" height=\"800\" http: alt=\"LLM usage amount\" class=\"wp-image-469705\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/LLM-usage-amount.png 1600w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/LLM-usage-amount-768x384.png 768w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/LLM-usage-amount-1536x768.png 1536w\" data-lazy-sizes=\"(max-width: 1600px) 100vw, 1600px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/LLM-usage-amount.png\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1600\" height=\"800\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/LLM-usage-amount.png\" alt=\"LLM usage amount\" class=\"wp-image-469705\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/LLM-usage-amount.png 1600w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/LLM-usage-amount-768x384.png 768w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/LLM-usage-amount-1536x768.png 1536w\" sizes=\"(max-width: 1600px) 100vw, 1600px\"><\/figure>\n<\/div>\n<p>Even those of us who rely on LLMs regularly get frustrated when they don\u2019t respond the way we want.<\/p>\n<p>Here\u2019s how to communicate with LLMs when you\u2019re vibe coding. The same lessons <a href=\"https:\/\/buradabiliyorum.com\/en\/category\/download-scripts-themes-apps\/\" data-internallinksmanager029f6b8e52c=\"9\" title=\"Download Scripts &amp; Themes &amp; Apps\" target=\"_blank\" rel=\"noopener\">app<\/a>ly if you find yourself in drawn-out \u201cconversations\u201d with an LLM UI like ChatGPT while trying to get real work done.<\/p>\n<h2 id=\"choose-your-vibecoding-environment\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Choose_your_vibe-coding_environment\"><\/span>Choose your vibe-coding environment<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Vibe coding is building software with AI assistants. You describe what you want, the model generates the code, and you decide whether it matches your intent.<\/p>\n<p>That\u2019s the idea. In practice, it\u2019s often messier.<\/p>\n<p>The first thing you\u2019ll need to decide is which code editor to work in. This is where you\u2019ll communicate with the LLM, generate code, view it, and run it. <\/p>\n<p>I\u2019m a big fan of Cursor and highly recommend it. I started on the free Hobby plan, and that\u2019s more than enough for what we\u2019re doing here.\u00a0<\/p>\n<p>Fair warning \u2013 it took me about two months to move up two tiers and start paying for the Pro+ account. As I mentioned above, I\u2019m firmly in the \u201cover a day a week of LLM use\u201d camp, and I\u2019d welcome the company.<\/p>\n<p>\u00a0A few options are:<\/p>\n<ul class=\"wp-block-list\">\n<li><strong>Cursor: <\/strong>This is the one I use, as do most vibe coders. It has an awesome interface and is easily customized.<\/li>\n<li><strong>Windsurf: <\/strong>The main alternative to Cursor. It can run its own terminal commands and self-correct without hand-holding.<\/li>\n<li><strong>Google Antigravity: <\/strong>Unlike Cursor, it moves away from the file-tree view and focuses on letting you direct a fleet of agents to build and test features autonomously.<\/li>\n<\/ul>\n<p>In my screenshots, I\u2019ll be using Cursor, but the principles apply to any of them. They even apply when you\u2019re simply communicating with LLMs in depth.<\/p>\n<div style=\"background: radial-gradient(circle at 30% 40%, rgba(184, 111, 255, 0.15), rgba(0, 169, 255, 0.15) 40%, #CDE8FD 70%); padding: 30px; width: 100%; max-width: 802px; color: #000000 !important; font-family: Arial, sans-serif; margin: 25px 0 30px 0; border-radius: 8px; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); position: relative; box-sizing: border-box;\">\n<div style=\"width: 100%; max-width: 100%; margin-bottom: 20px; text-align: left; padding-right: 20px; box-sizing: border-box;\">\n<div id=\"semrush-one-headline\" class=\"headline-responsive\" style=\"font-family: Oswald, sans-serif; font-size: 30px; font-weight: normal; margin: 0; color: #000000 !important; line-height: 1.2;\">\n        Your customers search everywhere. Make sure your brand <span style=\"background: linear-gradient(90deg, #D56EFE 0%, #068EF8 51%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text;\">shows up<\/span>.\n      <\/div>\n<p id=\"semrush-one-subhead\" style=\"font-family: Roboto, sans-serif; font-size: 18px; font-weight: 300; line-height: 25px; margin: 12px 0 0 0; color: #000000 !important;\">\n        The SEO toolkit you know, plus the AI visibility data you need.\n      <\/p>\n<\/p><\/div>\n<div style=\"margin-bottom: 15px;\">\n      <span id=\"semrush-one-cta\" style=\"display: inline-block; background-color: #FF642D; color: white; height: 44px; border: none; border-radius: 5px; cursor: pointer; font-size: 16px; padding: 0 24px; font-weight: bold; white-space: nowrap; box-sizing: border-box; text-decoration: none; line-height: 44px;\">Start Free Trial<\/span>\n    <\/div>\n<div style=\"font-size: 12px;\">\n<div style=\"font-family: Roboto, sans-serif; font-weight: 300; color: #000000; margin-bottom: 4px;\">Get started with<\/div>\n<p>      <img loading=\"lazy\" width=\"400\" height=\"52\" decoding=\"async\" http: alt=\"Semrush One Logo\" style=\"height: 16px; width: auto; display: block;\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2025\/11\/semrush-one.webp\"><img loading=\"lazy\" width=\"400\" height=\"52\" decoding=\"async\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2025\/11\/semrush-one.webp\" alt=\"Semrush One Logo\" style=\"height: 16px; width: auto; display: block;\">\n    <\/div>\n<\/p><\/div>\n<style>\n  @media (max-width: 768px) {\n    .headline-responsive {\n      font-size: 30px !important;\n      line-height: 1.3 !important;\n    }\n  }\n<\/style>\n<h2 id=\"why-prompting-alone-isnt-enough\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Why_prompting_alone_isnt_enough\"><\/span>Why prompting alone isn\u2019t enough<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>You might wonder why you need a tutorial at all. You tell the LLM what you want, and it builds it, right? That may work for a meta description or a superhero SEO image of yourself, but it won\u2019t cut it for anything moderately complex \u2014 let alone a tool or agentic system spanning multiple files.<\/p>\n<p>One key concept to understand is the context window. That\u2019s the amount of content an LLM can hold in memory. It\u2019s typically split across input and output tokens. <\/p>\n<p>GPT-5.2 offers a 400,000-token context window, and Gemini 3 Pro comes in at 1 million. That\u2019s roughly 50,000 lines of code or 1,500 pages of text.<\/p>\n<p>The challenge isn\u2019t just hitting the limit, especially with large codebases. It\u2019s that the more content you stuff into the window, the worse models get at retrieving what\u2019s inside it. <\/p>\n<p>Attention mechanisms tend to favor the beginning and end of the window, not the middle. In <a href=\"https:\/\/buradabiliyorum.com\/en\/category\/general\/\" data-internallinksmanager029f6b8e52c=\"3\" title=\"General\" target=\"_blank\" rel=\"noopener\">general<\/a>, the less cluttered the window, the better the model can focus on what matters.<\/p>\n<p>If you want a deeper dive into context windows, Matt Pocock has a <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/www.youtube.com\/watch?v=-uW5-TaVXu4\" target=\"_blank\" rel=\"noopener\">great YouTube video<\/a> that explains it clearly. For now, it\u2019s enough to understand placement and the cost of being verbose.<\/p>\n<p>A few other tips:<\/p>\n<ul class=\"wp-block-list\">\n<li><strong>One team, one dream.<\/strong> Break your project into logical stages, as we\u2019ll do below, and clear the LLM\u2019s memory between them.<\/li>\n<li><strong>Do your own research.<\/strong> You don\u2019t need to become an expert in every implementation detail, but you should understand the directional options for how your project could be built. You\u2019ll see why shortly.<\/li>\n<li><strong>When troubleshooting, trust but verify.<\/strong> Have the model explain what\u2019s happening, review it carefully, and double-check critical details in another browser window.<\/li>\n<\/ul>\n<p><strong><em>Dig deeper: <\/em><\/strong><strong><em>How vibe coding is changing search marketing workflows<\/em><\/strong><\/p>\n<h2 id=\"tutorial-lets-vibecode-an-ai-overview-question-extraction-system\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Tutorial_Lets_vibe-code_an_AI_Overview_question_extraction_system\"><\/span>Tutorial: Let\u2019s vibe-code an AI Overview question extraction system<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>How do you create content that appears prominently in an AI Overview? Answer the questions the overview answers.<\/p>\n<p>In this tutorial, we\u2019ll build a tool that extracts questions from AI Overviews and stores them for later use. While I hope you find this use case valuable, the real goal is to walk through the stages of properly vibe coding a system. This isn\u2019t a shortcut to winning an AI Overview spot, though it may help.<\/p>\n<h3 class=\"wp-block-heading\" id=\"h-step-1-planning\"><span class=\"ez-toc-section\" id=\"Step_1_Planning\"><\/span>Step 1: Planning<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Before you open Cursor \u2014 or your tool of choice \u2014 get clear on what you want to accomplish and what resources you\u2019ll need. Think through your approach and what it\u2019ll take to execute.<\/p>\n<p>While I noted not to launch Cursor yet, this is a fine time to use a traditional search engine or a generative AI.<\/p>\n<p>I tend to start with a simple sentence or two in Gemini or ChatGPT describing what I\u2019m trying to accomplish, along with a list of the steps I think the system might need to go through. It\u2019s OK to be wrong here. We\u2019re not building anything yet.<\/p>\n<p>For example, in this case, I might write:<\/p>\n<pre class=\"wp-block-code\"><code>I\u2019m an SEO, and I want to use the current AI Overviews displayed by Google to inspire the content our authors will write. The goal is to extract the implied questions answered in the AI Overview. Steps might include:\n\n1 \u2013 Select a query you want to rank for.\n2 \u2013 Conduct a search and extract the AI Overview.\n3 \u2013 Use an LLM to extract the implied questions answered in the AI Overview.\n4 \u2013 Write the questions to a saveable location.<\/code><\/pre>\n<p>With this in hand, you can head to your LLM of choice. I prefer Gemini for UI chats, but any modern model with solid reasoning capabilities should work.<\/p>\n<p>Start a new chat. Let the system know you\u2019ll be building a project in Cursor and want to brainstorm ideas. Then paste in the planning prompt.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"830\" height=\"512\" http: alt=\"AI Mode Cursor\" class=\"wp-image-469707\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/AI-Mode-Cursor.png 830w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/AI-Mode-Cursor-768x474.png 768w\" data-lazy-sizes=\"(max-width: 830px) 100vw, 830px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/AI-Mode-Cursor.png\"><img loading=\"lazy\" decoding=\"async\" width=\"830\" height=\"512\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/AI-Mode-Cursor.png\" alt=\"AI Mode Cursor\" class=\"wp-image-469707\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/AI-Mode-Cursor.png 830w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/AI-Mode-Cursor-768x474.png 768w\" sizes=\"auto, (max-width: 830px) 100vw, 830px\"><\/figure>\n<\/div>\n<p>The system will im<a href=\"https:\/\/buradabiliyorum.com\/en\/category\/social-mediaa\/\" data-internallinksmanager029f6b8e52c=\"1\" title=\"Social Media\" target=\"_blank\" rel=\"noopener\">media<\/a>tely provide feedback, but not all of it will be good or in scope. For example, one response suggested tracking the AI Overview over time and running it in its own UI. That\u2019s beyond what we\u2019re doing here, though it may be worth noting.<\/p>\n<p>It\u2019s also worth noting that models don\u2019t always suggest the simplest path. In one case, it proposed a complex method for extracting AI Overviews that would likely trigger Google\u2019s bot detection. This is where we go back to the list we created above.<\/p>\n<p>Step 1 will be easy. We just need a field to enter keywords.<\/p>\n<p>Step 2 could use some refinement. What\u2019s the most straightforward and reliable way to capture the content in an AI Overview? Let\u2019s ask Gemini.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"781\" height=\"629\" http: alt=\"Reverse-engineering Google AI Overviews\" class=\"wp-image-469708\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Reverse-engineering-Google-AI-Overviews.png 781w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Reverse-engineering-Google-AI-Overviews-768x619.png 768w\" data-lazy-sizes=\"(max-width: 781px) 100vw, 781px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Reverse-engineering-Google-AI-Overviews.png\"><img loading=\"lazy\" decoding=\"async\" width=\"781\" height=\"629\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Reverse-engineering-Google-AI-Overviews.png\" alt=\"Reverse-engineering Google AI Overviews\" class=\"wp-image-469708\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Reverse-engineering-Google-AI-Overviews.png 781w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Reverse-engineering-Google-AI-Overviews-768x619.png 768w\" sizes=\"auto, (max-width: 781px) 100vw, 781px\"><\/figure>\n<\/div>\n<p>I\u2019m already familiar with these services and frequently use SerpAPI, so I\u2019ll choose that one for this project. The first time I did this, I reviewed options, compared pricing, and asked a few peers. Making the wrong choice early can be costly.<\/p>\n<p>Step 3 also needs a closer look. Which LLMs are best for question extraction?<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"753\" height=\"434\" http: alt=\"Which LLMs are best for question extraction\" class=\"wp-image-469709\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Which-LLMs-are-best-for-question-extraction.png\"><img loading=\"lazy\" decoding=\"async\" width=\"753\" height=\"434\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Which-LLMs-are-best-for-question-extraction.png\" alt=\"Which LLMs are best for question extraction\" class=\"wp-image-469709\"><\/figure>\n<\/div>\n<p>That said, I don\u2019t trust an LLM blindly, and for good reason. In one response, Claude 4.6 Opus, which had recently been released, wasn\u2019t even considered.<\/p>\n<p>After a couple of back-and-forth prompts, I told Gemini:<\/p>\n<ul class=\"wp-block-list\">\n<li>\u201cNow, be critical of your suggestions and the benchmarks you\u2019ve selected.\u201d<\/li>\n<li>\u201cThe text will be short, so cost isn\u2019t an issue.\u201d<\/li>\n<\/ul>\n<p>We then came around to:<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"755\" height=\"462\" http: alt=\"AI Mode - comparisons\" class=\"wp-image-469710\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/AI-Mode-comparisons.png\"><img loading=\"lazy\" decoding=\"async\" width=\"755\" height=\"462\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/AI-Mode-comparisons.png\" alt=\"AI Mode - comparisons\" class=\"wp-image-469710\"><\/figure>\n<\/div>\n<p>For this project, we\u2019re going with GPT-5.2, since you likely have API access or, at the very least, an OpenAI account, which makes setup easy. Call it a hunch. I won\u2019t add an LLM judge in this tutorial, but in the real world, I strongly recommend it.<\/p>\n<p>Now that we\u2019ve done the back-and-forth, we have more clarity on what we need. Let\u2019s refine the outline:<\/p>\n<pre class=\"wp-block-code\"><code>I\u2019m an SEO, and I want to use the current AI Overviews displayed by Google to inspire the content our authors will write. The idea is to extract the implied questions answered in the AI Overview. Steps might include:\n\n1 \u2013 Select a query you want to rank for.\n2 \u2013 Conduct a search and extract the AI Overview using SerpAPI.\n3 \u2013 Use GPT-5.2 Thinking to extract the implied questions answered in the AI Overview.\n4 \u2013 Write the query, AI Overview, and questions to W&amp;B Weave.<\/code><\/pre>\n<p>Before we move on, make sure you have access to the three services you\u2019ll need for this:<\/p>\n<ul class=\"wp-block-list\">\n<li><strong>SerpAPI: <\/strong>The free plan will work.<\/li>\n<li><strong>OpenAI API: <\/strong>You\u2019ll need to pay for this one, but $5 will go a long way for this use case. Think months.\u00a0<\/li>\n<li><strong>Weights &amp; Biases: <\/strong>The free plan will work. <em>(<\/em><strong><em>Disclosure: <\/em><\/strong><em>I\u2019m the head of SEO at Weights &amp; Biases.)<\/em><\/li>\n<\/ul>\n<p>Now let\u2019s move on to Cursor. I\u2019ll assume you have it installed and a project set up. It\u2019s quick, easy, and free.\u00a0<\/p>\n<p>The screenshots that follow reflect my preferred layout in Editor Mode.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"751\" height=\"465\" http: alt=\"Cursor - Editor Mode\" class=\"wp-image-469711\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-Editor-Mode.png\"><img loading=\"lazy\" decoding=\"async\" width=\"751\" height=\"465\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-Editor-Mode.png\" alt=\"Cursor - Editor Mode\" class=\"wp-image-469711\"><\/figure>\n<\/div>\n<h3 class=\"wp-block-heading\" id=\"h-step-2-set-the-groundwork\"><span class=\"ez-toc-section\" id=\"Step_2_Set_the_groundwork\"><\/span>Step 2: Set the groundwork<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>If you haven\u2019t used Cursor before, you\u2019re in for a treat. One of its strengths is access to a range of models. You can choose the one that fits your needs or pick the \u201cbest\u201d option based on leaderboards.<\/p>\n<p>I tend to gravitate toward Gemini 3 Pro and Claude 4.6 Opus.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"650\" height=\"337\" http: alt=\"Cursor - LLM options\" class=\"wp-image-469712\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-LLM-options.png\"><img loading=\"lazy\" decoding=\"async\" width=\"650\" height=\"337\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-LLM-options.png\" alt=\"Cursor - LLM options\" class=\"wp-image-469712\"><\/figure>\n<\/div>\n<p>If you don\u2019t have access to all of them, you can select the non-thinking models for this project. We also want to start in <em>Plan<\/em> mode.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"583\" height=\"158\" http: alt=\"Cursor - Plan mode\" class=\"wp-image-469713\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-Plan-mode.png\"><img loading=\"lazy\" decoding=\"async\" width=\"583\" height=\"158\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-Plan-mode.png\" alt=\"Cursor - Plan mode\" class=\"wp-image-469713\"><\/figure>\n<\/div>\n<p>Let\u2019s begin with the project prompt we defined above.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"819\" height=\"421\" http: alt=\"Cursor - project prompt\" class=\"wp-image-469714\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-project-prompt.png 819w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-project-prompt-768x395.png 768w\" data-lazy-sizes=\"(max-width: 819px) 100vw, 819px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-project-prompt.png\"><img loading=\"lazy\" decoding=\"async\" width=\"819\" height=\"421\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-project-prompt.png\" alt=\"Cursor - project prompt\" class=\"wp-image-469714\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-project-prompt.png 819w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-project-prompt-768x395.png 768w\" sizes=\"auto, (max-width: 819px) 100vw, 819px\"><\/figure>\n<\/div>\n<p><strong>Note:<\/strong> You may be asked whether you want to allow Cursor to run queries on your behalf. You\u2019ll want to allow that.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"576\" height=\"218\" http: alt=\"Cursor - project integrations\" class=\"wp-image-469715\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-project-integrations.png\"><img loading=\"lazy\" decoding=\"async\" width=\"576\" height=\"218\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-project-integrations.png\" alt=\"Cursor - project integrations\" class=\"wp-image-469715\"><\/figure>\n<\/div>\n<p>Now it\u2019s time to go back and forth to refine the plan that the model developed from our initial prompt. Because this is a fairly straightforward task, you might think we could jump straight into building it, which would be bad for the tutorial and in practice. If you thought that, you\u2019d be wrong. Humans like me don\u2019t always communicate clearly or fully convey our intent. This planning stage is where we clarify that.<\/p>\n<p>When I enter the instructions into the Cursor chat in Planning mode, using Sonnet 4.5, it kicks off a discussion. One of the great things about this stage is that the model often surfaces angles I hadn\u2019t considered at the outset. Below are my replies, where I answer each question with the applicable letter. You can add context after the letter if needed.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"927\" height=\"418\" http: alt=\"Image 113\" class=\"wp-image-469716\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/image-113.png 927w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/image-113-768x346.png 768w\" data-lazy-sizes=\"(max-width: 927px) 100vw, 927px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/image-113.png\"><img loading=\"lazy\" decoding=\"async\" width=\"927\" height=\"418\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/image-113.png\" alt=\"Image 113\" class=\"wp-image-469716\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/image-113.png 927w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/image-113-768x346.png 768w\" sizes=\"auto, (max-width: 927px) 100vw, 927px\"><\/figure>\n<\/div>\n<p>An example of the model suggesting angles I hadn\u2019t considered appears in question 4 above. It may be helpful to pass along the context snippets. I opted for B in this case. There are obvious cases for C, but for speed and token efficiency, I retrieve as little as possible. Intent and related considerations are outside the scope of this article and would add complexity, as they\u2019d require a judge.<\/p>\n<p>The system will output a plan. Read it carefully, as you\u2019ll almost certainly catch issues in how it interpreted your instructions. Here\u2019s one example.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"980\" height=\"314\" http: alt=\"Cursor - model selection\" class=\"wp-image-469718\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-model-selection.png 980w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-model-selection-768x246.png 768w\" data-lazy-sizes=\"(max-width: 980px) 100vw, 980px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-model-selection.png\"><img loading=\"lazy\" decoding=\"async\" width=\"980\" height=\"314\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-model-selection.png\" alt=\"Cursor - model selection\" class=\"wp-image-469718\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-model-selection.png 980w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-model-selection-768x246.png 768w\" sizes=\"auto, (max-width: 980px) 100vw, 980px\"><\/figure>\n<\/div>\n<p>I\u2019m told there is no GPT-5.2 Thinking. There is, and it\u2019s noted in the announcement. I have the system double-check a few details I want to confirm, but otherwise, the plan looks good. Claude also noted the format the system will output to the screen, which is a nice touch and something I hadn\u2019t specified. That\u2019s what partners are for.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1360\" height=\"547\" http: alt=\"Cursor - output format\" class=\"wp-image-469719\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-output-format.png 1360w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-output-format-768x309.png 768w\" data-lazy-sizes=\"(max-width: 1360px) 100vw, 1360px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-output-format.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1360\" height=\"547\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-output-format.png\" alt=\"Cursor - output format\" class=\"wp-image-469719\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-output-format.png 1360w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-output-format-768x309.png 768w\" sizes=\"auto, (max-width: 1360px) 100vw, 1360px\"><\/figure>\n<\/div>\n<p>Finally, I always ask the model to think through edge cases where the system might fail. I did, and it returned a list. From that list, I selected the cases I wanted addressed. Others, like what to do if an AI Overview exceeds the context window, are so unlikely that I didn\u2019t bother.<\/p>\n<p>A few final tweaks addressed those items, along with one I added myself: what happens if there is no AI Overview?<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1140\" height=\"442\" http: alt=\"Cursor - what happens if there is no AI Overview?\" class=\"wp-image-469720\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-what-happens-if-there-is-no-AI-Overview.png 1140w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-what-happens-if-there-is-no-AI-Overview-768x298.png 768w\" data-lazy-sizes=\"(max-width: 1140px) 100vw, 1140px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-what-happens-if-there-is-no-AI-Overview.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1140\" height=\"442\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-what-happens-if-there-is-no-AI-Overview.png\" alt=\"Cursor - what happens if there is no AI Overview?\" class=\"wp-image-469720\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-what-happens-if-there-is-no-AI-Overview.png 1140w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-what-happens-if-there-is-no-AI-Overview-768x298.png 768w\" sizes=\"auto, (max-width: 1140px) 100vw, 1140px\"><\/figure>\n<\/div>\n<p>I have to give credit to Tarun Jain, whom I mentioned above, for this next step. I used to copy the outline manually, but he suggested simply asking the model to generate a file with the plan. So let\u2019s direct it to create a markdown file, plan.md, with the following instruction:<\/p>\n<p><code>Build a plan.md including the reviewed plan and plan of action for the implementation.\u00a0<\/code><\/p>\n<p>Remember the context window issue I discussed above? If you start building from your current state in Cursor, the initial directives may end up in the middle of the window, where they\u2019re least accessible, since your project brainstorming occupies the beginning.<\/p>\n<p>To get around this, once the file is complete, review it and make sure it accurately reflects what you\u2019ve brainstormed.<\/p>\n<h3 class=\"wp-block-heading\" id=\"h-step-3-building\"><span class=\"ez-toc-section\" id=\"Step_3_Building\"><\/span>Step 3: Building<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Now we get to build. Start a new chat by clicking the + in the top right corner. This opens a new context window.<\/p>\n<p>This time, we\u2019ll work in <em>Agent<\/em> mode, and I\u2019m going with Gemini 3 Pro.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"596\" height=\"152\" http: alt=\"Cursor - Agent mode\" class=\"wp-image-469721\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-Agent-mode.png\"><img loading=\"lazy\" decoding=\"async\" width=\"596\" height=\"152\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-Agent-mode.png\" alt=\"Cursor - Agent mode\" class=\"wp-image-469721\"><\/figure>\n<\/div>\n<p>Arguably, Claude 4.6 Opus might be a technically better choice, but I find I get more accurate responses from Gemini based on how I communicate. I work with far smarter developers who prefer Claude and GPT. I\u2019m not sure whether I naturally communicate in a way that works better with Gemini or if Google has trained me over the years.<\/p>\n<p>First, tell the system to load the plan. It immediately begins building the system, and as you\u2019ll see, you may need to approve certain steps, so don\u2019t step away just yet.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1600\" height=\"860\" http: alt=\"Cursor - Load the plan\" class=\"wp-image-469722\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-Load-the-plan.png 1600w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-Load-the-plan-768x413.png 768w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-Load-the-plan-1536x826.png 1536w\" data-lazy-sizes=\"(max-width: 1600px) 100vw, 1600px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-Load-the-plan.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1600\" height=\"860\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-Load-the-plan.png\" alt=\"Cursor - Load the plan\" class=\"wp-image-469722\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-Load-the-plan.png 1600w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-Load-the-plan-768x413.png 768w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-Load-the-plan-1536x826.png 1536w\" sizes=\"auto, (max-width: 1600px) 100vw, 1600px\"><\/figure>\n<\/div>\n<p>Once it\u2019s done, there are only a couple of steps left, hopefully. Thankfully, it tells you what they are.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1600\" height=\"642\" http: alt=\"Cursor System Outline\" class=\"wp-image-469723\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-System-outline.png 1600w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-System-outline-768x308.png 768w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-System-outline-1536x616.png 1536w\" data-lazy-sizes=\"(max-width: 1600px) 100vw, 1600px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-System-outline.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1600\" height=\"642\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-System-outline.png\" alt=\"Cursor System Outline\" class=\"wp-image-469723\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-System-outline.png 1600w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-System-outline-768x308.png 768w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-System-outline-1536x616.png 1536w\" sizes=\"auto, (max-width: 1600px) 100vw, 1600px\"><\/figure>\n<\/div>\n<p>First, install the required libraries. These include the packages needed to run SerpAPI, GPT, Weights &amp; Biases, and others. The system has created a requirements.txt file, so you can install everything in one line.<\/p>\n<p><strong>Note:<\/strong> It\u2019s best to create a virtual environment. Think of this as a container for the project, so downloaded dependencies don\u2019t mix with those from other projects. This only matters if you plan to run multiple projects, but it\u2019s simple to set up, so it\u2019s worth doing.<\/p>\n<p>Open a terminal:<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"969\" height=\"405\" http: alt=\"Cursor - terminal\" class=\"wp-image-469724\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-terminal.png 969w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-terminal-768x321.png 768w\" data-lazy-sizes=\"(max-width: 969px) 100vw, 969px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-terminal.png\"><img loading=\"lazy\" decoding=\"async\" width=\"969\" height=\"405\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-terminal.png\" alt=\"Cursor - terminal\" class=\"wp-image-469724\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-terminal.png 969w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-terminal-768x321.png 768w\" sizes=\"auto, (max-width: 969px) 100vw, 969px\"><\/figure>\n<\/div>\n<p>Then enter the following lines, one at a time:<\/p>\n<ul class=\"wp-block-list\">\n<li><code>python3 -m venv .venv<\/code><\/li>\n<li><code>source .venv\/bin\/activate<\/code><\/li>\n<li><code>pip install -r requirements.txt<\/code><\/li>\n<\/ul>\n<p>You\u2019re creating the environment, activating it, and installing the dependencies inside it. Keep the second command handy, since you\u2019ll need it any time you reopen Cursor and want to run this project.<\/p>\n<p>You\u2019ll know you\u2019re in the correct environment when you see (.venv) at the beginning of the terminal prompt.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"630\" height=\"80\" http: alt=\"Cursor Venv Terminal\" class=\"wp-image-469725\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-venv-terminal.png\"><img loading=\"lazy\" decoding=\"async\" width=\"630\" height=\"80\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-venv-terminal.png\" alt=\"Cursor Venv Terminal\" class=\"wp-image-469725\"><\/figure>\n<\/div>\n<p>When you run the requirements.txt installation, you\u2019ll see the packages load.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"820\" height=\"288\" http: alt=\"Cursor - packages\" class=\"wp-image-469726\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-packages.png 820w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-packages-768x270.png 768w\" data-lazy-sizes=\"(max-width: 820px) 100vw, 820px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-packages.png\"><img loading=\"lazy\" decoding=\"async\" width=\"820\" height=\"288\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-packages.png\" alt=\"Cursor - packages\" class=\"wp-image-469726\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-packages.png 820w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-packages-768x270.png 768w\" sizes=\"auto, (max-width: 820px) 100vw, 820px\"><\/figure>\n<\/div>\n<p>Next, rename the .env.example file to .env and fill in the variables.<\/p>\n<p>The system can\u2019t create a .env file, and it won\u2019t be included in GitHub uploads if you go that route, which I did and linked above. It\u2019s a hidden file used to store your API keys and related credentials, meaning information you don\u2019t want publicly exposed. By default, mine looks like this.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"560\" height=\"306\" http: alt=\"API keys and related credentials\" class=\"wp-image-469727\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/image-115.png\"><img loading=\"lazy\" decoding=\"async\" width=\"560\" height=\"306\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/image-115.png\" alt=\"API keys and related credentials\" class=\"wp-image-469727\"><\/figure>\n<\/div>\n<p>I\u2019ll fill in my API keys, sorry, can\u2019t show that screen, and then all that\u2019s left is to run the script.<\/p>\n<p>To do that, enter this in the terminal:<\/p>\n<pre class=\"wp-block-code\"><code>python main.py \"your search query\"<\/code><\/pre>\n<p>If you forget the command, you can always ask Cursor.<\/p>\n<h3 class=\"wp-block-heading\" id=\"h-oh-no-there-s-a-problem\"><span class=\"ez-toc-section\" id=\"Oh_no_%E2%80%A6_theres_a_problem\"><\/span>Oh no \u2026 there\u2019s a problem!<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>I\u2019m building this as we go, so I can show you how to handle hiccups. When I ran it, I hit a critical one.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"852\" height=\"304\" http: alt=\"Cursor - no AI Overview found\" class=\"wp-image-469728\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-no-AI-Overview-found.png 852w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-no-AI-Overview-found-768x274.png 768w\" data-lazy-sizes=\"(max-width: 852px) 100vw, 852px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-no-AI-Overview-found.png\"><img loading=\"lazy\" decoding=\"async\" width=\"852\" height=\"304\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-no-AI-Overview-found.png\" alt=\"Cursor - no AI Overview found\" class=\"wp-image-469728\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-no-AI-Overview-found.png 852w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-no-AI-Overview-found-768x274.png 768w\" sizes=\"auto, (max-width: 852px) 100vw, 852px\"><\/figure>\n<\/div>\n<p>It\u2019s not finding an AI Overview, even though the phrase I entered clearly generates one.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"985\" height=\"344\" http: alt=\"Google - what is SEO\" class=\"wp-image-469729\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Google-what-is-SEO.png 985w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Google-what-is-SEO-768x268.png 768w\" data-lazy-sizes=\"(max-width: 985px) 100vw, 985px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Google-what-is-SEO.png\"><img loading=\"lazy\" decoding=\"async\" width=\"985\" height=\"344\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Google-what-is-SEO.png\" alt=\"Google - what is SEO\" class=\"wp-image-469729\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Google-what-is-SEO.png 985w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Google-what-is-SEO-768x268.png 768w\" sizes=\"auto, (max-width: 985px) 100vw, 985px\"><\/figure>\n<\/div>\n<p>Thankfully, I have a wide-open context window, so I can paste:<\/p>\n<ul class=\"wp-block-list\">\n<li>An image showing that the output is clearly wrong.<\/li>\n<li>The code output illustrates what the system is finding.<\/li>\n<li>A link (or sometimes simply text) with additional information to direct the solution.\u00a0<\/li>\n<\/ul>\n<p>Fortunately, it\u2019s easy to add terminal output to the chat. Select everything from your command through the full error message, then click \u201cAdd to Chat.\u201d<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"848\" height=\"381\" http: alt=\"Cursor - Add to Chat.\" class=\"wp-image-469730\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-Add-to-Chat.png 848w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-Add-to-Chat-768x345.png 768w\" data-lazy-sizes=\"(max-width: 848px) 100vw, 848px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-Add-to-Chat.png\"><img loading=\"lazy\" decoding=\"async\" width=\"848\" height=\"381\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-Add-to-Chat.png\" alt=\"Cursor - Add to Chat.\" class=\"wp-image-469730\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-Add-to-Chat.png 848w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-Add-to-Chat-768x345.png 768w\" sizes=\"auto, (max-width: 848px) 100vw, 848px\"><\/figure>\n<\/div>\n<p>It\u2019s important not to rely solely on LLMs to find the information you need. A quick search took me to the AI Overview documentation from SerpAPI, which I included in my follow-up instructions to the model.<\/p>\n<p>My troubleshooting comment looks like this.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1266\" height=\"321\" http: alt=\"Cursor - troubleshooting comment\" class=\"wp-image-469731\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-troubleshooting-comment.png 1266w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-troubleshooting-comment-768x195.png 768w\" data-lazy-sizes=\"(max-width: 1266px) 100vw, 1266px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-troubleshooting-comment.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1266\" height=\"321\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-troubleshooting-comment.png\" alt=\"Cursor - troubleshooting comment\" class=\"wp-image-469731\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-troubleshooting-comment.png 1266w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-troubleshooting-comment-768x195.png 768w\" sizes=\"auto, (max-width: 1266px) 100vw, 1266px\"><\/figure>\n<\/div>\n<p>Notice I tell Cursor not to make changes until I give the go-ahead. We don\u2019t want to fill up the context window or train the model to assume its job is to make mistakes and try fixes in a loop. We reduce that risk by reviewing the approach before editing files.<\/p>\n<p>Glad I did. I had a hunch it wasn\u2019t retrieving the code blocks properly, so I added one to the chat for additional review. Keep in mind that LLMs and bots may not see everything you see in a browser. If something is important, paste it in as an example.<\/p>\n<p>Now it\u2019s time to try again.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"903\" height=\"414\" http: alt=\"Cursor - troubleshooting executed\" class=\"wp-image-469732\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-troubleshooting-executed.png 903w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-troubleshooting-executed-768x352.png 768w\" data-lazy-sizes=\"(max-width: 903px) 100vw, 903px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-troubleshooting-executed.png\"><img loading=\"lazy\" decoding=\"async\" width=\"903\" height=\"414\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-troubleshooting-executed.png\" alt=\"Cursor - troubleshooting executed\" class=\"wp-image-469732\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-troubleshooting-executed.png 903w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Cursor-troubleshooting-executed-768x352.png 768w\" sizes=\"auto, (max-width: 903px) 100vw, 903px\"><\/figure>\n<\/div>\n<p>Excellent, it\u2019s working as we hoped.<\/p>\n<p>Now we have a list of all the implied questions, along with the result chunks that answer them.<\/p>\n<p><strong><em>Dig deeper: <\/em><\/strong><strong><em>Inspiring examples of responsible and realistic vibe coding for SEO<\/em><\/strong><\/p>\n<h3 class=\"wp-block-heading\" id=\"h-logging-and-tracing-your-outputs\"><span class=\"ez-toc-section\" id=\"Logging_and_tracing_your_outputs\"><\/span>Logging and tracing your outputs<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>It\u2019s a bit messy to rely solely on terminal output, and it isn\u2019t saved once you close the session. That\u2019s what I\u2019m using Weave to address.<\/p>\n<p>Weave is, among other things, a tool for logging prompt inputs and outputs. It gives us a permanent place to review our queries and extracted questions. At the bottom of the terminal output, you\u2019ll find a link to Weave.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"806\" height=\"178\" http: alt=\"Logging And Tracing Your Outputs\" class=\"wp-image-469733\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Logging-and-tracing-your-outputs.png 806w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Logging-and-tracing-your-outputs-768x170.png 768w\" data-lazy-sizes=\"(max-width: 806px) 100vw, 806px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Logging-and-tracing-your-outputs.png\"><img loading=\"lazy\" decoding=\"async\" width=\"806\" height=\"178\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Logging-and-tracing-your-outputs.png\" alt=\"Logging And Tracing Your Outputs\" class=\"wp-image-469733\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Logging-and-tracing-your-outputs.png 806w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/Logging-and-tracing-your-outputs-768x170.png 768w\" sizes=\"auto, (max-width: 806px) 100vw, 806px\"><\/figure>\n<\/div>\n<p>There are two traces to watch. The first is what this was all about: the analyze_query trace.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1600\" height=\"684\" http: alt=\"W&amp;B Weave\" class=\"wp-image-469734\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/WB-Weave.png 1600w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/WB-Weave-768x328.png 768w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/WB-Weave-1536x657.png 1536w\" data-lazy-sizes=\"(max-width: 1600px) 100vw, 1600px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/WB-Weave.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1600\" height=\"684\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/WB-Weave.png\" alt=\"W&amp;B Weave\" class=\"wp-image-469734\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/WB-Weave.png 1600w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/WB-Weave-768x328.png 768w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/WB-Weave-1536x657.png 1536w\" sizes=\"auto, (max-width: 1600px) 100vw, 1600px\"><\/figure>\n<\/div>\n<p>In the inputs, you can see the query and model used. In the outputs, you\u2019ll find the full AI Overview, along with all the extracted questions and the content each question came from. You can view the full trace <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/wandb.ai\/onlineinference\/seo-question-extraction\/weave\/traces?view=traces_default&amp;peekPath=%2Fonlineinference%2Fseo-question-extraction%2Fcalls%2F019c57e1-8b0c-74f4-bcca-d2b32f24c410%3FhideTraceTree%3D0\" target=\"_blank\" rel=\"noopener\">here<\/a>, if you\u2019re interested.<\/p>\n<p>Now, when we\u2019re writing an article and want to make sure we\u2019re answering the questions implied by the AI Overview, we have something concrete to reference.<\/p>\n<p>The second trace logs the prompt sent to GPT-5.2 and the response.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1600\" height=\"699\" http: alt=\"W&amp;B Weave second trace\" class=\"wp-image-469735\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/WB-Weave-second-trace.png 1600w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/WB-Weave-second-trace-768x336.png 768w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/WB-Weave-second-trace-1536x671.png 1536w\" data-lazy-sizes=\"(max-width: 1600px) 100vw, 1600px\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/WB-Weave-second-trace.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1600\" height=\"699\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/WB-Weave-second-trace.png\" alt=\"W&amp;B Weave second trace\" class=\"wp-image-469735\" srcset=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/WB-Weave-second-trace.png 1600w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/WB-Weave-second-trace-768x336.png 768w, https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/WB-Weave-second-trace-1536x671.png 1536w\" sizes=\"auto, (max-width: 1600px) 100vw, 1600px\"><\/figure>\n<\/div>\n<p>This is an important part of the ongoing process. Here you can easily review the exact prompt sent to GPT-5.2 without digging through the code. If you start noticing issues in the extracted questions, you can trace the problem back to the prompt and get back to vibing with your new friend, Cursor.<\/p>\n<div style=\"background: radial-gradient(circle at 30% 40%, rgba(184, 111, 255, 0.15), rgba(0, 169, 255, 0.15) 40%, #CDE8FD 70%); padding: 30px; width: 100%; max-width: 802px; color: #000000 !important; font-family: Arial, sans-serif; margin: 25px 0 30px 0; border-radius: 8px; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); position: relative; box-sizing: border-box;\">\n<div style=\"width: 100%; max-width: 100%; margin-bottom: 20px; text-align: left; padding-right: 20px; box-sizing: border-box;\">\n<div id=\"semrush-one-headline-bottom\" class=\"headline-responsive\" style=\"font-family: Oswald, sans-serif; font-size: 30px; font-weight: normal; margin: 0; color: #000000 !important; line-height: 1.2;\">\n        See the <span style=\"background: linear-gradient(90deg, #D56EFE 0%, #068EF8 51%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text;\">complete picture<\/span> of your search visibility.\n      <\/div>\n<p id=\"semrush-one-subhead-bottom\" style=\"font-family: Roboto, sans-serif; font-size: 18px; font-weight: 300; line-height: 25px; margin: 12px 0 0 0; color: #000000 !important;\">\n        Track, optimize, and win in Google and AI search from one platform.\n      <\/p>\n<\/p><\/div>\n<div style=\"margin-bottom: 15px;\">\n      <span id=\"semrush-one-cta-bottom\" style=\"display: inline-block; background-color: #FF642D; color: white; height: 44px; border: none; border-radius: 5px; cursor: pointer; font-size: 16px; padding: 0 24px; font-weight: bold; white-space: nowrap; box-sizing: border-box; text-decoration: none; line-height: 44px;\">Start Free Trial<\/span>\n    <\/div>\n<div style=\"font-size: 12px;\">\n<div style=\"font-family: Roboto, sans-serif; font-weight: 300; color: #000000; margin-bottom: 4px;\">Get started with<\/div>\n<p>      <img loading=\"lazy\" width=\"400\" height=\"52\" decoding=\"async\" http: alt=\"Semrush One Logo\" style=\"height: 16px; width: auto; display: block;\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2025\/11\/semrush-one.webp\"><img loading=\"lazy\" width=\"400\" height=\"52\" decoding=\"async\" src=\"https:\/\/searchengineland.com\/wp-content\/seloads\/2025\/11\/semrush-one.webp\" alt=\"Semrush One Logo\" style=\"height: 16px; width: auto; display: block;\">\n    <\/div>\n<\/p><\/div>\n<style>\n  @media (max-width: 768px) {\n    .headline-responsive {\n      font-size: 30px !important;\n      line-height: 1.3 !important;\n    }\n  }\n<\/style>\n<h2 id=\"structure-beats-vibes\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Structure_beats_vibes\"><\/span>Structure beats vibes<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>I\u2019ve been vibe coding for a couple of years, and my approach has evolved. It gets more involved when I\u2019m building multi-agent systems, but the fundamentals above are always in place.<\/p>\n<p>It may feel faster to drop a line or two into Cursor or ChatGPT. Try that a few times, and you\u2019ll see the choice: give up on vibe coding \u2014 or learn to do it with structure.<\/p>\n<p>Keep the vibes good, my friends.<\/p>\n<\/div>\n<blockquote><p><strong><span style=\"color: #ff6600;\">If you liked the article, do not forget to share it with your friends. Follow us on\u00a0<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/news.google.com\/publications\/CAAqBwgKMN63nwsw68G3Aw\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Google News<\/a><\/span>\u00a0too, click on the star and choose us from your favorites.<\/span><\/strong><\/p><\/blockquote>\n<blockquote>\n<p style=\"text-align: center;\"><strong>If you want to read more like this article, you can visit our <span style=\"color: #ff9900;\"><a style=\"color: #ff9900;\" href=\"https:\/\/buradabiliyorum.com\/en\/category\/technology\/\" target=\"_blank\" >Technology<\/a><\/span> category.<\/strong><\/p>\n<\/blockquote>\n<p><span style=\"color: black;\"><a style=\"color: #ff9900;\" href=\"https:\/\/searchengineland.com\/vibe-code-seo-tool-469657\" target=\"_blank\" >Source<\/a><\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Vibe coding isn\u2019t just prompting. Learn how to manage context windows, troubleshoot smarter, and build an AI Overview extractor step by step. We all use LLMs daily. Most of us use them at work. Many of us use them heavily. People in tech \u2014 yes, you \u2014 use LLMs at twice the rate of the&#8230;<\/p>\n","protected":false},"author":1,"featured_media":712854,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"https:\/\/searchengineland.com\/wp-content\/seloads\/2026\/02\/How-to-vibe-code-an-SEO-tool-without-losing-control-of-your-LLM.png","fifu_image_alt":"","footnotes":""},"categories":[18],"tags":[],"class_list":["post-712853","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technology"],"_links":{"self":[{"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/posts\/712853","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/comments?post=712853"}],"version-history":[{"count":0,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/posts\/712853\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/media\/712854"}],"wp:attachment":[{"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/media?parent=712853"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/categories?post=712853"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/tags?post=712853"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}