<?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: claytoncamera</title>
    <description>The latest articles on DEV Community by claytoncamera (@claytoncamera).</description>
    <link>https://dev.to/claytoncamera</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%2F4052003%2F5563a1a2-45d8-4f90-affd-06c03efb8a03.png</url>
      <title>DEV Community: claytoncamera</title>
      <link>https://dev.to/claytoncamera</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/claytoncamera"/>
    <language>en</language>
    <item>
      <title>When your name is also a thing: entity SEO for an ambiguous name</title>
      <dc:creator>claytoncamera</dc:creator>
      <pubDate>Tue, 28 Jul 2026 20:24:44 +0000</pubDate>
      <link>https://dev.to/claytoncamera/when-your-name-is-also-a-thing-entity-seo-for-an-ambiguous-name-3f2g</link>
      <guid>https://dev.to/claytoncamera/when-your-name-is-also-a-thing-entity-seo-for-an-ambiguous-name-3f2g</guid>
      <description>&lt;p&gt;My surname is a device, and the Claytons that outrank me are towns. Three of them turned up on page one as traffic and weather cams. So the exact query &lt;strong&gt;“Clayton Camera”&lt;/strong&gt; returns municipal webcams, a YouTube channel of webcam feeds, and a photography business — and, until recently, nothing of mine at all.&lt;/p&gt;

&lt;p&gt;That sounds like a keyword problem. It isn’t. It’s an &lt;strong&gt;entity disambiguation&lt;/strong&gt; problem, and the two have completely different fixes. Writing more content aimed at the query is wasted motion. Here’s what I did instead, what it cost, and what I’d tell anyone whose name collides with a common noun, a place, or a product.&lt;/p&gt;

&lt;h2&gt;
  
  
  First: measure it signed out
&lt;/h2&gt;

&lt;p&gt;I started from a false premise — “only my LinkedIn shows up when you search my name.” It doesn’t. I saw LinkedIn because I was signed in to Google with a profile that has visited it a hundred times. That’s &lt;strong&gt;personalization, not rank&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Non-personalized, the first page for the bare two-word query was: traffic and weather cams for Clayton NY, Clayton NC and Clayton CA; a “Cameras of Clayton NY” channel; a photography company; two unrelated photographers. Zero results for me — not even the LinkedIn profile I thought was ranking.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Rule 1&lt;/strong&gt;&lt;br&gt;
Never audit your own name signed in. Your search history is precisely the data that makes a bad SERP look fine. Incognito, signed out, or it didn’t happen.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The measurement also found the one thing that &lt;em&gt;was&lt;/em&gt; working: a small client-work site of mine ranked &lt;strong&gt;#1&lt;/strong&gt; for the query “Clayton Camera LoopholeMaxing OrbitRoute founder.” Google already had that page and understood it. That was the beachhead — and, tellingly, it was the property with the least SEO wiring on it: no canonical, no structured data, no sitemap, and a &lt;code&gt;robots.txt&lt;/code&gt; advertising a sitemap that returned 404.&lt;/p&gt;

&lt;h2&gt;
  
  
  The reframe
&lt;/h2&gt;

&lt;p&gt;Content volume does not beat three towns’ worth of municipal infrastructure for a generic two-word phrase. What beats it — or at least gets you onto the board next to it — is making search engines build an &lt;strong&gt;entity&lt;/strong&gt;: a single node in the knowledge graph that means “Clayton Camera, the person in Orlando,” distinct from “camera, in Clayton.”&lt;/p&gt;

&lt;p&gt;An entity is convincing when many independent sources say the same thing about the same identifier. So the work splits in two: give the entity one unambiguous identifier, then attach everything you own to that exact identifier — identically.&lt;/p&gt;

&lt;h2&gt;
  
  
  The playbook
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. One page whose title, H1, URL and canonical &lt;em&gt;are&lt;/em&gt; the name
&lt;/h3&gt;

&lt;p&gt;Not “About me.” Not “Home.” The literal string. I registered the exact-match domain, which is the strongest version of this — but a &lt;code&gt;/your-name/&lt;/code&gt; path on a domain you already own does the same job. Give it &lt;code&gt;ProfilePage&lt;/code&gt; + &lt;code&gt;Person&lt;/code&gt; markup and make the person the &lt;code&gt;mainEntity&lt;/code&gt; of the page.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. One Person &lt;code&gt;@id&lt;/code&gt;, referenced everywhere and redefined nowhere
&lt;/h3&gt;

&lt;p&gt;This is the load-bearing part. Every property I own emits a Person node using the same identifier:&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;"@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;"Person"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@id"&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://claytoncamera.com/#person"&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;"Clayton Camera"&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://claytoncamera.com/"&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;My company sites reference it as the &lt;code&gt;founder&lt;/code&gt; of their &lt;code&gt;Organization&lt;/code&gt; node. My portfolio site references it as the page’s subject. The entity page itself defines it in full — image, address, &lt;code&gt;knowsAbout&lt;/code&gt;, &lt;code&gt;sameAs&lt;/code&gt;, &lt;code&gt;worksFor&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Mint a &lt;em&gt;second&lt;/em&gt; identifier on any one of those sites and you have not added a signal — you have split one person into two half-evidenced strangers. This is the single easiest way to undo months of work, and it happens by accident, usually during a redesign.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Say out loud what you are not
&lt;/h3&gt;

&lt;p&gt;Schema.org has a property for exactly this situation and almost nobody uses it:&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="nl"&gt;"disambiguatingDescription"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Clayton Camera is a person — a technical
  founder and software engineer based in Orlando, Florida. Not to be
  confused with traffic or weather cameras in the towns of Clayton,
  New York; Clayton, North Carolina; or Clayton, California."&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It reads blunt because it is. It is also the most on-the-nose anti-collision signal available, and it’s the sentence an AI answer engine can quote when someone asks who you are.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Make every rendered link real, not just marked up
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;sameAs&lt;/code&gt; is a claim. A crawler follows &lt;em&gt;links&lt;/em&gt;. So each profile in &lt;code&gt;sameAs&lt;/code&gt; also appears as a visible &lt;code&gt;rel="me"&lt;/code&gt; anchor on the page, and each company site carries a visible “Founded by [name]” link back to the entity page — not only the JSON-LD. Schema without a rendered counterpart is a weaker version of the same statement.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Off-site, use one string
&lt;/h3&gt;

&lt;p&gt;Same name spelling, same role line, same city string, same link, on every profile you claim. Consistency is not an aesthetic preference here — matching strings across independent sources is literally the mechanism by which mentions get merged into one entity. Varying your job title across five profiles is how you stay five weak entities.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two traps I hit
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Moving the identifier.&lt;/strong&gt; I built the hub at &lt;code&gt;/clayton-camera/&lt;/code&gt; on an existing domain, then bought the exact-match domain hours later and moved it. That was only free because the page had never been indexed. The move touched four files across three repositories &lt;strong&gt;in a single commit&lt;/strong&gt; — if two of them disagree even briefly, the crawl that lands in that window sees two entities. The old path became a stub with a cross-domain canonical and &lt;code&gt;noindex,follow&lt;/code&gt;, never a live duplicate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A single public resolver is not the truth.&lt;/strong&gt; After the DNS change, one major public resolver served the old parking IPs long enough that I briefly concluded the records had reverted. The authoritative nameservers and a second public resolver had been correct the whole time. Check authoritative &lt;em&gt;and&lt;/em&gt; a second resolver before you diagnose a regression — and prove the origin independently of DNS entirely:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;--resolve&lt;/span&gt; example.com:443:185.199.108.153 https://example.com/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That separates “my host is misconfigured” from “DNS hasn’t propagated,” which look identical from a browser.&lt;/p&gt;

&lt;h2&gt;
  
  
  Then guard it in CI
&lt;/h2&gt;

&lt;p&gt;Entity work rots silently. Nothing errors when a sitemap goes stale, a private path leaks into it, or a well-meaning refactor mints a second Person id. So the assertions live in a shell script that runs with the tests:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;robots.txt&lt;/code&gt; and &lt;code&gt;sitemap.xml&lt;/code&gt; agree, and every public page is listed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;zero&lt;/strong&gt; disallowed/internal paths appear in the sitemap&lt;/li&gt;
&lt;li&gt;the entity page’s title starts with the name, its &lt;code&gt;h1&lt;/code&gt; &lt;em&gt;is&lt;/em&gt; the name, it self-canonicalises&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;disambiguatingDescription&lt;/code&gt; is present&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;exactly one&lt;/strong&gt; Person &lt;code&gt;@id&lt;/code&gt; exists tree-wide&lt;/li&gt;
&lt;li&gt;every JSON-LD block parses&lt;/li&gt;
&lt;li&gt;the redirect stub is still a stub and has not been re-expanded into a competing page&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last one matters more than it looks. Two pages competing for the same name query is exactly the problem canonicalisation exists to prevent, and “let’s bring that old page back” is a reasonable-sounding request six months from now.&lt;/p&gt;

&lt;h2&gt;
  
  
  Honest expectations
&lt;/h2&gt;

&lt;p&gt;Displacing three towns’ worth of public webcams for a bare two-word generic query is a &lt;strong&gt;3–6 month&lt;/strong&gt; job and may never fully clear. Anyone selling you a two-week version of this outcome is selling you the signed-in SERP.&lt;/p&gt;

&lt;p&gt;The realistic — and more valuable — win is different: &lt;strong&gt;the name plus almost any qualifier&lt;/strong&gt; (founder, Orlando, the company names, developer) returns your properties, and the person entity resolves correctly in AI answer engines, which increasingly matter more than position 4 on a page nobody scrolls.&lt;/p&gt;

&lt;p&gt;The on-site work took an afternoon. From there the rate limiter is off-site citations — profiles you claim, work you publish under the byline, people who link to you because you made something worth linking to. There is no schema property for that part.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The one-line version&lt;/strong&gt;&lt;br&gt;
Before doing any keyword work on a personal-name query, check whether the name is an &lt;strong&gt;ambiguous entity&lt;/strong&gt;. If it collides with a common noun, a place, or a product class, no amount of content wins — one canonical &lt;code&gt;@id&lt;/code&gt;, a page that &lt;em&gt;is&lt;/em&gt; the name, an explicit statement of what you are not, and consistent citations off-site are the whole fix.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>seo</category>
      <category>webdev</category>
      <category>schema</category>
      <category>googlesearch</category>
    </item>
  </channel>
</rss>
