How to Mark Up a Whole Website as One JSON-LD Graph
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
VideoObjectnode. -
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
reviewBodymust appear verbatim in the visible page. -
The sitemap claimed nothing had changed in six weeks, while
pages were being edited daily. Now the sitemap
lastmodmust match each page'sdateModified. - 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 | @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
|
| 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.