<?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: Shanzy Saleem</title>
    <description>The latest articles on DEV Community by Shanzy Saleem (@shanzysaleem).</description>
    <link>https://dev.to/shanzysaleem</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%2F4170963%2Fece882a4-4dfb-4c50-bcac-7209ca758932.jpg</url>
      <title>DEV Community: Shanzy Saleem</title>
      <link>https://dev.to/shanzysaleem</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shanzysaleem"/>
    <language>en</language>
    <item>
      <title>AEO &amp; GEO: Optimizing for AI Search (ChatGPT, Gemini, Perplexity)</title>
      <dc:creator>Shanzy Saleem</dc:creator>
      <pubDate>Fri, 09 Oct 2026 15:18:06 +0000</pubDate>
      <link>https://dev.to/shanzysaleem/aeo-geo-optimizing-for-ai-search-chatgpt-gemini-perplexity-53lg</link>
      <guid>https://dev.to/shanzysaleem/aeo-geo-optimizing-for-ai-search-chatgpt-gemini-perplexity-53lg</guid>
      <description>&lt;p&gt;Search is changing faster than ever. People are not just typing keywords into Google anymore. They are asking full questions to ChatGPT, Gemini, and Perplexity, and getting direct answers without ever clicking a link.&lt;/p&gt;

&lt;p&gt;As an SEO specialist, I had two choices: panic, or adapt. I chose adapt. Over the last year, I have been testing what makes AI engines cite a website as a source. This is my practical playbook for AEO (Answer Engine Optimization) and GEO (Generative Engine Optimization).&lt;/p&gt;

&lt;h2&gt;
  
  
  What Are AEO and GEO, Really?
&lt;/h2&gt;

&lt;p&gt;AEO means optimizing your content so answer engines pick it as the direct answer to a question. Think featured snippets, but for AI.&lt;/p&gt;

&lt;p&gt;GEO means optimizing so generative AI models mention and cite your brand when they generate responses. When someone asks Perplexity "what is the best way to do keyword research," GEO is what gets your site cited in the answer.&lt;/p&gt;

&lt;p&gt;Traditional SEO gets you ranked. AEO and GEO get you quoted. In 2026, you need both.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I Started Taking This Seriously
&lt;/h2&gt;

&lt;p&gt;I am Shanzy Saleem, an SEO Specialist from Lahore, and I grew my own website to over 1 million monthly Google impressions through classic SEO. That foundation still works. But I started noticing something: my analytics showed a new traffic source labeled as referrals from chatgpt.com, perplexity.ai, and Gemini.&lt;/p&gt;

&lt;p&gt;It was small at first. Then it kept growing. So I dug in and started treating AI visibility as its own channel, with its own rules.&lt;/p&gt;

&lt;h2&gt;
  
  
  How AI Engines Choose What to Cite
&lt;/h2&gt;

&lt;p&gt;After months of testing, here is what I have learned about how these systems pick sources:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. They love direct, quotable answers.&lt;/strong&gt; AI models extract clean, factual statements. If your content buries the answer under five paragraphs of fluff, you will not get cited. Put the answer first, then explain.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Structure matters more than ever.&lt;/strong&gt; Clear headings, short paragraphs, lists, and tables are easy for models to parse and quote. This is not new advice, but for AI search it matters ten times more.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. E-E-A-T is the filter.&lt;/strong&gt; AI engines prefer sources that demonstrate experience, expertise, authoritativeness, and trust. Real author names, real credentials, and original experience win. Generic AI-written content does not get cited. The irony is beautiful.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. They cite the fresh and the specific.&lt;/strong&gt; Statistics, original research, case studies with real numbers, and recently updated content get picked up far more often. My own case study content with real traffic numbers gets cited way more than my generic guides.&lt;/p&gt;

&lt;h2&gt;
  
  
  My AEO and GEO Playbook
&lt;/h2&gt;

&lt;p&gt;Here is the exact process I follow on client sites now:&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Write answer-first content
&lt;/h3&gt;

&lt;p&gt;Every article should answer its target question in the first 2 to 3 sentences. Not the introduction. The answer. Then expand with depth. This single change increased my content's citation rate noticeably.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Add FAQ and HowTo schema
&lt;/h3&gt;

&lt;p&gt;Structured data is a direct signal to AI systems about what your content covers. I add FAQPage schema to every guide and HowTo schema to every tutorial. It takes ten minutes and the payoff is real. I wrote a full developer guide on adding JSON-LD schema with Liquid on my &lt;a href="https://shanzysaleem.hashnode.dev/" rel="noopener noreferrer"&gt;Hashnode blog&lt;/a&gt; if you want the technical walkthrough.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Make your entity crystal clear
&lt;/h3&gt;

&lt;p&gt;AI models understand entities, not just keywords. Your brand needs a consistent identity across the web: same name, same description, same facts everywhere. This is a big reason I have been building out my own profiles across the internet. When every profile says the same thing about who I am and what I do, AI engines trust the entity.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Publish original data
&lt;/h3&gt;

&lt;p&gt;Nobody cites content that says what everyone else says. My most-cited pages are the ones with original numbers: my traffic case study, my technical checklists based on real audits. If you have data, publish it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 5: Be present where AI looks
&lt;/h3&gt;

&lt;p&gt;AI engines heavily cite community content: Reddit threads, Quora answers, forum discussions. I answer SEO questions genuinely on Reddit, WordPress.org forums, and Quora every week. Not for links. Because that is literally where AI models go to learn what real practitioners think.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 6: Keep the technical foundation clean
&lt;/h3&gt;

&lt;p&gt;AI crawlers need to access and parse your content. Fast pages, clean HTML, no JavaScript walls hiding your main content, proper heading hierarchy. All the technical SEO fundamentals I cover in my Shopify SEO checklist apply here too.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Measure AI Visibility
&lt;/h2&gt;

&lt;p&gt;You cannot optimize what you do not measure. Here is what I track:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Referral traffic from AI domains in analytics (chatgpt.com, perplexity.ai, gemini.google.com, copilot.microsoft.com)&lt;/li&gt;
&lt;li&gt;Brand mention monitoring: ask the AI tools directly about your niche and see if your brand appears&lt;/li&gt;
&lt;li&gt;Citation tracking: search your target questions in Perplexity and check if your pages get cited&lt;/li&gt;
&lt;li&gt;Traditional rankings still matter, because AI engines heavily weight top-ranking pages as sources&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is GEO replacing traditional SEO?&lt;/strong&gt;&lt;br&gt;
No. AI engines still rely heavily on the traditional web index. Strong traditional SEO is the foundation that makes GEO work. Think of GEO as a layer on top, not a replacement.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do I need to block AI crawlers or allow them?&lt;/strong&gt;&lt;br&gt;
If you want AI visibility, allow them. If your business model depends on keeping content exclusive, you might restrict them. For most businesses, being cited by AI is free brand exposure. I allow them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How long does it take to see results from GEO?&lt;/strong&gt;&lt;br&gt;
In my testing, 4 to 8 weeks for new content to start appearing in AI answers, assuming the site already has some authority. Brand-new sites take longer, same as traditional SEO.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does AI-generated content rank in AI search?&lt;/strong&gt;&lt;br&gt;
Rarely. AI engines seem to prefer human-written content with real experience and original data. Writing your content with AI and expecting AI to cite it is a losing loop.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the single highest-impact GEO tactic?&lt;/strong&gt;&lt;br&gt;
Answer-first content structure with FAQ schema. It is simple, fast to implement, and it works across every AI platform I have tested.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;AI search is not the death of SEO. It is SEO with a new output format. The fundamentals have not changed: be the best answer, prove your expertise, make it easy to understand and cite.&lt;/p&gt;

&lt;p&gt;The SEOs who win in the AI era will be the ones who adapted early. Start now. Pick your five most important pages, rewrite them answer-first, add FAQ schema, and publish one piece of original data this month.&lt;/p&gt;

&lt;p&gt;I am Shanzy Saleem, and I document everything I learn about SEO in the AI era. You can find more of my playbooks on my portfolio at &lt;a href="https://www.shanzyseoexpert.com/" rel="noopener noreferrer"&gt;shanzyseoexpert.com&lt;/a&gt;, where I share the exact processes behind growing a site to 1M+ monthly impressions.&lt;/p&gt;

</description>
      <category>aeo</category>
      <category>seo</category>
      <category>ai</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Technical SEO Checklist for Shopify Stores (2026)</title>
      <dc:creator>Shanzy Saleem</dc:creator>
      <pubDate>Fri, 09 Oct 2026 10:39:54 +0000</pubDate>
      <link>https://dev.to/shanzysaleem/technical-seo-checklist-for-shopify-stores-2026-37n6</link>
      <guid>https://dev.to/shanzysaleem/technical-seo-checklist-for-shopify-stores-2026-37n6</guid>
      <description>&lt;p&gt;&lt;strong&gt;The short answer:&lt;/strong&gt; Shopify SEO in 2026 means working around the platform's fixed constraints. You cannot change the &lt;code&gt;/products/&lt;/code&gt; and &lt;code&gt;/collections/&lt;/code&gt; URL structure, but you control canonicals, schema markup, theme speed, images, and internal linking. This technical SEO checklist covers the eight areas I audit on every Shopify store, from duplicate variants to hreflang.&lt;/p&gt;

&lt;p&gt;I have spent three years doing technical SEO for Shopify stores. The platform makes half the decisions for you, which is a blessing when it handles canonicals and sitemaps automatically, and a trap when its defaults quietly create duplicate content or slow down your theme. Here is the technical SEO checklist I run on every store audit, with the Liquid and JSON-LD snippets I use.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Do I Handle Shopify's Forced URL Structure and Canonicalization?
&lt;/h2&gt;

&lt;p&gt;Shopify forces URL prefixes you cannot change: &lt;code&gt;/products/&lt;/code&gt;, &lt;code&gt;/collections/&lt;/code&gt;, &lt;code&gt;/pages/&lt;/code&gt;, and &lt;code&gt;/blogs/&lt;/code&gt;. Accept it and optimize what you can control.&lt;/p&gt;

&lt;p&gt;The real issue is that every product is reachable through multiple paths, like &lt;code&gt;/products/blue-tshirt&lt;/code&gt; and &lt;code&gt;/collections/summer/products/blue-tshirt&lt;/code&gt;. Shopify handles this with a canonical tag pointing to the &lt;code&gt;/products/&lt;/code&gt; version, which most themes include in &lt;code&gt;theme.liquid&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight liquid"&gt;&lt;code&gt;&amp;lt;link rel="canonical" href="&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;canonical_url&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;"&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Confirm the canonical tag renders correctly on product, collection, and blog pages.&lt;/li&gt;
&lt;li&gt;Keep product handles short and keyword rich. &lt;code&gt;/products/organic-acacia-honey-480g&lt;/code&gt; beats &lt;code&gt;/products/organic-raw-unfiltered-acacia-honey-480g-glass-jar&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Never link internally to the &lt;code&gt;/collections/.../products/...&lt;/code&gt; versions. Always use the canonical &lt;code&gt;/products/&lt;/code&gt; URL.&lt;/li&gt;
&lt;li&gt;If you migrated from another platform, map old URLs to the new Shopify structure with 301 redirects under Content &amp;gt; Menus &amp;gt; URL Redirects.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why Do Product Variants Create Duplicate Content on Shopify?
&lt;/h2&gt;

&lt;p&gt;Every variant combination generates a &lt;code&gt;?variant=123456789&lt;/code&gt; URL. Google usually respects the canonical, but variant URLs still get indexed more often than expected, especially when theme code or apps link to them.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click through variant pickers and watch the URL bar. If selecting a size or color rewrites the URL with &lt;code&gt;?variant=&lt;/code&gt;, make sure no internal navigation links to those URLs.&lt;/li&gt;
&lt;li&gt;Do not submit variant URLs in your sitemap or link them from collection grids.&lt;/li&gt;
&lt;li&gt;Exception: if a color variant genuinely deserves its own rankings (think "red evening dress"), consider splitting it into a separate product.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What Schema Markup Does a Shopify Store Actually Need?
&lt;/h2&gt;

&lt;p&gt;This is where I find the most missed opportunities. Most themes ship with basic &lt;code&gt;Product&lt;/code&gt; structured data, but it is often incomplete. I have audited stores displaying customer reviews through apps like Judge.me whose Product JSON-LD had no &lt;code&gt;aggregateRating&lt;/code&gt; or &lt;code&gt;review&lt;/code&gt; fields at all. Visible reviews without matching schema means no star ratings in search results.&lt;/p&gt;

&lt;p&gt;The markup I implement:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Product&lt;/strong&gt; with &lt;code&gt;offers&lt;/code&gt; (price, currency, availability).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review / aggregateRating&lt;/strong&gt; wired to your review app's data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;BreadcrumbList&lt;/strong&gt; for the Home &amp;gt; Collection &amp;gt; Product trail.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FAQPage&lt;/strong&gt; wherever the theme renders FAQs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Organization&lt;/strong&gt; with logo and sameAs links.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here is the JSON-LD pattern I use for products with reviews:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@context"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://schema.org"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Product"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Organic Acacia Honey 480g"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"image"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://cdn.shopify.com/.../honey-480g.jpg"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Raw, unfiltered acacia honey in a 480g glass jar."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"sku"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"HON-AC-480"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"brand"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Brand"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Example Store"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"offers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Offer"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/products/organic-acacia-honey-480g"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"priceCurrency"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"USD"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"24.99"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"availability"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://schema.org/InStock"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"aggregateRating"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"AggregateRating"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"ratingValue"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"4.8"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"reviewCount"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"46"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Validate with Google's Rich Results Test, and re-validate after every theme update.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Do I Improve Core Web Vitals on a Shopify Theme?
&lt;/h2&gt;

&lt;p&gt;If a Shopify store is slow, apps are the cause about eight times out of ten. Every app injects its own JavaScript and CSS, often render blocking, often on pages where it is not used. I have seen stores running 25 apps where 10 were installed, tried once, and forgotten.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Audit installed apps quarterly. Delete what you do not use, then check &lt;code&gt;theme.liquid&lt;/code&gt; and &lt;code&gt;snippets&lt;/code&gt;, because uninstalling does not always remove the code.&lt;/li&gt;
&lt;li&gt;Defer non-critical scripts and lazy load below the fold images. Older custom themes often skip this.&lt;/li&gt;
&lt;li&gt;Give your hero/LCP image &lt;code&gt;fetchpriority="high"&lt;/code&gt; and a proper &lt;code&gt;srcset&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Keep web fonts minimal. Two font families with limited weights is plenty.&lt;/li&gt;
&lt;li&gt;Be realistic: aim for green Core Web Vitals on mobile product and collection pages. Chasing a perfect 100 while running reviews, upsell, and chat apps is not a good use of time.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How Should I Optimize Images for SEO on Shopify?
&lt;/h2&gt;

&lt;p&gt;Shopify's CDN serves WebP and AVIF automatically when you request images through Liquid filters, so this part of the checklist is mostly about using the platform correctly.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight liquid"&gt;&lt;code&gt;&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;featured_image&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;image_url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;800&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;image_tag&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;loading&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'lazy'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;alt&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;title&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Use &lt;code&gt;image_url&lt;/code&gt; with explicit widths and &lt;code&gt;srcset&lt;/code&gt; instead of full resolution files.&lt;/li&gt;
&lt;li&gt;Write descriptive alt text for every product image. Describe the image, do not stuff keywords.&lt;/li&gt;
&lt;li&gt;Rename files before upload: &lt;code&gt;organic-acacia-honey-480g.jpg&lt;/code&gt; instead of &lt;code&gt;IMG_4829.jpg&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Compress originals before uploading. The CDN optimizes delivery, but it cannot fix a 6MB source file.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What Are Shopify's Robots.txt and Sitemap Limits?
&lt;/h2&gt;

&lt;p&gt;Shopify auto-generates your sitemap at &lt;code&gt;/sitemap.xml&lt;/code&gt;, split into sub-sitemaps per resource type. It updates itself as products change, and noindexed pages are excluded automatically. You cannot edit entries manually. Submit only &lt;code&gt;/sitemap.xml&lt;/code&gt; in Search Console, not the individual sub-sitemaps.&lt;/p&gt;

&lt;p&gt;For robots.txt, Shopify lets you customize it through a &lt;code&gt;robots.txt.liquid&lt;/code&gt; template. The defaults sensibly block &lt;code&gt;/admin&lt;/code&gt;, &lt;code&gt;/cart&lt;/code&gt;, &lt;code&gt;/checkout&lt;/code&gt;, and internal search URLs. The customization I use most is blocking filtered collection URLs, which create crawl bloat on stores with heavy faceted navigation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight liquid"&gt;&lt;code&gt;&lt;span class="cp"&gt;{%&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;group&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;robots&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;default_groups&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;%}&lt;/span&gt;
  &lt;span class="cp"&gt;{{-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;group&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;user_agent&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;-}}&lt;/span&gt;
  &lt;span class="cp"&gt;{%-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;rule&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;group&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;rules&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;-%}&lt;/span&gt;
    &lt;span class="cp"&gt;{{-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;rule&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;-}}&lt;/span&gt;
  &lt;span class="cp"&gt;{%-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;endfor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;-%}&lt;/span&gt;
  Disallow: /*?*filter.p.m*
  Disallow: /*?*sort_by*
&lt;span class="cp"&gt;{%&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;endfor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;%}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Only add disallows you understand. A wrong pattern can accidentally block paginated collection pages you want indexed.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Do I Set Up Hreflang for Multi-Region Shopify Stores?
&lt;/h2&gt;

&lt;p&gt;Shopify Markets creates localized subfolders like &lt;code&gt;/en-us&lt;/code&gt; or &lt;code&gt;/de&lt;/code&gt;, and this is where hreflang becomes essential. Without it, Google may show the wrong regional version.&lt;/p&gt;

&lt;p&gt;What I implement in &lt;code&gt;theme.liquid&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight liquid"&gt;&lt;code&gt;&lt;span class="cp"&gt;{%-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;locale&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;shop&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;published_locales&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;-%}&lt;/span&gt;
&amp;lt;link rel="alternate" hreflang="&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;locale&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;iso_code&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;"
  href="&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;canonical_url&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;shop&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;locale&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;locale&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;iso_code&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;"&amp;gt;
&lt;span class="cp"&gt;{%-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;endfor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;-%}&lt;/span&gt;
&amp;lt;link rel="alternate" hreflang="x-default" href="&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;shop&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;url&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;}}{{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;"&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Every localized page must list all versions including itself, with reciprocal links.&lt;/li&gt;
&lt;li&gt;Include an &lt;code&gt;x-default&lt;/code&gt; pointing at your primary market.&lt;/li&gt;
&lt;li&gt;Test with a hreflang validator after launch. The most common failure I see is hreflang tags pointing to 404s after a market was disabled.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How Should I Structure Internal Linking for Shopify Collections?
&lt;/h2&gt;

&lt;p&gt;Collections are your category hub pages and your best shot at ranking for competitive terms, yet most stores treat them as thin product grids with no text and no inbound links beyond the main nav.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add 150 to 300 words of useful descriptive text below the product grid on important collection pages, and link collections contextually from product descriptions and blog content.&lt;/li&gt;
&lt;li&gt;Implement breadcrumbs in Liquid for crawl depth and BreadcrumbList eligibility.&lt;/li&gt;
&lt;li&gt;Make "related products" sections real links, not JavaScript-only carousels that crawlers cannot follow.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Can I change Shopify's forced URL structure?&lt;/strong&gt;&lt;br&gt;
No. The &lt;code&gt;/products/&lt;/code&gt;, &lt;code&gt;/collections/&lt;/code&gt;, &lt;code&gt;/pages/&lt;/code&gt;, and &lt;code&gt;/blogs/&lt;/code&gt; prefixes are mandatory on Shopify. Instead, optimize product handles, keep URLs short, and keep canonicals and internal links consistent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do I need a paid SEO app for schema markup on Shopify?&lt;/strong&gt;&lt;br&gt;
Not necessarily. Most schema needs can be handled with JSON-LD hardcoded into your theme, which is faster than an app and fully under your control. Apps make sense for collecting and displaying reviews, but the schema itself belongs in the theme.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why are some of my product pages not getting indexed?&lt;/strong&gt;&lt;br&gt;
The usual suspects are variant URL duplication, thin supplier descriptions, and crawl budget wasted on filtered collection URLs. Check Search Console's page indexing report, fix the pattern rather than individual URLs, and keep your sitemap limited to canonical, indexable pages.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How many Shopify apps are too many for SEO and speed?&lt;/strong&gt;&lt;br&gt;
There is no magic number, but every app adds JavaScript weight. I get suspicious above 10 to 12 apps. Audit quarterly and remove what is unused, including leftover code in your theme files.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does Shopify handle canonical tags automatically?&lt;/strong&gt;&lt;br&gt;
Mostly yes. Shopify outputs canonical tags on products, collections, and articles by default. Your job is to verify the tag renders, never link to non-canonical versions internally, and watch for apps or theme code that override it.&lt;/p&gt;




&lt;p&gt;Shopify gives you a fast, secure foundation, but the technical SEO details are yours to own. Work through this checklist and you will cover the issues I find on most audits. For a second pair of eyes on your store, I offer technical SEO audits and Shopify optimization over at &lt;a href="https://www.shanzyseoexpert.com/" rel="noopener noreferrer"&gt;my portfolio&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>shopify</category>
      <category>webdev</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How I Took a US Website from Zero to 1M Monthly Google Impressions</title>
      <dc:creator>Shanzy Saleem</dc:creator>
      <pubDate>Thu, 08 Oct 2026 10:14:10 +0000</pubDate>
      <link>https://dev.to/shanzysaleem/how-i-took-a-us-website-from-zero-to-1m-monthly-google-impressions-a8</link>
      <guid>https://dev.to/shanzysaleem/how-i-took-a-us-website-from-zero-to-1m-monthly-google-impressions-a8</guid>
      <description>&lt;p&gt;Three years ago, I took on a US-based website in a competitive niche with essentially zero organic presence. No rankings, no traffic, no backlink profile to speak of. Today it gets over 1 million monthly impressions in Google Search Console. This is the full story of how that happened: what I did first, what actually moved the needle, and what I would do differently.&lt;/p&gt;

&lt;h2&gt;
  
  
  Starting point: an honest audit
&lt;/h2&gt;

&lt;p&gt;Before touching anything, I ran a full technical SEO audit. The site had no sitemap, no schema markup, thin category pages with under 100 words of content, and a backlink profile made mostly of directory spam. Page speed was poor on mobile. The good news: the niche had clear search demand and the top competitors were beatable on content quality. I documented everything in a spreadsheet and prioritized by expected impact, not by what was easiest.&lt;/p&gt;

&lt;h2&gt;
  
  
  Phase 1: Fix the foundation (months 1-2)
&lt;/h2&gt;

&lt;p&gt;Direct answer: the foundation phase of growing a website from zero means fixing technical SEO first: crawl errors, sitemaps, canonicals, schema markup, Core Web Vitals, and internal linking. These unglamorous fixes unlock everything that follows, and impressions typically start climbing within six weeks.&lt;/p&gt;

&lt;p&gt;The first two months were pure technical SEO. I fixed crawl errors, built a proper sitemap structure, added canonical tags, implemented schema markup on every template, and rewrote the site's metadata. I also fixed the worst Core Web Vitals issues by compressing images, removing unused scripts, and enabling caching. Then I rebuilt the internal linking so every important page sat within three clicks of the homepage. Nothing glamorous, but impressions started climbing within six weeks. Technical fixes do not go viral, but they unlock everything that comes after. When I run technical SEO audits for clients now through &lt;a href="https://www.shanzyseoexpert.com/" rel="noopener noreferrer"&gt;shanzyseoexpert.com&lt;/a&gt;, this foundation phase is always step one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Phase 2: Content that deserves to rank (months 3-6)
&lt;/h2&gt;

&lt;p&gt;With the foundation fixed, I turned to content. I mapped the niche's keyword landscape and found dozens of informational queries where the ranking pages were thin, outdated, or written by non-experts. I published two in-depth articles per week, each one genuinely more useful than what ranked. I wrote detailed content briefs for every article covering the target keyword, the search intent, the questions to answer, and the unique angle. Every post got original images, FAQ sections with schema, real author bios with credentials, and internal links to the money pages. By month six, informational content was driving the first real traffic, and several articles had cracked the top five.&lt;/p&gt;

&lt;h2&gt;
  
  
  Phase 3: Link building that compounds (months 4-12)
&lt;/h2&gt;

&lt;p&gt;Content without links stalls. I started link building in month four with digital PR around original data from the site's own niche, plus targeted outreach to resource pages. My rule was simple: ten personalized outreach emails beat a hundred templated ones. I kept anchor text natural and diversified, earned links only from sites with real traffic, and said no to paid link schemes that would have risked the whole project. I also fixed unlinked brand mentions and reclaimed broken backlinks pointing at 404 pages. Link building is slow and unglamorous, but each quality link raised the ceiling for every page on the site. Around month nine, the compounding kicked in: new articles started ranking within days instead of months.&lt;/p&gt;

&lt;h2&gt;
  
  
  Phase 4: Scale what works (months 9-18)
&lt;/h2&gt;

&lt;p&gt;Once I knew which content types earned links and traffic, I doubled down on them and cut what did not perform. I expanded winning articles, built content hubs around the highest-converting topics, and refreshed older posts quarterly. I also started tracking revenue per page, not just traffic, and pruned or merged pages that attracted visits but never converted. This is the phase most people skip. They keep publishing instead of improving.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the numbers looked like
&lt;/h2&gt;

&lt;p&gt;Direct answer: the site went from zero to 10,000 monthly impressions by month 3, 100,000 by month 6, 500,000 by month 12, and over 1,000,000 by month 18. Growth was not linear. It stayed flat for months, then turned steep once technical fixes, content, and links started compounding.&lt;/p&gt;

&lt;p&gt;Month 3: first 10,000 monthly impressions. Month 6: 100,000. Month 12: 500,000. Month 18: over 1,000,000 monthly impressions, with clicks growing proportionally. The growth curve was not linear. It was flat, flat, flat, then steep. That is how SEO works when the foundation is right: every improvement multiplies the ones before it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The mindset that made it work
&lt;/h2&gt;

&lt;p&gt;I treated SEO like a product: weekly metrics reviews, a backlog of experiments, and a rule that every change got documented. When traffic dipped after a core update in month eleven, I did not panic. I compared the losers against the winners, found the pattern (thin sections on two hubs), fixed them, and recovered within six weeks. Calm, data-driven iteration beats frantic tactics every time.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I would do differently
&lt;/h2&gt;

&lt;p&gt;Two things. First, I would start link building in month one, not month four. I underestimated how long links take to compound. Second, I would publish less and promote more in the early months. Ten articles with real distribution beat thirty articles that nobody sees.&lt;/p&gt;

&lt;h2&gt;
  
  
  The takeaway
&lt;/h2&gt;

&lt;p&gt;There was no secret tactic and no single hack. It was a technical SEO audit, better content than the competition, consistent white-hat link building, and eighteen months of patience. If you are starting from zero, that is genuinely good news: the playbook is known, it just requires execution. And if you want help running the same playbook on your site, that is exactly what I do. You can find me at &lt;a href="https://www.shanzyseoexpert.com/" rel="noopener noreferrer"&gt;shanzyseoexpert.com&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  How long does it take to go from zero to 1M monthly impressions?
&lt;/h3&gt;

&lt;p&gt;In this case, 18 months. The timeline depends on niche competition, publishing velocity, and link building consistency. Expect 3 to 6 months of nearly invisible progress before the curve turns. Most people quit during the flat phase, which is exactly why the opportunity exists.&lt;/p&gt;

&lt;h3&gt;
  
  
  What mattered more: content or backlinks?
&lt;/h3&gt;

&lt;p&gt;Both, in sequence. Technical SEO first, then content to give the site something worth ranking, then backlinks to raise the ceiling. Content without links stalls, and links to a broken site waste money. The order matters as much as the effort.&lt;/p&gt;

&lt;h3&gt;
  
  
  How many articles did the site publish to reach 1M impressions?
&lt;/h3&gt;

&lt;p&gt;Roughly 150 in-depth articles over 18 months, about two per week. But the top 20 percent of articles drove 80 percent of the traffic. Publishing less and promoting more would have been smarter in the early months.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can this playbook work in 2026?
&lt;/h3&gt;

&lt;p&gt;Yes. The fundamentals have not changed: fix technical issues, publish content that beats the top results, earn real backlinks, and iterate with data. AI-generated content has made genuine expertise more valuable, not less.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Shanzy Saleem is an SEO Specialist and Web Developer based in Lahore, Pakistan. She specializes in technical SEO, link building, and growing organic traffic for US and international brands. Website: &lt;a href="https://www.shanzyseoexpert.com/" rel="noopener noreferrer"&gt;shanzyseoexpert.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>seo</category>
      <category>webdev</category>
      <category>marketing</category>
    </item>
    <item>
      <title>Technical SEO Checklist for Next.js Websites (2026)</title>
      <dc:creator>Shanzy Saleem</dc:creator>
      <pubDate>Thu, 08 Oct 2026 10:13:40 +0000</pubDate>
      <link>https://dev.to/shanzysaleem/technical-seo-checklist-for-nextjs-websites-2026-3l7l</link>
      <guid>https://dev.to/shanzysaleem/technical-seo-checklist-for-nextjs-websites-2026-3l7l</guid>
      <description>&lt;p&gt;Next.js is one of the best frameworks for SEO when it is configured correctly, and one of the easiest to get wrong when it is not. I have audited dozens of Next.js sites over the past few years, and the same issues show up again and again. This is the exact technical SEO checklist I run through on every Next.js project in 2026.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Choose the right rendering strategy for each page
&lt;/h2&gt;

&lt;p&gt;Direct answer: for SEO, use static generation for pages that rarely change and server-side rendering for dynamic pages. Both send fully rendered HTML to Googlebot. Reserve client-side rendering for logged-in dashboards that do not need to rank.&lt;/p&gt;

&lt;p&gt;Next.js gives you static generation, server-side rendering, and client-side rendering. For SEO the rule is simple: content that must rank should be rendered on the server or at build time. Use static generation for marketing pages and blog posts, server-side rendering for pages that change often, and keep client-side rendering for logged-in dashboards that do not need to rank. I have seen entire blogs invisible to Google because they rendered behind a loading spinner. Always verify what Google actually sees with the URL Inspection tool in Search Console.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Nail metadata with the Metadata API
&lt;/h2&gt;

&lt;p&gt;Every page needs a unique title tag and meta description. In the App Router, generate them dynamically with the Metadata API from your CMS or database. Keep titles under 60 characters, descriptions between 150 and 160, and never let two pages share the same metadata. I also set canonical URLs explicitly on every page template, because filters and tracking parameters create duplicate URLs fast on dynamic sites.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Keep sitemaps and robots.txt self-updating
&lt;/h2&gt;

&lt;p&gt;Generate your sitemap dynamically so new pages appear automatically, and split large sitemaps by content type. Your robots.txt should reference the sitemap and block routes that waste crawl budget: API routes, preview routes, admin paths, and internal search pages. I verify both files after every major deploy, because one bad deploy can silently break them.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Fix Core Web Vitals properly
&lt;/h2&gt;

&lt;p&gt;Direct answer: the highest-impact Core Web Vitals fixes for Next.js are the next/image component for images, next/font for self-hosted fonts, and removing or deferring third-party scripts. These three changes fix most LCP, CLS, and INP failures. Target LCP under 2.5 seconds on real field data, not just lab scores.&lt;/p&gt;

&lt;p&gt;Next.js makes performance easier but not automatic. The wins that matter: use the next/image component for image optimization, use next/font to self-host fonts and prevent layout shift, and be ruthless about client-side JavaScript. Every third-party script hurts Interaction to Next Paint. I audit the bundle on every release and lazy load everything below the fold.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Put structured data on templates, not pages
&lt;/h2&gt;

&lt;p&gt;Add JSON-LD schema to your page templates so every new page ships with valid structured data automatically. Article schema for the blog template, Product schema for products, FAQPage for Q and A sections, BreadcrumbList everywhere. Then validate with Google's Rich Results Test. Broken or missing schema is one of the most common findings in the technical SEO audits I run. I perform these audits for site owners through &lt;a href="https://www.shanzyseoexpert.com/" rel="noopener noreferrer"&gt;shanzyseoexpert.com&lt;/a&gt;, and structured data problems appear in almost every report.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Keep URLs clean and redirects flat
&lt;/h2&gt;

&lt;p&gt;Short, descriptive slugs with no dates or IDs. Pick one trailing slash convention and stick to it. Next.js makes redirects easy in the config file, so there is no excuse for chains of three or four redirects. I keep a redirect map for every migration and test the top URLs before launch day.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Control pagination and filters
&lt;/h2&gt;

&lt;p&gt;Sites with filters, sorting, and pagination can generate thousands of near-duplicate URLs. Canonicalize to the main category page, noindex the filtered variants, and make sure new product pages get discovered quickly. I have seen crawl budget burned on 40,000 filter combinations while new pages waited weeks for their first crawl.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Build internal linking into components
&lt;/h2&gt;

&lt;p&gt;Your component architecture should make internal linking automatic: related post blocks, breadcrumbs, category hubs, and contextual links inside content. I check link depth on every audit. Important pages should be reachable within three clicks of the homepage. Orphan pages do not rank no matter how good the content is.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Get internationalization right
&lt;/h2&gt;

&lt;p&gt;If you serve multiple languages or regions, hreflang has to be reciprocal and point at live URLs. One x-default, one canonical per language version, and no hreflang tags pointing to pages that 404. I validate the full set with a crawler before trusting it, because hreflang mistakes silently split your ranking signals.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. Monitor after every deploy
&lt;/h2&gt;

&lt;p&gt;SEO is not a one-time task. Track indexation of new pages weekly, watch the Core Web Vitals report in Search Console, and run scheduled crawls that compare against your baseline. One bad deploy, one wrong robots.txt, one broken sitemap can undo months of work. This checklist only works if you keep running it.&lt;/p&gt;

&lt;p&gt;Work through these ten items before you spend on link building. Technical SEO is the foundation that everything else stands on.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is the most important technical SEO factor for Next.js?
&lt;/h3&gt;

&lt;p&gt;Rendering strategy. If Googlebot cannot see your content without executing JavaScript, nothing else matters. Use static generation or server-side rendering for every page that needs to rank, and verify with the URL Inspection tool.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I fix Core Web Vitals on a Next.js site?
&lt;/h3&gt;

&lt;p&gt;Use next/image for all images, next/font to self-host fonts, and audit third-party scripts ruthlessly. Most Next.js sites I fix pass Core Web Vitals after these three changes. Measure with field data in Search Console, not just lab scores.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does a Next.js site need a sitemap?
&lt;/h3&gt;

&lt;p&gt;Yes. Generate it dynamically so new pages appear automatically, split it by content type for large sites, and reference it in robots.txt. I verify both files after every major deploy because a bad deploy can silently break them.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can a Next.js site rank without server-side rendering?
&lt;/h3&gt;

&lt;p&gt;It can, but it is harder. Google renders JavaScript, but rendering costs crawl budget and delays indexation. For competitive keywords, server-rendered pages consistently outperform client-rendered ones in my experience.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Shanzy Saleem is an SEO Specialist and Web Developer based in Lahore, Pakistan. She helps brands grow organic traffic with technical SEO, link building, and high-performance websites built on Next.js, WordPress, and Shopify. Learn more at &lt;a href="https://www.shanzyseoexpert.com/" rel="noopener noreferrer"&gt;shanzyseoexpert.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>seo</category>
      <category>nextjs</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
