<?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: Dhruv Sheladiya</title>
    <description>The latest articles on DEV Community by Dhruv Sheladiya (@dhruv_15_11).</description>
    <link>https://dev.to/dhruv_15_11</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%2F4144700%2Fa20a5cfc-a8c3-449a-95ae-713f83f53a69.png</url>
      <title>DEV Community: Dhruv Sheladiya</title>
      <link>https://dev.to/dhruv_15_11</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dhruv_15_11"/>
    <language>en</language>
    <item>
      <title>🔍 My Next.js Portfolio Was Invisible to Google &amp; ChatGPT — Here's How I Fixed It</title>
      <dc:creator>Dhruv Sheladiya</dc:creator>
      <pubDate>Sat, 26 Sep 2026 18:17:28 +0000</pubDate>
      <link>https://dev.to/dhruv_15_11/my-nextjs-portfolio-was-invisible-to-google-chatgpt-heres-how-i-fixed-it-1eg0</link>
      <guid>https://dev.to/dhruv_15_11/my-nextjs-portfolio-was-invisible-to-google-chatgpt-heres-how-i-fixed-it-1eg0</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;👋 Hey! I'm &lt;strong&gt;Dhruv Sheladiya&lt;/strong&gt;, a &lt;strong&gt;Full Stack Developer&lt;/strong&gt; working with the &lt;strong&gt;MERN Stack, React.js, Next.js &amp;amp; Node.js&lt;/strong&gt;.&lt;br&gt;
This is the story of how I found out my own portfolio was basically &lt;strong&gt;invisible&lt;/strong&gt;, and the &lt;strong&gt;5 fixes&lt;/strong&gt; that changed that.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  😬 The Embarrassing Discovery
&lt;/h2&gt;

&lt;p&gt;I Googled my own name. Here's what I found:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What I expected&lt;/th&gt;
&lt;th&gt;What actually happened&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;✅ My portfolio at the top&lt;/td&gt;
&lt;td&gt;❌ Barely showing up&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;✅ A nice preview image&lt;/td&gt;
&lt;td&gt;❌ No image at all&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;✅ ChatGPT knows who I am&lt;/td&gt;
&lt;td&gt;❌ &lt;em&gt;"I don't have information about that person"&lt;/em&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The site looked &lt;strong&gt;perfect&lt;/strong&gt; in the browser. So what was going on? 🤔&lt;/p&gt;




&lt;h2&gt;
  
  
  🕵️ The Root Cause: A Beautiful Page That Crawlers Saw as Empty
&lt;/h2&gt;

&lt;p&gt;My portfolio has a cool animated loader, and the homepage is a &lt;strong&gt;client component&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;use client&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Home&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;showLoader&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setShowLoader&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;showLoader&lt;/span&gt;
    &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Loader&lt;/span&gt; &lt;span class="na"&gt;onComplete&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setShowLoader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;MainContent&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;For real users? Totally fine. 🎉&lt;br&gt;
For crawlers? &lt;strong&gt;The HTML only contains the loader.&lt;/strong&gt; No name. No heading. No links. 💀&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Visitor&lt;/th&gt;
&lt;th&gt;Runs JavaScript?&lt;/th&gt;
&lt;th&gt;What it saw&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;🧑 Real user&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;td&gt;Full animated portfolio&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🤖 Googlebot&lt;/td&gt;
&lt;td&gt;⚠️ Sometimes, slowly&lt;/td&gt;
&lt;td&gt;Maybe the content, maybe just the loader&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🧠 AI crawlers (ChatGPT, Perplexity)&lt;/td&gt;
&lt;td&gt;❌ Mostly no&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;An empty page&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;Lesson #1:&lt;/strong&gt; Always check your page &lt;strong&gt;without JavaScript&lt;/strong&gt;.&lt;br&gt;
Run &lt;code&gt;curl https://your-site.com&lt;/code&gt; or right-click → &lt;strong&gt;View Page Source&lt;/strong&gt;.&lt;br&gt;
&lt;strong&gt;If your name isn't in there, crawlers probably can't see it either.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  🛠️ Fix #1: Server-Render the Important Content
&lt;/h2&gt;

&lt;p&gt;I didn't want to touch the UI, so I added a small, &lt;strong&gt;accessible&lt;/strong&gt; profile block in &lt;code&gt;layout.js&lt;/code&gt;, which is a &lt;strong&gt;Server Component&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Tailwind's &lt;code&gt;sr-only&lt;/code&gt; class makes it readable by &lt;strong&gt;screen readers and crawlers&lt;/strong&gt;, but it doesn't change the design at all:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;body&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"sr-only"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Dhruv Sheladiya – Full Stack Developer | MERN Stack | React.js Next.js &lt;span class="err"&gt;&amp;amp;&lt;/span&gt; Node.js Expert&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Full Stack Developer from India specializing in React.js, Next.js and Node.js.&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;nav&lt;/span&gt; &lt;span class="na"&gt;aria-label&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Dhruv Sheladiya on the web"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;ul&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;SOCIALS&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt; &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;href&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;href&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;rel&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"me noopener"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Dhruv Sheladiya on &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;label&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;ul&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;nav&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;body&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;Important:&lt;/strong&gt; Keep this content &lt;strong&gt;honest&lt;/strong&gt; and &lt;strong&gt;identical to what's visible&lt;/strong&gt; on the page.&lt;br&gt;
❌ Hidden text stuffed with keywords = spam signal&lt;br&gt;
✅ Accessible text that matches your real content = fine&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  🔗 Fix #2: Structured Data That Connects All Your Profiles
&lt;/h2&gt;

&lt;p&gt;Google builds a &lt;strong&gt;Knowledge Graph&lt;/strong&gt; entry for people by connecting profiles that belong to the same person.&lt;br&gt;
The &lt;code&gt;sameAs&lt;/code&gt; property in &lt;strong&gt;JSON-LD&lt;/strong&gt; tells Google exactly which profiles are yours 👇&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;jsonLd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@context&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://schema.org&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@graph&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Person&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://aboutdhruv.vercel.app/#person&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Dhruv Sheladiya&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;jobTitle&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Full Stack Developer&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://aboutdhruv.vercel.app&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;sameAs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://www.upwork.com/freelancers/~0191c7eba12b27a044&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://www.linkedin.com/in/dhruv-sheladiya-a350582a6&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://github.com/Dhruv-1511&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://x.com/DhruvSheladiya2&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ProfilePage&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://aboutdhruv.vercel.app&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;mainEntity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://aboutdhruv.vercel.app/#person&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;I also added &lt;code&gt;&amp;lt;link rel="me"&amp;gt;&lt;/code&gt; tags in the &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; for every profile. GitHub and Mastodon use &lt;code&gt;rel="me"&lt;/code&gt; for identity verification too. 🪪&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🔁 &lt;strong&gt;The secret sauce:&lt;/strong&gt; this only works if it goes &lt;strong&gt;both ways&lt;/strong&gt;.&lt;br&gt;
Your site links to your profiles ➡️ &lt;strong&gt;and&lt;/strong&gt; every profile (GitHub, LinkedIn, Upwork, X…) links &lt;strong&gt;back&lt;/strong&gt; to your site ⬅️&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  🖼️ Fix #3: My OG Image Was 1.7 MB 😱
&lt;/h2&gt;

&lt;p&gt;My &lt;code&gt;openGraph&lt;/code&gt; config &lt;em&gt;said&lt;/em&gt; the image was &lt;code&gt;1200×630&lt;/code&gt;, but the real file was:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;❌ Before&lt;/th&gt;
&lt;th&gt;✅ After&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Size&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1629 × 966&lt;/td&gt;
&lt;td&gt;1200 × 630&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Weight&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1.77 MB&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;80 KB&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Format&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;PNG&lt;/td&gt;
&lt;td&gt;JPEG (mozjpeg)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Preview showing?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Nope&lt;/td&gt;
&lt;td&gt;Yes 🎉&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;I fixed it with a single command using &lt;code&gt;sharp&lt;/code&gt;, which &lt;strong&gt;already comes with Next.js&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;node &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"require('sharp')('public/ogimg.png').resize(1200,630,{fit:'cover'}).jpeg({quality:82,mozjpeg:true}).toFile('public/og.jpg')"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;blockquote&gt;
&lt;p&gt;🧠 &lt;strong&gt;Did you know?&lt;/strong&gt; &lt;code&gt;og:image&lt;/code&gt; is for &lt;strong&gt;social previews&lt;/strong&gt; (WhatsApp, LinkedIn, X).&lt;br&gt;
Google &lt;strong&gt;doesn't&lt;/strong&gt; use it for search thumbnails. It picks images from your &lt;strong&gt;page content&lt;/strong&gt; and &lt;strong&gt;structured data&lt;/strong&gt;, one more reason Fix #1 matters.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  ⚙️ Fix #4: Nail the Next.js Metadata Basics
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;metadata&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;metadataBase&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;URL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://aboutdhruv.vercel.app&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Dhruv Sheladiya – Full Stack Developer | MERN Stack | React.js Next.js &amp;amp; Node.js Expert&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;alternates&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;canonical&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;openGraph&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;profile&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;images&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt; &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/og.jpg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;630&lt;/span&gt; &lt;span class="p"&gt;}],&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;robots&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;index&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;follow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;googleBot&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;max-image-preview&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;large&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;max-snippet&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Rule&lt;/th&gt;
&lt;th&gt;Why it matters&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;🥇 &lt;strong&gt;Name first in the title&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;People search your &lt;strong&gt;name&lt;/strong&gt;, not your job title&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🔁 &lt;strong&gt;Same headline everywhere&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;My title matches my Upwork headline &lt;strong&gt;exactly&lt;/strong&gt;, so search engines connect the dots&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🎯 &lt;strong&gt;Canonical URL&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Stops Google splitting ranking between duplicate URLs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🖼️ &lt;strong&gt;&lt;code&gt;max-image-preview: large&lt;/code&gt;&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Allows large image previews in results&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h2&gt;
  
  
  🤖 Fix #5: Add &lt;code&gt;llms.txt&lt;/code&gt; for AI Assistants
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;llms.txt&lt;/code&gt; is a newer convention: a plain &lt;strong&gt;Markdown file at &lt;code&gt;/llms.txt&lt;/code&gt;&lt;/strong&gt; that summarizes your site for AI tools.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;
  📄 Click to see what my llms.txt looks like
  &lt;br&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Dhruv Sheladiya&lt;/span&gt;
&lt;span class="gt"&gt;
&amp;gt; Dhruv Sheladiya is a Full Stack Developer from India — MERN Stack |&lt;/span&gt;
&lt;span class="gt"&gt;&amp;gt; React.js, Next.js &amp;amp; Node.js Expert.&lt;/span&gt;

Portfolio: https://aboutdhruv.vercel.app

&lt;span class="gu"&gt;## Skills&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Frontend: React.js, Next.js, JavaScript, TypeScript, Tailwind CSS
&lt;span class="p"&gt;-&lt;/span&gt; Backend: Node.js, Express.js, REST APIs
&lt;span class="p"&gt;-&lt;/span&gt; Databases: MongoDB, PostgreSQL

&lt;span class="gu"&gt;## Official profiles&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;Upwork&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;https://www.upwork.com/freelancers/~0191c7eba12b27a044&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;LinkedIn&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;https://www.linkedin.com/in/dhruv-sheladiya-a350582a6&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;GitHub&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;https://github.com/Dhruv-1511&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;




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

&lt;p&gt;⏱️ Takes &lt;strong&gt;5 minutes&lt;/strong&gt;. There's no downside.&lt;/p&gt;


&lt;h2&gt;
  
  
  ✅ The Complete Checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] 👀 &lt;strong&gt;View Page Source&lt;/strong&gt;: is your name in the raw HTML?&lt;/li&gt;
&lt;li&gt;[ ] 🧩 JSON-LD &lt;code&gt;Person&lt;/code&gt; with &lt;code&gt;sameAs&lt;/code&gt; for &lt;strong&gt;all&lt;/strong&gt; your profiles&lt;/li&gt;
&lt;li&gt;[ ] 🔁 Every profile links &lt;strong&gt;back&lt;/strong&gt; to your site&lt;/li&gt;
&lt;li&gt;[ ] 🖼️ OG image is &lt;strong&gt;1200×630&lt;/strong&gt; and &lt;strong&gt;under ~300 KB&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;[ ] 🥇 Name first in &lt;code&gt;&amp;lt;title&amp;gt;&lt;/code&gt;, &lt;strong&gt;same headline everywhere&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;[ ] 🗺️ Submit your sitemap to &lt;strong&gt;Google Search Console&lt;/strong&gt; &lt;em&gt;and&lt;/em&gt; &lt;strong&gt;Bing Webmaster Tools&lt;/strong&gt; (ChatGPT search relies heavily on Bing!)&lt;/li&gt;
&lt;li&gt;[ ] 🧪 Test with Google's &lt;strong&gt;Rich Results Test&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;[ ] 🤖 Add an &lt;code&gt;/llms.txt&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


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

&lt;blockquote&gt;
&lt;p&gt;SEO for your own name is &lt;strong&gt;slow&lt;/strong&gt;: expect a few weeks before things move. ⏳&lt;br&gt;
But the best part? &lt;strong&gt;None of this required changing a single pixel of my UI.&lt;/strong&gt; 🎨✨&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Here's the live result 👇&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://aboutdhruv.vercel.app/" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Faboutdhruv.vercel.app%2Fog.jpg" height="420" class="m-0" width="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://aboutdhruv.vercel.app/" rel="noopener noreferrer" class="c-link"&gt;
            Dhruv Sheladiya – Full Stack Developer | MERN Stack | React.js Next.js &amp;amp; Node.js Expert
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Dhruv Sheladiya is a Full Stack Developer from India specializing in the MERN stack, React.js, Next.js and Node.js. View projects, experience and connect on Upwork, LinkedIn and GitHub.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Faboutdhruv.vercel.app%2Ffavicon.ico" width="48" height="48"&gt;
          aboutdhruv.vercel.app
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;






&lt;h2&gt;
  
  
  👨‍💻 About Me
&lt;/h2&gt;

&lt;p&gt;Hi, I'm &lt;strong&gt;Dhruv Sheladiya&lt;/strong&gt;, a &lt;strong&gt;Full Stack Developer&lt;/strong&gt; 🚀 building fast, scalable web apps &amp;amp; SaaS products with clean UI/UX, from frontend to backend.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;🌐 &lt;strong&gt;Portfolio&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;&lt;a href="https://aboutdhruv.vercel.app" rel="noopener noreferrer"&gt;aboutdhruv.vercel.app&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;💼 &lt;strong&gt;Upwork&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.upwork.com/freelancers/~0191c7eba12b27a044" rel="noopener noreferrer"&gt;Hire me for freelance projects&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🔗 &lt;strong&gt;LinkedIn&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.linkedin.com/in/dhruv-sheladiya-a350582a6" rel="noopener noreferrer"&gt;Dhruv Sheladiya&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;💻 &lt;strong&gt;GitHub&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/Dhruv-1511" rel="noopener noreferrer"&gt;@Dhruv-1511&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🐦 &lt;strong&gt;X&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;&lt;a href="https://x.com/DhruvSheladiya2" rel="noopener noreferrer"&gt;@DhruvSheladiya2&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://www.upwork.com/freelancers/~0191c7eba12b27a044" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;💼 Hire Me on Upwork&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://aboutdhruv.vercel.app" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;🌐 Visit My Portfolio&lt;/a&gt;
&lt;/p&gt;




&lt;p&gt;💬 &lt;strong&gt;Your turn:&lt;/strong&gt; open &lt;strong&gt;View Page Source&lt;/strong&gt; on your portfolio right now. What did &lt;em&gt;you&lt;/em&gt; find? Tell me in the comments 👇&lt;br&gt;
❤️ If this helped, drop a reaction and &lt;strong&gt;follow me&lt;/strong&gt; for more Next.js &amp;amp; React content!&lt;/p&gt;

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