Task: Develop microdata markup
Develop microdata markup
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 anImageObject.description— a brief description of the entity.
Identification and Disambiguation
sameAs— an official Schema.org property expecting aURL. 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
@idforPerson. - Link the existing
WebSiteto thePersonentity where semantically justified. - Check the markup of author/publication pages and, if possible, link their
authorto the same@id. - Do not duplicate a single person with separate unconnected
Personobjects on different pages. - Form a JSON-LD
@graphif it simplifies connections betweenWebSite,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:
- Personal website/portfolio: https://fi1osof.ru/
- "About" page: https://fi1osof.ru/about
Development and code:
- GitHub (main): https://github.com/Fi1osof
- GitHub (alternative login): https://github.com/fi1osof
- GitHub Gists: https://gist.github.com/Fi1osof
- NPM (npmx.dev): https://npmx.dev/~fi1osof
- NPM packages: https://www.npmjs.com/package/@fi1osof/react-draft-wysiwyg
Social media and communities:
- LinkedIn: https://www.linkedin.com/in/fi1osof
- Habr (Russian): https://habr.com/ru/users/Fi1osof/
- Habr (English): https://habr.com/en/users/Fi1osof/
- Pikabu: https://pikabu.ru/@Fi1osof
Specialized platforms:
- modx.pro (MODX community): https://modx.pro/users/real-fi1osof
- market.dev (Ecosystem Directory): https://explore.market.dev/experts/Fi1osof
Web3 profiles:
- Lens Protocol (Web3.bio): https://web3.bio/fi1osof.lens
- Lens.dev: fi1osof.lens
Projects:
- haih-net on GitHub: https://github.com/haih-net/agent (main contributor)
- FreeCode.Academy: https://freecode.academy
- haih.net (social network): https://haih.net
- KMS-Agent: https://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 :-)