Skip to content

How to Mark Up a Whole Website as One JSON-LD Graph

Musklr logo and headline beside a rendering of the site's JSON-LD entity graph, with labeled nodes joined by edges.

Give every entity one @id and reference it everywhere else, instead of copying. That is how musklr.com marks up 23 pages as one JSON-LD graph: 135 identified entities connected by 229 edges, with the Person node on jan.sviland.org. A validator with 26 rules checks every deploy, because hand-written markup drifts silently. The full graph is drawn below.

A post about structured data may look off topic for a workout app. It is not: the blog is part of how people find Musklr, and much of what reads it now is not a person scrolling results but a machine deciding what to quote. This post is the write-up of making musklr.com readable to those machines, and it demonstrates itself: everything it describes runs on the page you are looking at.

What is JSON-LD structured data on a website?

JSON-LD is a block of JSON inside a script tag that describes what a page is about, in a vocabulary machines share: schema.org. Search engines and assistants read it to learn, without guessing from prose, what a page is, who wrote it and when. Here is the first node every musklr.com page carries:

{
  "@type": "Organization",
  "@id": "https://musklr.com/#org",
  "name": "Musklr",
  "url": "https://musklr.com/",
  "logo": "https://musklr.com/icons/icon-512.png",
  "email": "support@musklr.com",
  "founder": { "@id": "https://jan.sviland.org/#person" }
}

That says: there is an organization called Musklr, with a site, a logo and a support address. Every property states something a visitor can check.

Two older formats, microdata and RDFa, weave the same information through the visible HTML. I chose JSON-LD because it keeps the whole claim in one block: markup that lives inside the layout gets edited by every redesign, while one block can be read by one test.

What do @graph and @id do in JSON-LD?

A page rarely describes one thing. The page you are reading describes an article, its author, its lead image, its breadcrumb trail, its FAQ, and the site all of it belongs to. @graph is simply the array that holds all of those nodes in one script block, and @id gives each node a name: a URL that identifies the entity, unique across the whole web. Here is the author node exactly as every musklr.com page carries it:

{
  "@type": "Person",
  "@id": "https://jan.sviland.org/#person",
  "name": "Jan Sviland",
  "url": "https://jan.sviland.org/"
}

The interesting part is the address. The @id does not live on musklr.com at all. That is allowed, and it is the whole trick behind the next two sections.

Why use @id references instead of copying JSON-LD nodes?

Once a node has an @id, every other node can point at it instead of repeating it. A publisher property containing {"@id": "https://musklr.com/#org"} means "the organization defined over there", nothing more. Across the 23 pages of musklr.com, entities are referenced 344 times this way. Deduplicated, that is 229 distinct edges between 135 entities.

A copy looks just as good as a reference on day one. The difference shows the first time a fact changes. Twenty-three copies of a support address is twenty-three chances to update twenty-two of them. A reference cannot go stale, because the only thing it stores is the name.

How can one JSON-LD graph span two different domains?

The author of everything on musklr.com is me, and my canonical Person node lives on my own site: jan.sviland.org/#person. Musklr's pages do not redefine me. They carry a stub, the four-line node above, and the full definition lives on the page the @id resolves to.

I call it the stub rule, and it exists because the failure without it is quiet: define the same person fully on both sites, let the two definitions drift apart, and a machine eventually sees two people who merely share a name. It runs the other way too: the SoftwareApplication node for Musklr is owned by musklr.com, and my portfolio refers to it by @id instead of describing its own version.

Measured on the shipped pages: the Person is stub-defined 23 times, once per page, and referenced 49 times, which makes it and the Organization the hubs of the whole graph. Remove that one cross-domain @id and the graph falls apart into 23 islands.

Why does hand-written JSON-LD need a validator?

musklr.com is plain HTML, with no build step and no CMS. Every JSON-LD block is written by hand, which means every fact stated twice, once for people and once for machines, is two strings that can disagree. So the deploy script refuses to ship the site until a validator has passed 26 rules over every page: the JSON parses, every @id resolves, the headline matches the h1, the FAQ text appears character for character in the visible page, and so on. Even wordCount and timeRequired are measured by the validator's own extractor, because an estimated number outlives three rewrites. Two of the 26, rules 25 and 26, were built alongside this article and check the diagram below against its own table.

Twenty-six is not ambition. Most of those rules are scar tissue.

How does structured data drift out of sync with a page?

Silently. That is the finding this project keeps repeating: on a site with no build step, anything written twice drifts, and nothing notices. Several of the newest validator rules exist because a specific silent failure had already shipped:

  • Sixteen video figures were live with no markup at all. No error anywhere; extractors simply did not know the videos existed. Now a video figure on a post fails the build if it has no VideoObject node.
  • The graph was quoting review paragraphs the page no longer contained. The prose had been edited; the copies in the markup had not. Now every reviewBody must appear verbatim in the visible page.
  • The sitemap claimed nothing had changed in six weeks, while pages were being edited daily. Now the sitemap lastmod must match each page's dateModified.
  • All twelve visible bylines were six weeks stale against the dates in the markup, and four posts showed no Updated date. Now the byline and the graph must agree.

None of those was a crash. Each was the site quietly telling machines something false while looking fine to every human visitor. That is why I treat hand-maintained structured data as a testing problem, not a documentation problem.

How do you mark up one video that appears on several pages?

As one entity. The clip of Musklr's rest timer shrinking into the stats bar appears on four pages in two languages, but there is only one video, so its @id is the video file's own URL: rest-timer-morph-minimize.mp4 with #video appended. Each of the four pages describes that same entity from its own angle, and a machine merging the four descriptions learns more about one video instead of believing in four. Sitewide the markup defines VideoObject sixteen times; deduplicated by @id, that is six distinct videos across the blog posts.

What does a whole site's JSON-LD graph look like?

Measured off the shipped HTML on 14 August 2026: 23 pages, 135 identified entities of 15 types, 229 distinct edges, and 304 nodes that deliberately carry no @id at all: 86 questions, 86 answers, 66 list items, 40 offers, 12 how-to steps and 14 speakable blocks. A question belongs to its FAQ and a step to its how-to; nothing needs to point at them, and identifying each one would be 304 more names to keep unique for no gain.

Three of those numbers are decisions rather than facts about schema.org:

  • The graph holds exactly two Person entities. One is me, defined on jan.sviland.org and stubbed everywhere else. The other is a real App Store reviewer, registered as his own entity so his words are never confused with mine.
  • All 40 Offer nodes are anonymous. They are five apps' price tiers in two languages, and nothing needs to point at an individual price, so none of them gets an @id.
  • There are 9 Review entities, not 8. Four competitor reviews per language make eight, and the ninth is a real customer testimonial that appears on both homepages under a single @id: one review, described twice. There is no tenth. Validator rule 18 blocks any review of Musklr that I write myself, because a business reviewing itself is not a review.

The diagram below is not an illustration. It draws the graph itself: every identified entity as a labeled node, every reference as an edge. Click a node, or focus it with the keyboard, and its real JSON-LD opens in a panel that pins itself to the bottom of the screen. Check it: view source on this page, search for application/ld+json, and you will find the same markup this section lists. The table below carries every node and edge in plain HTML, collapsed until you open it, so screen readers and extractors get the same data. Anonymous nodes are counted in the text above but not listed: without an @id there is nothing for an edge to point at.

Select a node to see its JSON-LD. Move between nodes with the arrow keys.

Filled nodes are entities defined on this site. Outlined nodes are stubs: short references to entities fully defined on another page or another domain.

Every node and edge in the graph
Entity, type and @id for every node.
Entity Type @id
Jan Sviland Person https://jan.sviland.org/#person
Musklr (#app) SoftwareApplication https://musklr.com/#app
Fitbod SoftwareApplication https://musklr.com/#app-fitbod
Hevy SoftwareApplication https://musklr.com/#app-hevy
Jefit SoftwareApplication https://musklr.com/#app-jefit
Strong SoftwareApplication https://musklr.com/#app-strong
Musklr (#org) Organization https://musklr.com/#org
review-raffi-o Review https://musklr.com/#review-raffi-o
Raffi O Person https://musklr.com/#reviewer-raffi-o
Musklr: Lift Heavy. Log Fast. WebPage https://musklr.com/#webpage
Musklr (#website) WebSite https://musklr.com/#website
breadcrumb BreadcrumbList https://musklr.com/apple-watch/#breadcrumb
Musklr for Apple Watch: Lift Heavy. Glanc… WebPage https://musklr.com/apple-watch/#webpage
Musklr Blog Blog https://musklr.com/blog/#blog
breadcrumb 2 BreadcrumbList https://musklr.com/blog/#breadcrumb
Musklr Blog: Lifting, Apple Watch & Train… WebPage https://musklr.com/blog/#webpage
breadcrumb 3 BreadcrumbList https://musklr.com/blog/2026/compare/best-ios-weight-lifting-app-apple-watch/#breadcrumb
faq FAQPage https://musklr.com/blog/2026/compare/best-ios-weight-lifting-app-apple-watch/#faq
How does Musklr compare with Strong, Hevy… ItemList https://musklr.com/blog/2026/compare/best-ios-weight-lifting-app-apple-watch/#itemlist
leadimage ImageObject https://musklr.com/blog/2026/compare/best-ios-weight-lifting-app-apple-watch/#leadimage
Best iOS Weight Lifting App for iPhone & … BlogPosting https://musklr.com/blog/2026/compare/best-ios-weight-lifting-app-apple-watch/#post
Fitbod: automated programming, no permane… Review https://musklr.com/blog/2026/compare/best-ios-weight-lifting-app-apple-watch/#review-fitbod
Hevy: a 14M+ athlete community and a rout… Review https://musklr.com/blog/2026/compare/best-ios-weight-lifting-app-apple-watch/#review-hevy
Jefit: 1,400+ exercises and expert-built … Review https://musklr.com/blog/2026/compare/best-ios-weight-lifting-app-apple-watch/#review-jefit
Strong: a minimal logger, three routines … Review https://musklr.com/blog/2026/compare/best-ios-weight-lifting-app-apple-watch/#review-strong
Best iOS Weight Lifting App for iPhone & … 2 WebPage https://musklr.com/blog/2026/compare/best-ios-weight-lifting-app-apple-watch/#webpage
breadcrumb 4 BreadcrumbList https://musklr.com/blog/2026/devlog/apple-watch-iphone-workout-sync/#breadcrumb
faq 2 FAQPage https://musklr.com/blog/2026/devlog/apple-watch-iphone-workout-sync/#faq
leadimage 2 ImageObject https://musklr.com/blog/2026/devlog/apple-watch-iphone-workout-sync/#leadimage
How Musklr Keeps Your Apple Watch and iPh… BlogPosting https://musklr.com/blog/2026/devlog/apple-watch-iphone-workout-sync/#post
How Musklr Keeps Your Apple Watch and iPh… 2 WebPage https://musklr.com/blog/2026/devlog/apple-watch-iphone-workout-sync/#webpage
breadcrumb 5 BreadcrumbList https://musklr.com/blog/2026/devlog/dogfooding-how-great-apps-are-made/#breadcrumb
faq 3 FAQPage https://musklr.com/blog/2026/devlog/dogfooding-how-great-apps-are-made/#faq
leadimage 3 ImageObject https://musklr.com/blog/2026/devlog/dogfooding-how-great-apps-are-made/#leadimage
Dogfooding: How Great Apps Are Made BlogPosting https://musklr.com/blog/2026/devlog/dogfooding-how-great-apps-are-made/#post
Dogfooding: How Great Apps Are Made | Mus… WebPage https://musklr.com/blog/2026/devlog/dogfooding-how-great-apps-are-made/#webpage
breadcrumb 6 BreadcrumbList https://musklr.com/blog/2026/devlog/structured-data-json-ld-schema-graph/#breadcrumb
The Organization node every musklr.com pa… SoftwareSourceCode https://musklr.com/blog/2026/devlog/structured-data-json-ld-schema-graph/#code-org
The author node every musklr.com page car… SoftwareSourceCode https://musklr.com/blog/2026/devlog/structured-data-json-ld-schema-graph/#code-person
faq 4 FAQPage https://musklr.com/blog/2026/devlog/structured-data-json-ld-schema-graph/#faq
leadimage 4 ImageObject https://musklr.com/blog/2026/devlog/structured-data-json-ld-schema-graph/#leadimage
How to Mark Up a Whole Website as One JSO… BlogPosting https://musklr.com/blog/2026/devlog/structured-data-json-ld-schema-graph/#post
How to Mark Up a Whole Website as One JSO… 2 WebPage https://musklr.com/blog/2026/devlog/structured-data-json-ld-schema-graph/#webpage
breadcrumb 7 BreadcrumbList https://musklr.com/blog/2026/feature/iphone-lock-screen-workout-tracking-live-activity/#breadcrumb
faq 5 FAQPage https://musklr.com/blog/2026/feature/iphone-lock-screen-workout-tracking-live-activity/#faq
leadimage 5 ImageObject https://musklr.com/blog/2026/feature/iphone-lock-screen-workout-tracking-live-activity/#leadimage
Track your workout from the iPhone Lock S… BlogPosting https://musklr.com/blog/2026/feature/iphone-lock-screen-workout-tracking-live-activity/#post
Workout Live Activity on iPhone: Lock Scr… WebPage https://musklr.com/blog/2026/feature/iphone-lock-screen-workout-tracking-live-activity/#webpage
breadcrumb 8 BreadcrumbList https://musklr.com/blog/2026/tutorial/how-to-build-bar-line-sparkline-radar-charts-with-swift-charts/#breadcrumb
code-bar-trend SoftwareSourceCode https://musklr.com/blog/2026/tutorial/how-to-build-bar-line-sparkline-radar-charts-with-swift-charts/#code-bar-trend
code-radar SoftwareSourceCode https://musklr.com/blog/2026/tutorial/how-to-build-bar-line-sparkline-radar-charts-with-swift-charts/#code-radar
code-sparkline SoftwareSourceCode https://musklr.com/blog/2026/tutorial/how-to-build-bar-line-sparkline-radar-charts-with-swift-charts/#code-sparkline
faq 6 FAQPage https://musklr.com/blog/2026/tutorial/how-to-build-bar-line-sparkline-radar-charts-with-swift-charts/#faq
How do you set up an Xcode playground for… HowTo https://musklr.com/blog/2026/tutorial/how-to-build-bar-line-sparkline-radar-charts-with-swift-charts/#howto
leadimage 6 ImageObject https://musklr.com/blog/2026/tutorial/how-to-build-bar-line-sparkline-radar-charts-with-swift-charts/#leadimage
How to Build Bar, Line, Sparkline and Rad… BlogPosting https://musklr.com/blog/2026/tutorial/how-to-build-bar-line-sparkline-radar-charts-with-swift-charts/#post
How to Build Bar, Line, Sparkline and Rad… 2 WebPage https://musklr.com/blog/2026/tutorial/how-to-build-bar-line-sparkline-radar-charts-with-swift-charts/#webpage
breadcrumb 9 BreadcrumbList https://musklr.com/blog/2026/tutorial/swiftui-matchedgeometryeffect-hero-animation/#breadcrumb
code-both-endpoints SoftwareSourceCode https://musklr.com/blog/2026/tutorial/swiftui-matchedgeometryeffect-hero-animation/#code-both-endpoints
code-naive SoftwareSourceCode https://musklr.com/blog/2026/tutorial/swiftui-matchedgeometryeffect-hero-animation/#code-naive
code-wrapper SoftwareSourceCode https://musklr.com/blog/2026/tutorial/swiftui-matchedgeometryeffect-hero-animation/#code-wrapper
faq 7 FAQPage https://musklr.com/blog/2026/tutorial/swiftui-matchedgeometryeffect-hero-animation/#faq
How do you try a SwiftUI hero animation i… HowTo https://musklr.com/blog/2026/tutorial/swiftui-matchedgeometryeffect-hero-animation/#howto
leadimage 7 ImageObject https://musklr.com/blog/2026/tutorial/swiftui-matchedgeometryeffect-hero-animation/#leadimage
The Ring That Wouldn't Shrink: Building M… BlogPosting https://musklr.com/blog/2026/tutorial/swiftui-matchedgeometryeffect-hero-animation/#post
The Ring That Wouldn't Shrink: SwiftUI ma… WebPage https://musklr.com/blog/2026/tutorial/swiftui-matchedgeometryeffect-hero-animation/#webpage
Musklr: Løft tungt. Logg raskt. WebPage https://musklr.com/no/#webpage
Musklr (#website) 2 WebSite https://musklr.com/no/#website
breadcrumb 10 BreadcrumbList https://musklr.com/no/apple-watch/#breadcrumb
Musklr for Apple Watch: Løft tungt. Kikk.… WebPage https://musklr.com/no/apple-watch/#webpage
Musklr-bloggen Blog https://musklr.com/no/blog/#blog
breadcrumb 11 BreadcrumbList https://musklr.com/no/blog/#breadcrumb
Musklr-bloggen: styrketrening, Apple Watc… WebPage https://musklr.com/no/blog/#webpage
breadcrumb 12 BreadcrumbList https://musklr.com/no/blog/2026/funksjon/trening-pa-last-skjerm-iphone-live-activity/#breadcrumb
faq 8 FAQPage https://musklr.com/no/blog/2026/funksjon/trening-pa-last-skjerm-iphone-live-activity/#faq
leadimage 8 ImageObject https://musklr.com/no/blog/2026/funksjon/trening-pa-last-skjerm-iphone-live-activity/#leadimage
Følg treningen fra låseskjermen på iPhone BlogPosting https://musklr.com/no/blog/2026/funksjon/trening-pa-last-skjerm-iphone-live-activity/#post
Live Activity for trening på iPhone: låse… WebPage https://musklr.com/no/blog/2026/funksjon/trening-pa-last-skjerm-iphone-live-activity/#webpage
breadcrumb 13 BreadcrumbList https://musklr.com/no/blog/2026/guide/slik-bygger-du-soyle-linje-sparkline-og-radargrafer-med-swift-charts/#breadcrumb
code-bar-trend 2 SoftwareSourceCode https://musklr.com/no/blog/2026/guide/slik-bygger-du-soyle-linje-sparkline-og-radargrafer-med-swift-charts/#code-bar-trend
code-radar 2 SoftwareSourceCode https://musklr.com/no/blog/2026/guide/slik-bygger-du-soyle-linje-sparkline-og-radargrafer-med-swift-charts/#code-radar
code-sparkline 2 SoftwareSourceCode https://musklr.com/no/blog/2026/guide/slik-bygger-du-soyle-linje-sparkline-og-radargrafer-med-swift-charts/#code-sparkline
faq 9 FAQPage https://musklr.com/no/blog/2026/guide/slik-bygger-du-soyle-linje-sparkline-og-radargrafer-med-swift-charts/#faq
Hvordan setter du opp en playground i Xco… HowTo https://musklr.com/no/blog/2026/guide/slik-bygger-du-soyle-linje-sparkline-og-radargrafer-med-swift-charts/#howto
leadimage 9 ImageObject https://musklr.com/no/blog/2026/guide/slik-bygger-du-soyle-linje-sparkline-og-radargrafer-med-swift-charts/#leadimage
Slik bygger du søyle-, linje-, sparkline-… BlogPosting https://musklr.com/no/blog/2026/guide/slik-bygger-du-soyle-linje-sparkline-og-radargrafer-med-swift-charts/#post
Slik bygger du søyle-, linje-, sparkline-… 2 WebPage https://musklr.com/no/blog/2026/guide/slik-bygger-du-soyle-linje-sparkline-og-radargrafer-med-swift-charts/#webpage
breadcrumb 14 BreadcrumbList https://musklr.com/no/blog/2026/guide/swiftui-matchedgeometryeffect-hero-animasjon/#breadcrumb
code-both-endpoints 2 SoftwareSourceCode https://musklr.com/no/blog/2026/guide/swiftui-matchedgeometryeffect-hero-animasjon/#code-both-endpoints
code-naive 2 SoftwareSourceCode https://musklr.com/no/blog/2026/guide/swiftui-matchedgeometryeffect-hero-animasjon/#code-naive
code-wrapper 2 SoftwareSourceCode https://musklr.com/no/blog/2026/guide/swiftui-matchedgeometryeffect-hero-animasjon/#code-wrapper
faq 10 FAQPage https://musklr.com/no/blog/2026/guide/swiftui-matchedgeometryeffect-hero-animasjon/#faq
Hvordan prøver du en hero-animasjon i Swi… HowTo https://musklr.com/no/blog/2026/guide/swiftui-matchedgeometryeffect-hero-animasjon/#howto
leadimage 10 ImageObject https://musklr.com/no/blog/2026/guide/swiftui-matchedgeometryeffect-hero-animasjon/#leadimage
Ringen som ikke ville krympe: slik bygde … BlogPosting https://musklr.com/no/blog/2026/guide/swiftui-matchedgeometryeffect-hero-animasjon/#post
Ringen som ikke ville krympe: SwiftUI mat… WebPage https://musklr.com/no/blog/2026/guide/swiftui-matchedgeometryeffect-hero-animasjon/#webpage
breadcrumb 15 BreadcrumbList https://musklr.com/no/blog/2026/sammenlign/beste-ios-app-for-styrketrening-iphone-apple-watch/#breadcrumb
faq 11 FAQPage https://musklr.com/no/blog/2026/sammenlign/beste-ios-app-for-styrketrening-iphone-apple-watch/#faq
Hvordan står Musklr seg mot Strong, Hevy,… ItemList https://musklr.com/no/blog/2026/sammenlign/beste-ios-app-for-styrketrening-iphone-apple-watch/#itemlist
leadimage 11 ImageObject https://musklr.com/no/blog/2026/sammenlign/beste-ios-app-for-styrketrening-iphone-apple-watch/#leadimage
Beste iOS-app for styrketrening på iPhone… BlogPosting https://musklr.com/no/blog/2026/sammenlign/beste-ios-app-for-styrketrening-iphone-apple-watch/#post
Fitbod: automatisk programmering, uten pe… Review https://musklr.com/no/blog/2026/sammenlign/beste-ios-app-for-styrketrening-iphone-apple-watch/#review-fitbod
Hevy: et fellesskap på 14 mill.+ utøvere … Review https://musklr.com/no/blog/2026/sammenlign/beste-ios-app-for-styrketrening-iphone-apple-watch/#review-hevy
Jefit: 1 400+ øvelser og ekspertbygde pla… Review https://musklr.com/no/blog/2026/sammenlign/beste-ios-app-for-styrketrening-iphone-apple-watch/#review-jefit
Strong: en minimalistisk logg, tre rutine… Review https://musklr.com/no/blog/2026/sammenlign/beste-ios-app-for-styrketrening-iphone-apple-watch/#review-strong
Beste iOS-app for styrketrening på iPhone… 2 WebPage https://musklr.com/no/blog/2026/sammenlign/beste-ios-app-for-styrketrening-iphone-apple-watch/#webpage
breadcrumb 16 BreadcrumbList https://musklr.com/no/blog/2026/utviklingslogg/apple-watch-iphone-treningssynkronisering/#breadcrumb
faq 12 FAQPage https://musklr.com/no/blog/2026/utviklingslogg/apple-watch-iphone-treningssynkronisering/#faq
leadimage 12 ImageObject https://musklr.com/no/blog/2026/utviklingslogg/apple-watch-iphone-treningssynkronisering/#leadimage
Slik holder Musklr Apple Watch og iPhone … BlogPosting https://musklr.com/no/blog/2026/utviklingslogg/apple-watch-iphone-treningssynkronisering/#post
Slik holder Musklr Apple Watch og iPhone … 2 WebPage https://musklr.com/no/blog/2026/utviklingslogg/apple-watch-iphone-treningssynkronisering/#webpage
breadcrumb 17 BreadcrumbList https://musklr.com/no/blog/2026/utviklingslogg/dogfooding-slik-blir-gode-apper-til/#breadcrumb
faq 13 FAQPage https://musklr.com/no/blog/2026/utviklingslogg/dogfooding-slik-blir-gode-apper-til/#faq
leadimage 13 ImageObject https://musklr.com/no/blog/2026/utviklingslogg/dogfooding-slik-blir-gode-apper-til/#leadimage
Dogfooding: slik blir gode apper til BlogPosting https://musklr.com/no/blog/2026/utviklingslogg/dogfooding-slik-blir-gode-apper-til/#post
Dogfooding: slik blir gode apper til | Mu… WebPage https://musklr.com/no/blog/2026/utviklingslogg/dogfooding-slik-blir-gode-apper-til/#webpage
breadcrumb 18 BreadcrumbList https://musklr.com/no/blog/2026/utviklingslogg/strukturerte-data-json-ld-og-schema-grafen/#breadcrumb
Organization-noden hver side på musklr.co… SoftwareSourceCode https://musklr.com/no/blog/2026/utviklingslogg/strukturerte-data-json-ld-og-schema-grafen/#code-org
Forfatternoden hver side på musklr.com bæ… SoftwareSourceCode https://musklr.com/no/blog/2026/utviklingslogg/strukturerte-data-json-ld-og-schema-grafen/#code-person
faq 14 FAQPage https://musklr.com/no/blog/2026/utviklingslogg/strukturerte-data-json-ld-og-schema-grafen/#faq
leadimage 14 ImageObject https://musklr.com/no/blog/2026/utviklingslogg/strukturerte-data-json-ld-og-schema-grafen/#leadimage
Slik bygger du én JSON-LD-graf for hele n… BlogPosting https://musklr.com/no/blog/2026/utviklingslogg/strukturerte-data-json-ld-og-schema-grafen/#post
Slik bygger du én JSON-LD-graf for hele n… 2 WebPage https://musklr.com/no/blog/2026/utviklingslogg/strukturerte-data-json-ld-og-schema-grafen/#webpage
breadcrumb 19 BreadcrumbList https://musklr.com/privacy.html#breadcrumb
Musklr: App Privacy Policy WebPage https://musklr.com/privacy.html#webpage
breadcrumb 20 BreadcrumbList https://musklr.com/support.html#breadcrumb
Musklr: Support WebPage https://musklr.com/support.html#webpage
breadcrumb 21 BreadcrumbList https://musklr.com/terms.html#breadcrumb
Musklr: Terms of Use WebPage https://musklr.com/terms.html#webpage
Logging a leg press from the wrist in Mus… VideoObject https://musklr.com/video/apple-watch-workout-sync.mp4#video
Logging a set. This is the screen I look … VideoObject https://musklr.com/video/log-set-demo.mp4#video
A new record, the moment it lands. VideoObject https://musklr.com/video/pr-demo.mp4#video
The reverse direction: tap the mini timer… VideoObject https://musklr.com/video/rest-timer-morph-expand.mp4#video
How it works now. Tap away and the ring f… VideoObject https://musklr.com/video/rest-timer-morph-minimize.mp4#video
The naive version running. Watch the ring… VideoObject https://musklr.com/video/rest-timer-playground-slide-bug.mp4#video
Which node points at which, and through which property.
From Property To
Musklr (#app) author Jan Sviland
Musklr (#app) publisher Musklr (#org)
Musklr (#org) founder Jan Sviland
review-raffi-o author Raffi O
review-raffi-o itemReviewed Musklr (#app)
Musklr: Lift Heavy. Log Fast. isPartOf Musklr (#website)
Musklr (#website) publisher Musklr (#org)
Musklr for Apple Watch: Lift Heavy. Glanc… breadcrumb breadcrumb
Musklr for Apple Watch: Lift Heavy. Glanc… isPartOf Musklr (#website)
Musklr Blog isPartOf Musklr (#website)
Musklr Blog publisher Musklr (#org)
Musklr Blog: Lifting, Apple Watch & Train… breadcrumb breadcrumb 2
Musklr Blog: Lifting, Apple Watch & Train… isPartOf Musklr (#website)
Best iOS Weight Lifting App for iPhone & … about Musklr (#app)
Best iOS Weight Lifting App for iPhone & … author Jan Sviland
Best iOS Weight Lifting App for iPhone & … image leadimage
Best iOS Weight Lifting App for iPhone & … isPartOf Musklr Blog
Best iOS Weight Lifting App for iPhone & … mainEntityOfPage Best iOS Weight Lifting App for iPhone & … 2
Best iOS Weight Lifting App for iPhone & … mentions Fitbod
Best iOS Weight Lifting App for iPhone & … mentions Hevy
Best iOS Weight Lifting App for iPhone & … mentions Jefit
Best iOS Weight Lifting App for iPhone & … mentions Strong
Best iOS Weight Lifting App for iPhone & … publisher Musklr (#org)
Fitbod: automated programming, no permane… author Jan Sviland
Fitbod: automated programming, no permane… isPartOf Best iOS Weight Lifting App for iPhone & … 2
Fitbod: automated programming, no permane… itemReviewed Fitbod
Hevy: a 14M+ athlete community and a rout… author Jan Sviland
Hevy: a 14M+ athlete community and a rout… isPartOf Best iOS Weight Lifting App for iPhone & … 2
Hevy: a 14M+ athlete community and a rout… itemReviewed Hevy
Jefit: 1,400+ exercises and expert-built … author Jan Sviland
Jefit: 1,400+ exercises and expert-built … isPartOf Best iOS Weight Lifting App for iPhone & … 2
Jefit: 1,400+ exercises and expert-built … itemReviewed Jefit
Strong: a minimal logger, three routines … author Jan Sviland
Strong: a minimal logger, three routines … isPartOf Best iOS Weight Lifting App for iPhone & … 2
Strong: a minimal logger, three routines … itemReviewed Strong
Best iOS Weight Lifting App for iPhone & … 2 breadcrumb breadcrumb 3
Best iOS Weight Lifting App for iPhone & … 2 isPartOf Musklr (#website)
Best iOS Weight Lifting App for iPhone & … 2 primaryImageOfPage leadimage
How Musklr Keeps Your Apple Watch and iPh… about Musklr (#app)
How Musklr Keeps Your Apple Watch and iPh… author Jan Sviland
How Musklr Keeps Your Apple Watch and iPh… image leadimage 2
How Musklr Keeps Your Apple Watch and iPh… isPartOf Musklr Blog
How Musklr Keeps Your Apple Watch and iPh… mainEntityOfPage How Musklr Keeps Your Apple Watch and iPh… 2
How Musklr Keeps Your Apple Watch and iPh… publisher Musklr (#org)
How Musklr Keeps Your Apple Watch and iPh… 2 breadcrumb breadcrumb 4
How Musklr Keeps Your Apple Watch and iPh… 2 isPartOf Musklr (#website)
How Musklr Keeps Your Apple Watch and iPh… 2 primaryImageOfPage leadimage 2
Dogfooding: How Great Apps Are Made about Musklr (#app)
Dogfooding: How Great Apps Are Made author Jan Sviland
Dogfooding: How Great Apps Are Made image leadimage 3
Dogfooding: How Great Apps Are Made isPartOf Musklr Blog
Dogfooding: How Great Apps Are Made mainEntityOfPage Dogfooding: How Great Apps Are Made | Mus…
Dogfooding: How Great Apps Are Made publisher Musklr (#org)
Dogfooding: How Great Apps Are Made | Mus… breadcrumb breadcrumb 5
Dogfooding: How Great Apps Are Made | Mus… isPartOf Musklr (#website)
Dogfooding: How Great Apps Are Made | Mus… primaryImageOfPage leadimage 3
The Organization node every musklr.com pa… isPartOf How to Mark Up a Whole Website as One JSO… 2
The author node every musklr.com page car… isPartOf How to Mark Up a Whole Website as One JSO… 2
How to Mark Up a Whole Website as One JSO… about Musklr (#website)
How to Mark Up a Whole Website as One JSO… author Jan Sviland
How to Mark Up a Whole Website as One JSO… hasPart The Organization node every musklr.com pa…
How to Mark Up a Whole Website as One JSO… hasPart The author node every musklr.com page car…
How to Mark Up a Whole Website as One JSO… image leadimage 4
How to Mark Up a Whole Website as One JSO… isPartOf Musklr Blog
How to Mark Up a Whole Website as One JSO… mainEntityOfPage How to Mark Up a Whole Website as One JSO… 2
How to Mark Up a Whole Website as One JSO… mentions Musklr (#app)
How to Mark Up a Whole Website as One JSO… mentions Musklr (#org)
How to Mark Up a Whole Website as One JSO… publisher Musklr (#org)
How to Mark Up a Whole Website as One JSO… 2 breadcrumb breadcrumb 6
How to Mark Up a Whole Website as One JSO… 2 isPartOf Musklr (#website)
How to Mark Up a Whole Website as One JSO… 2 primaryImageOfPage leadimage 4
Track your workout from the iPhone Lock S… about Musklr (#app)
Track your workout from the iPhone Lock S… author Jan Sviland
Track your workout from the iPhone Lock S… image leadimage 5
Track your workout from the iPhone Lock S… isPartOf Musklr Blog
Track your workout from the iPhone Lock S… mainEntityOfPage Workout Live Activity on iPhone: Lock Scr…
Track your workout from the iPhone Lock S… publisher Musklr (#org)
Workout Live Activity on iPhone: Lock Scr… breadcrumb breadcrumb 7
Workout Live Activity on iPhone: Lock Scr… isPartOf Musklr (#website)
Workout Live Activity on iPhone: Lock Scr… primaryImageOfPage leadimage 5
code-bar-trend isPartOf How to Build Bar, Line, Sparkline and Rad… 2
code-radar isPartOf How to Build Bar, Line, Sparkline and Rad… 2
code-sparkline isPartOf How to Build Bar, Line, Sparkline and Rad… 2
How do you set up an Xcode playground for… isPartOf How to Build Bar, Line, Sparkline and Rad… 2
How to Build Bar, Line, Sparkline and Rad… author Jan Sviland
How to Build Bar, Line, Sparkline and Rad… image leadimage 6
How to Build Bar, Line, Sparkline and Rad… isPartOf Musklr Blog
How to Build Bar, Line, Sparkline and Rad… mainEntityOfPage How to Build Bar, Line, Sparkline and Rad… 2
How to Build Bar, Line, Sparkline and Rad… mentions Musklr (#app)
How to Build Bar, Line, Sparkline and Rad… publisher Musklr (#org)
How to Build Bar, Line, Sparkline and Rad… 2 breadcrumb breadcrumb 8
How to Build Bar, Line, Sparkline and Rad… 2 isPartOf Musklr (#website)
How to Build Bar, Line, Sparkline and Rad… 2 primaryImageOfPage leadimage 6
code-both-endpoints isPartOf The Ring That Wouldn't Shrink: SwiftUI ma…
code-naive isPartOf The Ring That Wouldn't Shrink: SwiftUI ma…
code-wrapper isPartOf The Ring That Wouldn't Shrink: SwiftUI ma…
How do you try a SwiftUI hero animation i… isPartOf The Ring That Wouldn't Shrink: SwiftUI ma…
The Ring That Wouldn't Shrink: Building M… author Jan Sviland
The Ring That Wouldn't Shrink: Building M… image leadimage 7
The Ring That Wouldn't Shrink: Building M… isPartOf Musklr Blog
The Ring That Wouldn't Shrink: Building M… mainEntityOfPage The Ring That Wouldn't Shrink: SwiftUI ma…
The Ring That Wouldn't Shrink: Building M… mentions Musklr (#app)
The Ring That Wouldn't Shrink: Building M… publisher Musklr (#org)
The Ring That Wouldn't Shrink: SwiftUI ma… breadcrumb breadcrumb 9
The Ring That Wouldn't Shrink: SwiftUI ma… isPartOf Musklr (#website)
The Ring That Wouldn't Shrink: SwiftUI ma… primaryImageOfPage leadimage 7
Musklr: Løft tungt. Logg raskt. isPartOf Musklr (#website) 2
Musklr (#website) 2 publisher Musklr (#org)
Musklr for Apple Watch: Løft tungt. Kikk.… breadcrumb breadcrumb 10
Musklr for Apple Watch: Løft tungt. Kikk.… isPartOf Musklr (#website) 2
Musklr-bloggen isPartOf Musklr (#website) 2
Musklr-bloggen publisher Musklr (#org)
Musklr-bloggen: styrketrening, Apple Watc… breadcrumb breadcrumb 11
Musklr-bloggen: styrketrening, Apple Watc… isPartOf Musklr (#website) 2
Følg treningen fra låseskjermen på iPhone about Musklr (#app)
Følg treningen fra låseskjermen på iPhone author Jan Sviland
Følg treningen fra låseskjermen på iPhone image leadimage 8
Følg treningen fra låseskjermen på iPhone isPartOf Musklr-bloggen
Følg treningen fra låseskjermen på iPhone mainEntityOfPage Live Activity for trening på iPhone: låse…
Følg treningen fra låseskjermen på iPhone publisher Musklr (#org)
Live Activity for trening på iPhone: låse… breadcrumb breadcrumb 12
Live Activity for trening på iPhone: låse… isPartOf Musklr (#website) 2
Live Activity for trening på iPhone: låse… primaryImageOfPage leadimage 8
code-bar-trend 2 isPartOf Slik bygger du søyle-, linje-, sparkline-… 2
code-radar 2 isPartOf Slik bygger du søyle-, linje-, sparkline-… 2
code-sparkline 2 isPartOf Slik bygger du søyle-, linje-, sparkline-… 2
Hvordan setter du opp en playground i Xco… isPartOf Slik bygger du søyle-, linje-, sparkline-… 2
Slik bygger du søyle-, linje-, sparkline-… author Jan Sviland
Slik bygger du søyle-, linje-, sparkline-… image leadimage 9
Slik bygger du søyle-, linje-, sparkline-… isPartOf Musklr-bloggen
Slik bygger du søyle-, linje-, sparkline-… mainEntityOfPage Slik bygger du søyle-, linje-, sparkline-… 2
Slik bygger du søyle-, linje-, sparkline-… mentions Musklr (#app)
Slik bygger du søyle-, linje-, sparkline-… publisher Musklr (#org)
Slik bygger du søyle-, linje-, sparkline-… 2 breadcrumb breadcrumb 13
Slik bygger du søyle-, linje-, sparkline-… 2 isPartOf Musklr (#website) 2
Slik bygger du søyle-, linje-, sparkline-… 2 primaryImageOfPage leadimage 9
code-both-endpoints 2 isPartOf Ringen som ikke ville krympe: SwiftUI mat…
code-naive 2 isPartOf Ringen som ikke ville krympe: SwiftUI mat…
code-wrapper 2 isPartOf Ringen som ikke ville krympe: SwiftUI mat…
Hvordan prøver du en hero-animasjon i Swi… isPartOf Ringen som ikke ville krympe: SwiftUI mat…
Ringen som ikke ville krympe: slik bygde … author Jan Sviland
Ringen som ikke ville krympe: slik bygde … image leadimage 10
Ringen som ikke ville krympe: slik bygde … isPartOf Musklr-bloggen
Ringen som ikke ville krympe: slik bygde … mainEntityOfPage Ringen som ikke ville krympe: SwiftUI mat…
Ringen som ikke ville krympe: slik bygde … mentions Musklr (#app)
Ringen som ikke ville krympe: slik bygde … publisher Musklr (#org)
Ringen som ikke ville krympe: SwiftUI mat… breadcrumb breadcrumb 14
Ringen som ikke ville krympe: SwiftUI mat… isPartOf Musklr (#website) 2
Ringen som ikke ville krympe: SwiftUI mat… primaryImageOfPage leadimage 10
Beste iOS-app for styrketrening på iPhone… about Musklr (#app)
Beste iOS-app for styrketrening på iPhone… author Jan Sviland
Beste iOS-app for styrketrening på iPhone… image leadimage 11
Beste iOS-app for styrketrening på iPhone… isPartOf Musklr-bloggen
Beste iOS-app for styrketrening på iPhone… mainEntityOfPage Beste iOS-app for styrketrening på iPhone… 2
Beste iOS-app for styrketrening på iPhone… mentions Fitbod
Beste iOS-app for styrketrening på iPhone… mentions Hevy
Beste iOS-app for styrketrening på iPhone… mentions Jefit
Beste iOS-app for styrketrening på iPhone… mentions Strong
Beste iOS-app for styrketrening på iPhone… publisher Musklr (#org)
Fitbod: automatisk programmering, uten pe… author Jan Sviland
Fitbod: automatisk programmering, uten pe… isPartOf Beste iOS-app for styrketrening på iPhone… 2
Fitbod: automatisk programmering, uten pe… itemReviewed Fitbod
Hevy: et fellesskap på 14 mill.+ utøvere … author Jan Sviland
Hevy: et fellesskap på 14 mill.+ utøvere … isPartOf Beste iOS-app for styrketrening på iPhone… 2
Hevy: et fellesskap på 14 mill.+ utøvere … itemReviewed Hevy
Jefit: 1 400+ øvelser og ekspertbygde pla… author Jan Sviland
Jefit: 1 400+ øvelser og ekspertbygde pla… isPartOf Beste iOS-app for styrketrening på iPhone… 2
Jefit: 1 400+ øvelser og ekspertbygde pla… itemReviewed Jefit
Strong: en minimalistisk logg, tre rutine… author Jan Sviland
Strong: en minimalistisk logg, tre rutine… isPartOf Beste iOS-app for styrketrening på iPhone… 2
Strong: en minimalistisk logg, tre rutine… itemReviewed Strong
Beste iOS-app for styrketrening på iPhone… 2 breadcrumb breadcrumb 15
Beste iOS-app for styrketrening på iPhone… 2 isPartOf Musklr (#website) 2
Beste iOS-app for styrketrening på iPhone… 2 primaryImageOfPage leadimage 11
Slik holder Musklr Apple Watch og iPhone … about Musklr (#app)
Slik holder Musklr Apple Watch og iPhone … author Jan Sviland
Slik holder Musklr Apple Watch og iPhone … image leadimage 12
Slik holder Musklr Apple Watch og iPhone … isPartOf Musklr-bloggen
Slik holder Musklr Apple Watch og iPhone … mainEntityOfPage Slik holder Musklr Apple Watch og iPhone … 2
Slik holder Musklr Apple Watch og iPhone … publisher Musklr (#org)
Slik holder Musklr Apple Watch og iPhone … 2 breadcrumb breadcrumb 16
Slik holder Musklr Apple Watch og iPhone … 2 isPartOf Musklr (#website) 2
Slik holder Musklr Apple Watch og iPhone … 2 primaryImageOfPage leadimage 12
Dogfooding: slik blir gode apper til about Musklr (#app)
Dogfooding: slik blir gode apper til author Jan Sviland
Dogfooding: slik blir gode apper til image leadimage 13
Dogfooding: slik blir gode apper til isPartOf Musklr-bloggen
Dogfooding: slik blir gode apper til mainEntityOfPage Dogfooding: slik blir gode apper til | Mu…
Dogfooding: slik blir gode apper til publisher Musklr (#org)
Dogfooding: slik blir gode apper til | Mu… breadcrumb breadcrumb 17
Dogfooding: slik blir gode apper til | Mu… isPartOf Musklr (#website) 2
Dogfooding: slik blir gode apper til | Mu… primaryImageOfPage leadimage 13
Organization-noden hver side på musklr.co… isPartOf Slik bygger du én JSON-LD-graf for hele n… 2
Forfatternoden hver side på musklr.com bæ… isPartOf Slik bygger du én JSON-LD-graf for hele n… 2
Slik bygger du én JSON-LD-graf for hele n… about Musklr (#website) 2
Slik bygger du én JSON-LD-graf for hele n… author Jan Sviland
Slik bygger du én JSON-LD-graf for hele n… hasPart Organization-noden hver side på musklr.co…
Slik bygger du én JSON-LD-graf for hele n… hasPart Forfatternoden hver side på musklr.com bæ…
Slik bygger du én JSON-LD-graf for hele n… image leadimage 14
Slik bygger du én JSON-LD-graf for hele n… isPartOf Musklr-bloggen
Slik bygger du én JSON-LD-graf for hele n… mainEntityOfPage Slik bygger du én JSON-LD-graf for hele n… 2
Slik bygger du én JSON-LD-graf for hele n… mentions Musklr (#app)
Slik bygger du én JSON-LD-graf for hele n… mentions Musklr (#org)
Slik bygger du én JSON-LD-graf for hele n… publisher Musklr (#org)
Slik bygger du én JSON-LD-graf for hele n… 2 breadcrumb breadcrumb 18
Slik bygger du én JSON-LD-graf for hele n… 2 isPartOf Musklr (#website) 2
Slik bygger du én JSON-LD-graf for hele n… 2 primaryImageOfPage leadimage 14
Musklr: App Privacy Policy breadcrumb breadcrumb 19
Musklr: App Privacy Policy isPartOf Musklr (#website)
Musklr: Support breadcrumb breadcrumb 20
Musklr: Support isPartOf Musklr (#website)
Musklr: Terms of Use breadcrumb breadcrumb 21
Musklr: Terms of Use isPartOf Musklr (#website)
Logging a leg press from the wrist in Mus… isPartOf How Musklr Keeps Your Apple Watch and iPh… 2
Logging a leg press from the wrist in Mus… isPartOf Dogfooding: How Great Apps Are Made | Mus…
Logging a leg press from the wrist in Mus… isPartOf Slik holder Musklr Apple Watch og iPhone … 2
Logging a leg press from the wrist in Mus… isPartOf Dogfooding: slik blir gode apper til | Mu…
Logging a set. This is the screen I look … isPartOf Dogfooding: How Great Apps Are Made | Mus…
Logging a set. This is the screen I look … isPartOf Dogfooding: slik blir gode apper til | Mu…
A new record, the moment it lands. isPartOf Dogfooding: How Great Apps Are Made | Mus…
A new record, the moment it lands. isPartOf Dogfooding: slik blir gode apper til | Mu…
The reverse direction: tap the mini timer… isPartOf The Ring That Wouldn't Shrink: SwiftUI ma…
The reverse direction: tap the mini timer… isPartOf Ringen som ikke ville krympe: SwiftUI mat…
How it works now. Tap away and the ring f… isPartOf Dogfooding: How Great Apps Are Made | Mus…
How it works now. Tap away and the ring f… isPartOf The Ring That Wouldn't Shrink: SwiftUI ma…
How it works now. Tap away and the ring f… isPartOf Ringen som ikke ville krympe: SwiftUI mat…
How it works now. Tap away and the ring f… isPartOf Dogfooding: slik blir gode apper til | Mu…
The naive version running. Watch the ring… isPartOf The Ring That Wouldn't Shrink: SwiftUI ma…
The naive version running. Watch the ring… isPartOf Ringen som ikke ville krympe: SwiftUI mat…

Does structured data improve search rankings or AI answers?

I do not know, and this post would be dishonest to imply otherwise. Nothing here is measured. Musklr does not ask new users how they found the app, so no number connects any of this work to a download. Teams that survey their signups can make that connection; Musklr has no such survey.

What I can say is narrower. The claims in the markup are true, they are checked on every deploy, and they are cheap to keep true now that the rules exist. If a machine answers a question about workout apps next year, musklr.com is at least readable to it. Whether that turns into downloads, the site cannot say today, and saying so plainly beats implying it can.

Frequently asked questions

Does FAQ schema still get rich results in Google?

For most sites, no. Google restricted FAQ rich results to well-known government and health sites in 2023, so a fitness blog gets no expandable questions on the results page. The markup stays useful anyway: assistants and other extractors read FAQPage nodes, and the visible answers still serve readers.

Can a JSON-LD @id point at another domain?

Yes. An @id is an identifier in the form of a URL, and nothing requires it to sit on the page's own domain. Every page on musklr.com names its author as jan.sviland.org/#person, an address on a different site, and that single cross-domain reference is what joins the two sites into one graph.

Does Google read llms.txt?

No. Google has said its search crawlers do not use llms.txt, and none of the large AI providers has confirmed reading it either. musklr.com ships one anyway: it costs almost nothing to maintain and describes the site in plain text for whichever crawler decides to look.

Is JSON-LD better than microdata for structured data?

For maintenance, yes. Microdata weaves the markup through the visible HTML, so restructuring a page can change what a machine reads without anyone noticing. JSON-LD sits in one script block, separate from the layout, and Google recommends it as the preferred format. One block is also far easier to test.

How do you validate JSON-LD structured data?

Google's Rich Results Test and the Schema.org validator check syntax and rich-result eligibility. Neither can know what is true about your site, so musklr.com also runs its own validator with 26 rules on every deploy. It checks, among other things, that the FAQ text exists on the page, that every @id points at something real, and that word counts are measured rather than guessed.

Try the app behind the graph

Musklr is the reason this site exists: a free workout log for iPhone and Apple Watch, with two-tap logging, a live muscle heatmap, and no ads on any tier. If the graph is what brought you, the app is what it points at.

Download Musklr on the App Store

See everything Musklr does on the home page →

Share this post