<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Jan S.</title>
    <description>The latest articles on DEV Community by Jan S. (@jan_inteldo).</description>
    <link>https://dev.to/jan_inteldo</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4041434%2Ffd621cf6-5b67-484b-873e-b73b7b140562.png</url>
      <title>DEV Community: Jan S.</title>
      <link>https://dev.to/jan_inteldo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jan_inteldo"/>
    <language>en</language>
    <item>
      <title>My SEO Agent Found Good Keywords. That Didn't Mean They Were Good Recommendations.</title>
      <dc:creator>Jan S.</dc:creator>
      <pubDate>Mon, 19 Oct 2026 15:30:00 +0000</pubDate>
      <link>https://dev.to/jan_inteldo/my-seo-agent-found-good-keywords-that-didnt-mean-they-were-good-recommendations-405m</link>
      <guid>https://dev.to/jan_inteldo/my-seo-agent-found-good-keywords-that-didnt-mean-they-were-good-recommendations-405m</guid>
      <description>&lt;p&gt;A keyword can have high search volume, low competition, and still be a bad choice for your website. &lt;/p&gt;

&lt;p&gt;That's one problem I want to solve when building an SEO agent. &lt;/p&gt;

&lt;p&gt;It's easy to ask an agent to find keywords, check search volume, look at competitors, and return a list of opportunities. The harder part is making it question its own result before handing them over. &lt;/p&gt;

&lt;h2&gt;
  
  
  Finding keywords is only half the job
&lt;/h2&gt;

&lt;p&gt;Imagine an SEO agent finds a keyword with 5,000 monthly searches and a low difficulty score.&lt;/p&gt;

&lt;p&gt;It looks promising. But the keyword might attract people who will never use your product. Or the search results might be full of guides when your agent recommends creating a product page.&lt;/p&gt;

&lt;p&gt;The numbers look good, but the recommendation doesn't.&lt;/p&gt;

&lt;p&gt;This is why I wouldn't build an SEO agent that simply collects metrics and ranks keywords by opportunity score.&lt;/p&gt;

&lt;p&gt;I'd want it to explain why a keyword is worth targeting, then check whether that reasoning holds up.&lt;/p&gt;

&lt;h2&gt;
  
  
  Give the agent a second pass
&lt;/h2&gt;

&lt;p&gt;One way to approach this is to split the work into two stages.&lt;/p&gt;

&lt;p&gt;The first stage finds potential keywords. It looks at search data, competitor rankings, related terms, and the pages already on your website.&lt;/p&gt;

&lt;p&gt;The second stage tries to find reasons not to recommend them.&lt;/p&gt;

&lt;p&gt;For each keyword, it could ask a few simple questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does the search match what the business offers?&lt;/li&gt;
&lt;li&gt;What are the top-ranking pages actually about?&lt;/li&gt;
&lt;li&gt;Is the keyword different enough from topics we already cover?&lt;/li&gt;
&lt;li&gt;Is there evidence that competitors are getting traffic from this topic?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What information is missing before we can make a confident recommendation?&lt;/p&gt;

&lt;p&gt;The second pass shouldn't exist just to agree with the first one. It should be allowed to reject a keyword, lower its priority, or ask for more data.&lt;/p&gt;

&lt;p&gt;For example, a keyword might have decent search volume but the wrong intent. Another might have low volume but closely match a problem the target audience is trying to solve.&lt;/p&gt;

&lt;p&gt;The agent should be able to explain that difference instead of treating search volume as the deciding factor.&lt;/p&gt;

&lt;h2&gt;
  
  
  Make the reasoning checkable
&lt;/h2&gt;

&lt;p&gt;I'd also avoid asking the agent to produce a single score without showing how it got there.&lt;/p&gt;

&lt;p&gt;A useful recommendation should include the keyword, the intended audience, the reason it matters, the evidence behind it, and the main risk.&lt;/p&gt;

&lt;p&gt;That makes it easier to spot weak reasoning.&lt;/p&gt;

&lt;p&gt;If the agent says a keyword is a good opportunity because competitors rank for it, that isn't enough on its own. Are those competitors relevant? Are they ranking with pages that match the same search intent? Does the topic fit the website?&lt;/p&gt;

&lt;p&gt;These are questions the agent should investigate rather than answer from guesswork.&lt;/p&gt;

&lt;p&gt;There's also a difference between missing evidence and negative evidence. If search data isn't available, the agent shouldn't pretend the keyword is a poor choice. It should say that it doesn't have enough information to judge.&lt;/p&gt;

&lt;p&gt;That distinction matters if the output is going to guide real content decisions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Don't let the agent invent certainty
&lt;/h2&gt;

&lt;p&gt;There's a limit to how much a second pass can do.&lt;/p&gt;

&lt;p&gt;If both stages rely on the same incomplete data, the second stage can repeat the same mistake. Asking an agent to critique its own answer doesn't automatically make the answer correct.&lt;/p&gt;

&lt;p&gt;I'd use independent evidence where possible, such as search results, keyword metrics, competitor pages, and the site's own Search Console data. I'd also test recommendations against examples that have already been reviewed by a person.&lt;/p&gt;

&lt;p&gt;The goal isn't to make the agent sound more confident. It's to catch bad recommendations before they reach the content plan.&lt;/p&gt;

&lt;p&gt;For a workflow like this, an SEO research tool such as Inteldo's SEO Analyst is one example of where competitor and site data can inform a broader research question. The key design question is still how the workflow checks its conclusions and shows the evidence behind them.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd measure
&lt;/h2&gt;

&lt;p&gt;I wouldn't judge the agent only by how many keywords it finds.&lt;/p&gt;

&lt;p&gt;I'd want to know how often its recommendations are judged relevant by a human reviewer, how often it misses useful opportunities, and how often its reasoning relies on missing or weak evidence.&lt;/p&gt;

&lt;p&gt;I'd also track how many recommendations get rejected and why. A high rejection rate might mean the first stage needs work. A low rejection rate isn't necessarily good if the reviewer is simply approving everything.&lt;/p&gt;

&lt;p&gt;For me, the important part of an SEO agent isn't how many keywords it can return.&lt;/p&gt;

&lt;p&gt;It's whether it can explain why a keyword matters, identify what could make that recommendation wrong, and change its answer when the evidence doesn't support it.&lt;/p&gt;

&lt;p&gt;Finding keywords is straightforward. Making better decisions with them is the harder engineering problem.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>ai</category>
      <category>programming</category>
    </item>
    <item>
      <title>1 Million Searches, 200 Clicks: The Keyword Trap</title>
      <dc:creator>Jan S.</dc:creator>
      <pubDate>Fri, 02 Oct 2026 13:30:00 +0000</pubDate>
      <link>https://dev.to/jan_inteldo/1-million-searches-200-clicks-the-keyword-trap-n4c</link>
      <guid>https://dev.to/jan_inteldo/1-million-searches-200-clicks-the-keyword-trap-n4c</guid>
      <description>&lt;p&gt;Here's a stat that should change how you read your keyword list. Ahrefs' &lt;a href="https://ahrefs.com/blog/keyword-strategy/?utm_source=inteldo.com" rel="noopener noreferrer"&gt;keyword strategy guide&lt;/a&gt; opens with a brutal one: the keyword "freelancing tips" gets around a million searches a month in the US, and sends about 200 clicks to the pages that rank for it.&lt;/p&gt;

&lt;p&gt;Two hundred. From a million.&lt;/p&gt;

&lt;p&gt;Ahrefs checked the results page to see why, and the answer is uncomfortable: an AI-written answer sits at the very top, followed by a Reddit thread and a post on Medium. The people searching got what they wanted without ever visiting a website that spent months climbing to page one.&lt;/p&gt;

&lt;p&gt;If you pick keywords by search volume alone, this is the trap. The number tells you the crowd is big. It says nothing about whether anyone clicks, and nothing about what those people actually want. That second part is called search intent, and in 2026 it's the difference between a keyword list that works and one that quietly wastes your quarter.&lt;/p&gt;

&lt;h2&gt;
  
  
  Volume tells you how many. Intent tells you what happens next.
&lt;/h2&gt;

&lt;p&gt;Monthly search volume is how many people type a keyword into Google each month, on average. It's the headline number in every keyword tool, and it's the number most of us sort by. It feels objective. It isn't the whole picture.&lt;/p&gt;

&lt;p&gt;Search intent is the other half: what the person actually wants when they type it. Are they trying to learn something, compare options, buy something, or get to a specific site? Ahrefs puts the difference plainly in that same guide: volume tells you how many people search for a term, but not how much traffic you'd actually get by ranking for it.&lt;/p&gt;

&lt;p&gt;And the "what happens next" part has gotten worse for anyone publishing content. Ahrefs &lt;a href="https://ahrefs.com/blog/ai-overviews-reduce-clicks-update/" rel="noopener noreferrer"&gt;re-ran its AI Overviews study&lt;/a&gt;, looking at the AI-written answers Google now shows above some results, and found that the top-ranking page gets about 58% fewer clicks where an AI Overview appears. Eight months earlier, the same study put that figure at 34.5%. Winning the ranking and winning the visit are turning into two different outcomes.&lt;/p&gt;

&lt;p&gt;Volume can't warn you about any of this. Intent can, if you know where to look.&lt;/p&gt;

&lt;h2&gt;
  
  
  What search intent actually means
&lt;/h2&gt;

&lt;p&gt;Moz defines search intent as the searcher's main goal when typing a query, and the SEO industry sorts those goals into four buckets:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Informational: they want to learn something.&lt;/li&gt;
&lt;li&gt;Commercial: they're comparing options before they buy.&lt;/li&gt;
&lt;li&gt;Transactional: they're ready to act, usually to buy.&lt;/li&gt;
&lt;li&gt;Navigational: they're looking for a specific website.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Google runs its own internal version of the same idea. Its Search Quality Rater Guidelines, the rulebook used by the thousands of human raters who judge whether real search results satisfied real people, lists four intents too: Know, Do, Website, and Visit-in-person. Google also grades every result on a "Needs Met" scale, from Fully Meets down to Fails to Meet, and two lines from that rulebook are worth taping above your desk:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Most queries cannot have a Fully Meets result… For most queries, different people may want different types of results."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Translation: for most searches there is no single right answer, because the searchers themselves want different things. Google's raters are even told to treat multiple interpretations as reasonable rather than pick one winner. A spreadsheet of keywords and volumes shows you none of that.&lt;/p&gt;

&lt;h2&gt;
  
  
  The label is a starting point, not a verdict
&lt;/h2&gt;

&lt;p&gt;The tools know this is a problem, and they've automated their way around it. Semrush assigns an intent label to every keyword automatically, and Ahrefs has an AI feature called Identify intents that estimates the dominant intent for you. If you're sorting thousands of keywords on a Tuesday afternoon, that's genuinely useful. Take it.&lt;/p&gt;

&lt;p&gt;Just don't stop there. Ahrefs' own favorite example is "best air fryer," a keyword that is informational, commercial, and transactional at the same time: product reviews, shopping ads, and basic explainer articles all rank side by side. Google's rulebook says the same thing in its own words: "Many queries have more than one likely user intent."&lt;/p&gt;

&lt;p&gt;So when a tool hands you a single tidy label, treat it as a first guess. Sometimes the live results page will back it up. Sometimes the page will show three intents arguing with each other, and you'll want to know that before you write a word.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where AI search intent analysis helps, and where it breaks
&lt;/h2&gt;

&lt;p&gt;This is where AI search intent analysis earns its keep, and where it falls over.&lt;/p&gt;

&lt;p&gt;The helpful part is scale. Sorting a few thousand keywords into intent buckets by hand eats days. AI tools do it in minutes. For a first pass across a big list, that's real value.&lt;/p&gt;

&lt;p&gt;The risky part is where the AI gets its answer. SpyFu ran a simple test: it asked ChatGPT to estimate monthly searches for "custom socks with logo." ChatGPT said 5,000 to 10,000. The real number, according to SpyFu and Ahrefs, is around 700 to 800. ChatGPT will also sometimes suggest keywords that don't exist at all and attach confident volume numbers to them. SpyFu's own diagnosis is blunt: the chatbot doesn't have access to real keyword data, so "the guesses it makes can steer your campaigns off course in a big way."&lt;/p&gt;

&lt;p&gt;The same failure shows up in intent, just quieter. An AI that answers from memory labels intent from the wording alone: "best X" looks commercial, "how to X" looks informational. Often that's right. But wording can't tell you that "best suv" returns nothing but comparisons, or that "log cabin" splits several ways at once. And if you ask the AI whether its label is right, it's still guessing: no published accuracy number exists for AI intent labels against live search results, so anyone quoting you a percentage for this is making it up.&lt;/p&gt;

&lt;p&gt;One more shift worth knowing about. Google data reported by Search Engine Journal says the average AI query is now three times longer than a traditional search, full of "I" and "my". People increasingly spell out exactly what they want in a sentence. A short keyword string never carried that much information to begin with, which makes the check below matter more, not less.&lt;/p&gt;

&lt;h2&gt;
  
  
  Learn to read a results page like an agent would
&lt;/h2&gt;

&lt;p&gt;Here's the skill that ties all of this together, and it takes about two minutes per keyword. Ahrefs teaches a three-part read of any results page:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1.Content type.&lt;/strong&gt; What's actually ranking: blog posts, product pages, videos, category pages? Search "best suv" and every result is a ranking or a review, not any single car's product page. Build a product page for that keyword and you've built the wrong thing, no matter how good the page is.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2.Content format.&lt;/strong&gt; How are the top pages structured: list posts, how-to guides, comparisons, single reviews? For "best air fryer" it's list posts, because searchers want several recommendations, not one writer's opinion of one fryer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3.Content angle.&lt;/strong&gt; What do the top titles have in common? For "best air fryer," the year shows up in the titles, which tells you searchers want the most current recommendations, not a timeless classic.&lt;/p&gt;

&lt;p&gt;Then check the messier stuff:&lt;/p&gt;

&lt;p&gt;Mixed intent. Reviews, ads, and explainers all sharing page one? That keyword serves several goals at once. You can still go for it, but decide which intent you're serving before you write.&lt;/p&gt;

&lt;p&gt;Ambiguity. Moz's example is "log cabin": are people trying to learn what a log cabin is, how to build one, what one costs, or find a specific brand? When a keyword could mean several things, the results page tells you which meaning Google currently rewards.&lt;/p&gt;

&lt;p&gt;Location. Google itself uses "pizza" as its example of local intent: searchers get nearby businesses that deliver, not a history of pizza. If a keyword has a local version, the results page will show it.&lt;/p&gt;

&lt;p&gt;Drift. Google's official example of intent changing over time is "iphone." In 2007 it meant the first iPhone. Today it means the newest one, and Google notes the dominant interpretation will change again. There's a related tell, too: if the top results shuffle every time you search, Ahrefs describes using that instability as a sign the intent itself keeps moving.&lt;/p&gt;

&lt;p&gt;None of this requires a tool, a subscription, or any technical skill. It requires looking.&lt;/p&gt;

&lt;h2&gt;
  
  
  The step AI can't skip for you
&lt;/h2&gt;

&lt;p&gt;Here's the tension, stated plainly. AI can sort intent at enormous scale. Google, in its own rulebook, says intent is often mixed, sometimes ambiguous, and changes over time. Put those two facts together and you get a working rule: automation is fine for the first pass, but the live results page is the only place the final answer lives.&lt;/p&gt;

&lt;p&gt;That's also the line between AI that answers from memory and agents that read live data. An agent with a live connection to your search data can check what ranks right now and show its work. &lt;a href="https://inteldo.com/agents/seo-analyst" rel="noopener noreferrer"&gt;Inteldo's SEO Analyst&lt;/a&gt;, for example, reads Google Search Console and Ahrefs directly and returns cited answers, so every number traces back to a source instead of arriving as a confident guess.&lt;/p&gt;

&lt;p&gt;But you don't need any agent, or any tool, to run the core check. That's the good news. It's a reading habit, and it's free.&lt;/p&gt;

&lt;h2&gt;
  
  
  Your next-keyword checklist
&lt;/h2&gt;

&lt;p&gt;Take whatever keyword list you're working on and run each target through this:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Ignore the volume sort.&lt;/strong&gt; Start with keywords that matter to your business, not the biggest numbers on the list.&lt;br&gt;
&lt;strong&gt;2. Search the keyword yourself.&lt;/strong&gt; What's on page one: blog posts, product pages, videos, local listings?&lt;br&gt;
&lt;strong&gt;3. Note the format and angle.&lt;/strong&gt; Lists or guides? Comparisons or single reviews? Is the year in the titles?&lt;br&gt;
&lt;strong&gt;4. Look for mixed intent.&lt;/strong&gt; Ads, reviews, and explainers sharing the page? Decide which one you're serving.&lt;br&gt;
&lt;strong&gt;5. Check for drift.&lt;/strong&gt; Do the top results look stale or unstable? If they keep changing, re-check before you invest weeks of writing.&lt;br&gt;
&lt;strong&gt;6. Treat AI numbers as guesses until they're cited.&lt;/strong&gt; If a chatbot or tool gives you a volume or an intent label with no source behind it, go look at the results page yourself before you commit.&lt;/p&gt;

&lt;p&gt;Volume tells you how loud a keyword is. Intent tells you what it actually means. Check the meaning first, and the list you end up with will be shorter, less impressive-looking, and far more likely to send you visitors who stick.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Automated Competitor Keyword Research Without Losing Your Weekend</title>
      <dc:creator>Jan S.</dc:creator>
      <pubDate>Fri, 25 Sep 2026 22:30:00 +0000</pubDate>
      <link>https://dev.to/jan_inteldo/automated-competitor-keyword-research-without-losing-your-weekend-3ki4</link>
      <guid>https://dev.to/jan_inteldo/automated-competitor-keyword-research-without-losing-your-weekend-3ki4</guid>
      <description>&lt;p&gt;You exported 20,000 keywords from a competitor gap analysis, and about half of them turn out to be the same keyword with the words shuffled. Someone on Reddit described exactly this a few months back, right down to building a spreadsheet macro that alphabetized every remaining term just so the duplicates would stand up and be counted. The comments then spent the whole thread arguing about whether one version "covers" the others. Nobody won.&lt;/p&gt;

&lt;p&gt;That's the real bottleneck, by the way. It's not knowing that Semrush and Ahrefs can show you what your rivals rank for. Everyone knows that. It's the hour after the export, when a good question has turned into a wall of near-duplicates and three different definitions of search volume.&lt;/p&gt;

&lt;p&gt;Say you run a small invoicing app, and three competitors seem to outrank you everywhere that matters. You want their keywords. Not all of them, just the ones worth a month of evenings. Here's a working version of automated competitor keyword research: the tedious middle gets handled or at least tamed, and you keep every decision that needs a brain.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Pick the rivals you actually fight in search
&lt;/h2&gt;

&lt;p&gt;Your business rivals and your search rivals are rarely the same list. In search, your competitor is whoever occupies the results you want: other software companies, sure, but also comparison sites, an industry blog that published one great guide in 2022 and still lives off it, and a Reddit thread Google can't stop ranking.&lt;/p&gt;

&lt;p&gt;The low-tech way to find them: take the five searches you most want to win, type them into Google, and write down who keeps showing up. Do that before opening any tool. Then cross-check with the competitors report your SEO tool already has. Ahrefs calls it Organic Competitors; Semrush has its own version of the same idea. When the two lists disagree, believe the one you built by hand.&lt;/p&gt;

&lt;p&gt;You'll almost certainly surface at least one site you never thought of as competition. Those are usually the interesting ones, because they're winning your searches without ever being on your radar.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Pull keywords from two tools, not one
&lt;/h2&gt;

&lt;p&gt;One tool gives you a list.&lt;/p&gt;

&lt;p&gt;Two give you a reality check.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.semrush.com/kb/28-keyword-gap" rel="noopener noreferrer"&gt;Semrush's Keyword Gap&lt;/a&gt; compares up to five domains side by side and shows where your rivals are present and you're missing. Ahrefs' Content Gap does the same job from the other direction: keywords other sites rank for that yours doesn't. Run both if you can, or run one and spot-check a handful of its answers in the other.&lt;/p&gt;

&lt;p&gt;They will disagree, and not politely. Ahrefs' own guide to keyword difficulty admits that scores for the same keyword "will vary quite substantially" between tools, and that the score doesn't account for your site's authority. So a difficulty of 30 means nothing on its own. Thirty for whom?&lt;/p&gt;

&lt;p&gt;Volumes drift too, for duller reasons. Ahrefs estimates from a recent 12-month window, Semrush averages the last 12 months, and Google hands advertisers bucketed ranges. Three definitions, one keyword, three numbers. Keep them side by side in your spreadsheet and resist averaging them, because the average of two different definitions is a third number nobody actually measures.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Clean the list before it cleans you
&lt;/h2&gt;

&lt;p&gt;Least glamorous step, biggest win. Four cuts, roughly in this order.&lt;/p&gt;

&lt;p&gt;Word-order twins. "Invoicing software for freelancers" and "freelancer invoicing software" are one page, not two. Sort the list alphabetically and the twins end up next to each other, which does most of the work for you.&lt;/p&gt;

&lt;p&gt;Branded terms. If the keyword contains a competitor's brand name, that click was never yours. Delete without guilt.&lt;/p&gt;

&lt;p&gt;Mismatches. Gap reports show you the exact page that ranks for each term. When that page clearly isn't what the searcher wants, your competitor is ranking by accident. That's not a gap, that's noise in a gap costume.&lt;/p&gt;

&lt;p&gt;Stuff you can't serve. You'll know it when you see it: the legal-question keyword, the enterprise term a two-person product can't honestly touch. Cut now, grieve later.&lt;/p&gt;

&lt;p&gt;The point of cutting hard isn't tidiness. A shortlist you'll actually work through beats a masterpiece you abandon by Thursday.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Cross everything against what Google already tells you about your site
&lt;/h2&gt;

&lt;p&gt;Search Console is free, it's Google's own record of how your site performs, and it has two quirks worth knowing before you lean on it. The data runs two to three days behind, per &lt;a href="https://developers.google.com/search/blog/2022/10/performance-data-deep-dive" rel="noopener noreferrer"&gt;Google's own documentation&lt;/a&gt;. And Google withholds some of the searches people actually typed, usually the rare ones, which Ahrefs pegs at close to half of all clicks. Slightly stale, slightly censored. Still the most honest data you own.&lt;/p&gt;

&lt;p&gt;The cross-check itself is one question per keyword: do I already show up for this? If you're getting impressions for a term, it was never a gap. If you rank on page two and get no clicks, that's not a content gap either. That's a title-and-snippet problem, which is the cheaper kind and somehow the more annoying kind.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Group keywords that share the same results
&lt;/h2&gt;

&lt;p&gt;Here's the step most people skip, right before they publish a new post that competes with their own older one. Keywords that return roughly the same set of results are one topic, not ten.&lt;/p&gt;

&lt;p&gt;Keyword Insights explains its approach without hiding the machinery: look at the top 7 results for each keyword, and if two keywords share 40% or more of the same results, they go in one cluster. The percentage is adjustable, and other tools do a version of the same thing. Semrush's Keyword Strategy Builder groups by similar results too.&lt;/p&gt;

&lt;p&gt;The payoff is structural. You stop writing one page per keyword and start writing one page per group, aimed at the main term, with the variants riding along for free. What you're not doing is spinning up a page for every keyword left on the list. Google's guidance on people-first content is blunt about mass-producing pages to chase rankings, and gap reports are exactly how that habit starts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6: Check what the searcher wants, and whether it's your topic
&lt;/h2&gt;

&lt;p&gt;Every tool slaps an intent label on keywords, informational or commercial or whatever, and the labels are mostly right. When a keyword genuinely matters to you and the label looks vague, open the results page yourself and look at it. The live results are the only intent check that can't be out of date.&lt;/p&gt;

&lt;p&gt;Then comes the question no tool can answer: is this your topic? Ahrefs has a scoring idea worth stealing called business potential, running 0 to 3. Three means your product is essentially the answer to the search. Zero means there's no natural way to mention what you sell. An invoicing app should not chase "how to start a freelance career" no matter how many searches it has.&lt;/p&gt;

&lt;p&gt;And the volume trap, because it catches everyone exactly once: Ahrefs' own strategy guide walks through a keyword with roughly a million US searches a month that sends only about 200 clicks, because an AI overview and a Reddit thread sit on top of the results. Sort a list by volume and work downward, and you can grind for months on keywords that were never going to send you a visitor.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 7: Check you're not competing with yourself
&lt;/h2&gt;

&lt;p&gt;Before writing anything new, look at whether two of your pages are already fighting over the same term. Search Console's performance report, filtered to a single search term, shows every page of yours picking up impressions for it. Two pages, one keyword, split signals. Cannibalization is the most self-inflicted problem in SEO, and the fix is usually choosing a winner and pointing the losing page somewhere useful, not writing anything new at all.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 8: Automate the boring parts, keep the judgment
&lt;/h2&gt;

&lt;p&gt;Look at what the tedious middle actually consisted of: sorting, deduplicating, grouping, and pulling the same report from three places every month. That's the automatable half. The other half is deciding that your invoicing app should own "late invoice letter template" this quarter and ignore "accounts receivable" entirely. No tool knows your margins, your roadmap, or what you're pushing this month. That part stays yours.&lt;/p&gt;

&lt;p&gt;One warning before you hand work to AI: it's genuinely good at sorting and grouping a list you give it, and it should never be allowed near a number it can't look up. SpyFu documented ChatGPT estimating 5,000 to 10,000 monthly searches for a keyword whose real volume was around 700. So let the machine sort, group, and summarize. Never let it estimate volume or difficulty. Those come from a tool with actual data, every time.&lt;/p&gt;

&lt;p&gt;This is the gap tools like &lt;a href="https://inteldo.com/agents/seo-analyst" rel="noopener noreferrer"&gt;Inteldo's SEO Analyst&lt;/a&gt; are built for: read-only connections to Search Console, PageSpeed Insights and Ahrefs, answers with citations instead of manually assembled reports, and the ability to pass a question to another specialist agent when it drifts into traffic or content territory. Useful, not mandatory. Everything above works with a spreadsheet, a couple of tool subscriptions, and a free Sunday.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd do this week
&lt;/h2&gt;

&lt;p&gt;Skip the grand setup and run the loop once, end to end.&lt;/p&gt;

&lt;p&gt;Write down the five searches you most want to win and Google them. Whoever keeps showing up is your competitor list. Run one gap report across those sites, then cut until it hurts: twins, branded terms, mismatches. Cross what's left against Search Console, because anything you already get impressions for is not a gap. Then group what survives, pick one group, and write the single best page on that topic you're capable of. Stop there.&lt;/p&gt;

&lt;p&gt;One pass of this beats a month of exporting, because the painful part was never the research. It was the shuffling.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>marketing</category>
      <category>keywordresearch</category>
    </item>
    <item>
      <title>I Thought Research Was About Finding Answers. I Was Wrong.</title>
      <dc:creator>Jan S.</dc:creator>
      <pubDate>Mon, 31 Aug 2026 15:30:00 +0000</pubDate>
      <link>https://dev.to/jan_inteldo/i-thought-research-was-about-finding-answers-i-was-wrong-4dkh</link>
      <guid>https://dev.to/jan_inteldo/i-thought-research-was-about-finding-answers-i-was-wrong-4dkh</guid>
      <description>&lt;p&gt;I've been working on a product where a surprisingly large part of the work comes down to answering questions. &lt;/p&gt;

&lt;p&gt;At the beginning, I thought the difficult part would be getting the data. Connect the different sources, make sure the numbers are available, figure out how to pull everything together, and then the rest should be relatively straightforward.&lt;/p&gt;

&lt;p&gt;That assumption didn't last very long.&lt;/p&gt;

&lt;p&gt;The more I worked on it, the more I noticed something that felt slightly backwards. Getting an answer wasn't necessarily the end of the research. A lot of the time, getting the answer was what created the next problem.&lt;/p&gt;

&lt;p&gt;And for a while, I thought that meant I wasn't doing the research properly.&lt;/p&gt;

&lt;h2&gt;
  
  
  The way I originally thought research worked
&lt;/h2&gt;

&lt;p&gt;My mental model was pretty simple:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Question → Data → Answer → Done&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It makes sense for a lot of basic questions.&lt;/p&gt;

&lt;p&gt;How much revenue did we make?&lt;/p&gt;

&lt;p&gt;How many users signed up?&lt;/p&gt;

&lt;p&gt;Which page gets the most traffic?&lt;/p&gt;

&lt;p&gt;You look something up, get the number, and move on.&lt;/p&gt;

&lt;p&gt;But most of the questions that actually matter aren't really like that. &lt;/p&gt;

&lt;p&gt;Take something simple like this: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Why did signups drop this week?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You look at the data and discover that traffic dropped.&lt;/p&gt;

&lt;p&gt;Great. You have an answer.&lt;/p&gt;

&lt;p&gt;Except now you have another questions.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Why did traffic drop?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You investigate that and find that most of the decline came from organic traffic. &lt;/p&gt;

&lt;p&gt;Okay&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Why did organic traffic drop?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Maybe a few pages lost rankings.&lt;/p&gt;

&lt;p&gt;Then you start asking why those pages lost rankings.&lt;/p&gt;

&lt;p&gt;Was there a technical change? Did the content change? Did search demand changes? Did competitors improve? Was there an indexing problem?&lt;/p&gt;

&lt;p&gt;At this point, you've gone several questions away from where you started. &lt;/p&gt;

&lt;p&gt;The strange part is that the original answer wasn't useless. It was actually what helped you get to the better question.&lt;/p&gt;

&lt;h2&gt;
  
  
  I used to think this meant the research was failing
&lt;/h2&gt;

&lt;p&gt;This was probably the biggest mistake in how I thought about research.&lt;/p&gt;

&lt;p&gt;If I asked a question and the answer immediately created another question, I felt like I hadn't really solved anything.&lt;/p&gt;

&lt;p&gt;I was expecting a clean ending.&lt;/p&gt;

&lt;p&gt;What I've started realizing is that real investigation usually doesn't work that way.&lt;/p&gt;

&lt;p&gt;It's much closer to debugging.&lt;/p&gt;

&lt;p&gt;When something is wrong in a codebase, you don't always know what the bug is before you start looking. You make an assumption, check something, find evidence that supports or disproves it, and then change your approach.&lt;/p&gt;

&lt;p&gt;Sometimes the best result from debugging is discovering that the thing you thought was broken isn't actually the problem.&lt;/p&gt;

&lt;p&gt;The same thing happens with business questions.&lt;/p&gt;

&lt;p&gt;You might think you're investigating a conversion problem and discover that the conversion tracking changed.&lt;/p&gt;

&lt;p&gt;You might think traffic is down because of SEO and discover that the bigger issue is a change in how the traffic is being measured.&lt;/p&gt;

&lt;p&gt;You might think customers aren't using a feature because they don't want it, and then discover they couldn't figure out how to use it.&lt;/p&gt;

&lt;p&gt;Those aren't failures.&lt;/p&gt;

&lt;p&gt;They're corrections to the question.&lt;/p&gt;

&lt;h2&gt;
  
  
  More data didn't solve the problem either
&lt;/h2&gt;

&lt;p&gt;This was another assumption I had.&lt;/p&gt;

&lt;p&gt;If the problem is that you don't know what's happening, having access to more information should make things easier.&lt;/p&gt;

&lt;p&gt;Sometimes it does.&lt;/p&gt;

&lt;p&gt;Sometimes it makes things worse.&lt;/p&gt;

&lt;p&gt;You can have analytics, payment data, product events, search data, customer feedback, spreadsheets, dashboards, and a dozen browser tabs open and still not know what you should actually do next.&lt;/p&gt;

&lt;p&gt;I think I was confusing &lt;strong&gt;having information&lt;/strong&gt; with &lt;strong&gt;making progress&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;They're not the same thing.&lt;/p&gt;

&lt;p&gt;A dashboard can tell you that something changed.&lt;/p&gt;

&lt;p&gt;It doesn't necessarily tell you which explanation is worth investigating.&lt;/p&gt;

&lt;p&gt;And having five different sources of data doesn't automatically help if you're not sure whether they're telling you the same story.&lt;/p&gt;

&lt;p&gt;That was probably one of the more frustrating things to realize while working on this.&lt;/p&gt;

&lt;p&gt;I didn't necessarily need more information.&lt;/p&gt;

&lt;p&gt;I needed the information I already had to help narrow down what I should look at next.&lt;/p&gt;

&lt;h2&gt;
  
  
  The answer can be useful even when it isn't the answer you wanted
&lt;/h2&gt;

&lt;p&gt;This has changed the way I look at research.&lt;/p&gt;

&lt;p&gt;I used to think a successful investigation was one where I got the answer I was looking for.&lt;/p&gt;

&lt;p&gt;Now I think there are several ways an answer can be useful.&lt;/p&gt;

&lt;p&gt;It can confirm what you already suspected.&lt;/p&gt;

&lt;p&gt;It can rule something out.&lt;/p&gt;

&lt;p&gt;It can reveal something you weren't expecting.&lt;/p&gt;

&lt;p&gt;Or it can completely change the question.&lt;/p&gt;

&lt;p&gt;The last one might actually be the most valuable.&lt;/p&gt;

&lt;p&gt;If I start with:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Why did revenue fall?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and discover that revenue didn't actually fall, but the reporting changed, that's a useful result.&lt;/p&gt;

&lt;p&gt;I didn't solve the original problem.&lt;/p&gt;

&lt;p&gt;I discovered that the original problem wasn't real.&lt;/p&gt;

&lt;p&gt;That saves a lot of time.&lt;/p&gt;

&lt;h2&gt;
  
  
  I'm starting to think about questions differently
&lt;/h2&gt;

&lt;p&gt;I've also noticed this changing the way I approach problems before I even start looking at the data.&lt;/p&gt;

&lt;p&gt;Instead of only asking: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What's the answer? &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I'm trying to think about: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What would I do differently depending on the answer?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That small change makes the investigation feel different.&lt;/p&gt;

&lt;p&gt;If the answer could change the next thing I investigate, then it's probably worth digging into.&lt;/p&gt;

&lt;p&gt;And sometimes the most useful question isn't the one that gives you the most information.&lt;/p&gt;

&lt;p&gt;It's the one that eliminates the most possibilities.&lt;/p&gt;

&lt;p&gt;I don't have this figured out completely. I'm still learning where that line is, and I'm sure I'll keep getting it wrong.&lt;/p&gt;

&lt;p&gt;But I no longer see a new question appearing after an answer as a sign that the research failed.&lt;/p&gt;

&lt;p&gt;Sometimes it means the research finally got somewhere.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'm taking away from this
&lt;/h2&gt;

&lt;p&gt;The biggest change for me is that I don't think of research as:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Find the answer and finish.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I think of it more as:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ask → investigate → learn something → adjust the question → investigate again.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That sounds obvious when I write it down, but it wasn't how I was thinking about it when we started building.&lt;/p&gt;

&lt;p&gt;And maybe that's the part I find most interesting.&lt;/p&gt;

&lt;p&gt;A good answer doesn't always close the investigation.&lt;/p&gt;

&lt;p&gt;Sometimes it tells you what you should have been asking in the first place.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Building Against Real APIs Is Nothing Like Reading the Docs</title>
      <dc:creator>Jan S.</dc:creator>
      <pubDate>Mon, 03 Aug 2026 08:30:12 +0000</pubDate>
      <link>https://dev.to/jan_inteldo/building-against-real-apis-is-nothing-like-reading-the-docs-23g9</link>
      <guid>https://dev.to/jan_inteldo/building-against-real-apis-is-nothing-like-reading-the-docs-23g9</guid>
      <description>&lt;p&gt;A few months ago, I started spending a lot more time working with different APIs.&lt;/p&gt;

&lt;p&gt;At first, I thought authentication would be the hardest part. Once OAuth was working and I could successfully make requests, I assumed everything else would mostly be connecting the dots.&lt;/p&gt;

&lt;p&gt;It didn't take long to realize I was wrong.&lt;/p&gt;

&lt;p&gt;The real challenge wasn't getting data. It was figuring out what that data actually meant.&lt;/p&gt;

&lt;h2&gt;
  
  
  The docs only show the happy path
&lt;/h2&gt;

&lt;p&gt;API documentation is usually great at helping you get started.&lt;/p&gt;

&lt;p&gt;You learn how to authenticate, which endpoint to call, and what a successful response looks like. Five minutes later, you're making your first request and everything feels pretty straightforward.&lt;/p&gt;

&lt;p&gt;Production is a different story.&lt;/p&gt;

&lt;p&gt;One API returns timestamps in UTC. Another uses your account's local timezone. Some return an empty array when there's no data, others return &lt;code&gt;null&lt;/code&gt;, and a few simply leave the field out entirely.&lt;/p&gt;

&lt;p&gt;None of those things are difficult by themselves.&lt;/p&gt;

&lt;p&gt;The challenge is that every API is a little different, and those small differences slowly pile up.&lt;/p&gt;

&lt;h2&gt;
  
  
  The same event can mean different things
&lt;/h2&gt;

&lt;p&gt;One thing that surprised me was how differently platforms describe the same event.&lt;/p&gt;

&lt;p&gt;Let's say someone asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"How many customers signed up yesterday?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It sounds like there should be one answer.&lt;/p&gt;

&lt;p&gt;But depending on which platform you're looking at, "signed up" might mean:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;created an account&lt;/li&gt;
&lt;li&gt;started a free trial&lt;/li&gt;
&lt;li&gt;verified an email&lt;/li&gt;
&lt;li&gt;completed a payment&lt;/li&gt;
&lt;li&gt;became an active customer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of those definitions are wrong.&lt;/p&gt;

&lt;p&gt;They're just measuring different moments.&lt;/p&gt;

&lt;p&gt;That was probably the biggest mindset shift for me. Before combining data, you have to understand what each system is actually measuring.&lt;/p&gt;

&lt;h2&gt;
  
  
  Expect inconsistencies
&lt;/h2&gt;

&lt;p&gt;After working with more integrations, I've stopped expecting APIs to behave the same way.&lt;/p&gt;

&lt;p&gt;Different pagination styles.&lt;/p&gt;

&lt;p&gt;Different rate limits.&lt;/p&gt;

&lt;p&gt;Different error responses.&lt;/p&gt;

&lt;p&gt;Different field names.&lt;/p&gt;

&lt;p&gt;Sometimes even different behavior between endpoints from the same provider.&lt;/p&gt;

&lt;p&gt;At first those inconsistencies felt frustrating.&lt;/p&gt;

&lt;p&gt;Now I almost expect them.&lt;/p&gt;

&lt;p&gt;Instead of assuming every response will match the documentation, I try to build integrations that can handle missing fields, unexpected values, and the occasional edge case.&lt;/p&gt;

&lt;p&gt;It's usually those small details that save you hours of debugging later.&lt;/p&gt;

&lt;h2&gt;
  
  
  The biggest lesson I've learned
&lt;/h2&gt;

&lt;p&gt;If there's one thing I'll carry into future projects, it's this:&lt;/p&gt;

&lt;p&gt;Treat every external API as a system you don't control.&lt;/p&gt;

&lt;p&gt;The documentation gets you connected.&lt;/p&gt;

&lt;p&gt;The real work starts after the first successful request.&lt;/p&gt;

&lt;p&gt;That's where you begin learning how the API behaves in the real world, and that's where most of the interesting engineering problems show up.&lt;/p&gt;

&lt;p&gt;I'm still learning this myself, but it's already changed how I approach integrations.&lt;/p&gt;

&lt;p&gt;I'd be interested to hear what unexpected API quirks you've run into. I'm sure there are plenty I haven't discovered yet.`&lt;/p&gt;

</description>
      <category>api</category>
      <category>webdev</category>
      <category>backend</category>
    </item>
  </channel>
</rss>
