← All notes

Making My Website Machine-Readable

I wanted search engines and AI systems to understand that my scattered profiles all represent the same person.

4 min readBy Jansen Cadorna
  • seo
  • structured-data
  • schema-org
  • engineering
Earth illuminated by interconnected digital network lines

I have profiles everywhere.

GitHub. LinkedIn. Product Hunt. Crunchbase. Peerlist. Devpost. Hashnode. F6S. Stack Overflow.

And probably too many others.

To a human, it is pretty obvious that they are all me.

To a machine, that is not necessarily true.

Different usernames, profile URLs, descriptions, and dozens of websites create a fragmented identity. So I recently changed how my portfolio represents me.

Not visually.

Structurally.

My website became the canonical identity

I wanted one URL to act as the source of truth:

https://www.jansencadorna.com

Everything else becomes an external representation of the same person.

Instead of treating SEO purely as titles, descriptions, keywords, and sitemaps, I started looking at it as an entity problem.

  • Who is Jansen Cadorna?
  • Which website belongs to him?
  • Which profiles represent him?
  • Which company is he affiliated with?

Those relationships can be expressed in structured data.

One Person entity

My site now defines a Schema.org Person entity with a stable ID:

https://www.jansencadorna.com/#person

It contains things like:

  • my canonical name
  • profile image
  • role
  • professional description
  • areas of expertise
  • external profiles
  • organizational affiliation

The important part is the stable ID.

Different pieces of structured data can now reference the same person instead of describing slightly different copies of me.

Connecting all the profiles

Schema.org provides a property called sameAs.

It lets the site say that my GitHub account, LinkedIn page, Product Hunt profile, Crunchbase page, and other profiles represent the same entity.

Instead of this:

GitHub       Jansen?
LinkedIn     Jansen?
Crunchbase   Jansen?
Peerlist     Jansen?
Portfolio    Jansen?

The graph becomes closer to:

                    GitHub
                       ^
LinkedIn <- Jansen Cadorna -> Product Hunt
                       |
                  Crunchbase
                       |
                    Peerlist

My portfolio acts as the center.

This does not magically guarantee rankings or a Knowledge Panel. But it gives crawlers much cleaner information to work with.

The website is its own entity too

The portfolio itself is represented separately as a WebSite:

https://www.jansencadorna.com/#website

That website references my Person entity as its publisher.

Instead of duplicating my information, the relationship becomes:

Jansen Cadorna
      |
publisher of
      |
jansencadorna.com

Then I added the profile page

Because the homepage is primarily about me, it can also be represented as a ProfilePage.

That entity points back to the same person:

ProfilePage
     | mainEntity
     v
   Person

The page is also part of the WebSite. All three entities connect rather than existing as isolated JSON objects.

Abstruck needed to stay separate

One easy mistake would have been adding my startup, Abstruck, to my personal sameAs list.

But Abstruck is not another profile for me. It is an organization.

So it gets its own entity:

https://www.jansencadorna.com/#abstruck

The relationship becomes:

Jansen Cadorna
      |
 affiliation
      |
   Abstruck

Abstruck then has its own canonical website and its Crunchbase organization page as an external identity.

That distinction matters. The graph should describe reality instead of stuffing URLs into structured data because they look useful for SEO.

I centralized everything in code

Another thing I wanted to avoid was identity drift.

Imagine updating my Threads URL in the footer but forgetting the JSON-LD. Or changing my role on the homepage while metadata still describes something else.

The portfolio now keeps the important identity information in one configuration. The UI, metadata, and structured data consume that same source.

Conceptually:

siteConfig
   |
   |-- homepage
   |-- footer
   |-- metadata
   `-- JSON-LD

One identity. Multiple representations.

SEO is becoming less about strings

I used to think about SEO mostly in terms of:

<title>
<meta description>
keywords
sitemap
robots.txt

Those still matter.

But modern search systems also need to understand things and relationships.

Person. Organization. Website. Article. Profile. Author. Founder. Product.

Once I started looking at SEO this way, structured data made a lot more sense.

I am not trying to tell Google:

Rank "Jansen Cadorna" higher.

I am trying to make the underlying statement unambiguous:

This is Jansen Cadorna.
This is his website.
These profiles are also him.
This organization is associated with him.

The ranking part is still earned elsewhere.

The machine-readable foundation just makes the identity easier to understand.