Task: Develop microdata markup

Develop microdata markup

26.08.2026fi1osof.ru

Develop and implement correct Schema.org Person markup and an associated site entity graph, taking into account Google Search recommendations.

Objective

Develop the site's microdata markup so that search engines can more unambiguously understand that the site is connected to a specific person, and link this entity with verified external profiles and publications.

Markup in itself does not create authority or guarantee a rich result in Google, but it helps explicitly describe entities and relationships between them, and can facilitate the matching of pre-existing signals about the same person.

What to Check and Design

Currently, the site has WebSite markup. You need to design a full Schema.org graph where Person is present as a separate entity, and if necessary, WebSite, WebPage / ProfilePage, articles, and other entities reference it via a stable @id.

Separately check whether the main page qualifies for ProfilePage. According to Google documentation, ProfilePage is appropriate when the main content of the page is dedicated to a single person or organization. If the main page is not a profile page by definition, Person can still be described as a separate entity in the general JSON-LD graph without passing the page off as a ProfilePage.

Purpose of Person

Person describes a specific person as a separate entity rather than just a string with the author's name. This allows you to:

  • set a stable entity identifier via @id;
  • link the author to the site, pages, publications, and other entities;
  • specify an alternate name / pseudonym;
  • link the person to external pages that unambiguously identify the same persona;
  • reduce ambiguity in case of name matches;
  • form a consistent JSON-LD graph instead of a set of disconnected markup fragments.

Person Fields to Consider

Basic

  • @type: "Person" — the entity type.
  • @id — a stable URI identifier within the graph, for example, the site URL with a fragment identifier. Needed for repeated references to the same entity from other JSON-LD nodes.
  • name — the person's primary name. Google recommends using the real name here if it is known.
  • alternateName — an alternate name, pseudonym, nickname, or other stable designation.
  • url — the canonical URL of the page/site associated with this entity.
  • image — an image of the person; can be a URL or an ImageObject.
  • description — a brief description of the entity.

Identification and Disambiguation

  • sameAsan official Schema.org property expecting a URL. Used for links to external pages that unambiguously point to the same entity. Google specifically recommends this field for links to other external profiles or profile homepages.
  • Do not add arbitrary mentions, directories, or thematic pages to sameAs. You need pages that reliably identify the same person: verified profiles, author pages, Wikidata/Wikipedia, and similar sources if they actually exist and refer to the same persona.
  • identifier — an additional identifier, if there is a truly stable external identifier.
  • mainEntityOfPage — can be used when a specific page primarily describes this person.
  • disambiguatingDescription — a short clarification if it is necessary to distinguish the person from namesakes.

Professional Context — Only if data is actually present on the site

  • jobTitle — title / professional role.
  • worksFor — the organization the person works for.
  • affiliation — the organization or community the person is associated with.
  • knowsAbout — topics of competence; use with caution and only for reliably verifiable information.

Do not fill in fields just for the sake of Schema.org completeness. The markup must correspond to the visible page content and actual data.

Connection to ProfilePage

Google supports ProfilePage structured data. For such a page, the main object is set via mainEntity of type Person or Organization.

If the site has or will have a separate "About Me" / author profile page, consider the structure:

{
  "@context": "https://schema.org",
  "@type": "ProfilePage",
  "mainEntity": {
    "@id": "#person",
    "@type": "Person",
    "name": "..."
  }
}

If the main page contains a lot of information not just about the person, do not use ProfilePage mechanically just for SEO.

sameAs: Conclusion Based on Documentation

The field exists and is a standard Schema.org property (Thing.sameAs). Its meaning: the URL of a page that unambiguously points to the identity of the same entity.

Google's ProfilePage documentation also lists sameAs as a recommended property for Person / Organization: URLs of other external profiles or profile homepages.

That is, using sameAs for verified external profiles is correct. However, each URL must be checked separately before adding, and the array should not be turned into a list of all external links about the person.

Implementation

  • Choose a stable @id for Person.
  • Link the existing WebSite to the Person entity where semantically justified.
  • Check the markup of author/publication pages and, if possible, link their author to the same @id.
  • Do not duplicate a single person with separate unconnected Person objects on different pages.
  • Form a JSON-LD @graph if it simplifies connections between WebSite, WebPage/ProfilePage, Person, Article, and other entities.
  • Test the final markup in the Schema Markup Validator and Google Rich Results Test where the corresponding type is supported by Google.
  • Ensure that structured data values match the visible page content and Google's general structured data requirements.

Ворклоги

Searched via my AI agent. Gave the query:

Find all links to the profile of Nikolay Lanets aka Fi1osof across all well-known resources and give me this list. I need this to compile sameAs in Person microdata

It provided the following information:

Complete list of profiles and links for Person sameAs microdata

Here are all the found profile links for Nikolay Lanets (Fi1osof):

Main profiles:

  1. Personal website/portfoliohttps://fi1osof.ru/
  2. "About" pagehttps://fi1osof.ru/about

Development and code:

  1. GitHub (main): https://github.com/Fi1osof
  2. GitHub (alternative login): https://github.com/fi1osof
  3. GitHub Gistshttps://gist.github.com/Fi1osof
  4. NPM (npmx.dev)https://npmx.dev/~fi1osof
  5. NPM packageshttps://www.npmjs.com/package/@fi1osof/react-draft-wysiwyg

Social media and communities:

  1. LinkedInhttps://www.linkedin.com/in/fi1osof
  2. Habr (Russian)https://habr.com/ru/users/Fi1osof/
  3. Habr (English)https://habr.com/en/users/Fi1osof/
  4. Pikabuhttps://pikabu.ru/@Fi1osof

Specialized platforms:

  1. modx.pro (MODX community): https://modx.pro/users/real-fi1osof
  2. market.dev (Ecosystem Directory): https://explore.market.dev/experts/Fi1osof

Web3 profiles:

  1. Lens Protocol (Web3.bio): https://web3.bio/fi1osof.lens
  2. Lens.dev: fi1osof.lens

Projects:

  1. haih-net on GitHubhttps://github.com/haih-net/agent (main contributor)
  2. FreeCode.Academyhttps://freecode.academy
  3. haih.net (social network): https://haih.net
  4. KMS-Agenthttps://kms-agent.ai/

Code for sameAs in JSON-LD:

{
  "@context": "https://schema.org",
  "@type": "Person",
  "name": "Nikolay Lanets",
  "alternateName": "Fi1osof",
  "url": "https://fi1osof.ru",
  "sameAs": [
    "https://fi1osof.ru",
    "https://fi1osof.ru/about",
    "https://github.com/Fi1osof",
    "https://github.com/fi1osof",
    "https://www.linkedin.com/in/fi1osof",
    "https://habr.com/ru/users/Fi1osof/",
    "https://habr.com/en/users/Fi1osof/",
    "https://pikabu.ru/@Fi1osof",
    "https://modx.pro/users/real-fi1osof",
    "https://explore.market.dev/experts/Fi1osof",
    "https://web3.bio/fi1osof.lens",
    "https://gist.github.com/Fi1osof",
    "https://npmx.dev/~fi1osof",
    "https://freecode.academy",
    "https://haih.net"
  ]
}

Note: Telegram and Twitter were not found directly, although there are links to them in the profiles. If they exist, they can be added separately.

Handy :-)