Dev.to WebDev ๐Ÿ›  Dev ๐Ÿ‘ 0 ๐Ÿ“– 4 min read

The App Layer of Our JSON-LD: 30 WebApplication Nodes, 8 Categories, and 115 Feature Strings in Two Grammars

I work on OnePassApps, so this is our own site's own structured data. Every number below was measured on app.onepassapps.com with plain HTTPS requests from one server - no browser session, no cookies, no JavaScript - on

I work on OnePassApps, so this is our own site's own structured data. Every number below was measured on app.onepassapps.com with plain HTTPS requests from one server - no browser session, no cookies, no JavaScript - on 9 November 2026.

We have already written about the identifiers in our JSON-LD. This post is about the other half of those nodes: the fields that say what each app IS.

What I measured

  • The 56 URLs in our sitemap.xml
  • One plain GET each
  • The one application/ld+json block on each page, parsed as JSON, then every node in its graph

56 blocks, 0 parse errors, 255 nodes in total. Seven node types: Organization on 56 pages, WebSite on 56, WebPage on 54, BreadcrumbList on 55, WebApplication on 30, ItemList on 3 and CollectionPage on 1.

Thirty app nodes, on thirty pages

WebApplication is the type that describes a tool. It appears on 30 of the 56 pages - the home page, the 22 app pages and the 7 studio pages - exactly one node on each.

The other 26 pages carry none: the 23 guide pages, plus /voting, /plans and /terms.

Every one of the 30 nodes carries the same nine fields: type, id, name, url, description, applicationCategory, operatingSystem, browserRequirements and publisher.

Three fields that never vary

Three of those nine are a single value across all 30 nodes:

  • operatingSystem is "Web" on every one
  • browserRequirements is "Requires a modern web browser" on every one
  • publisher points at the same organization node on every one

The other three that carry text - name, url and description - are 30 distinct values each, across 30 nodes.

Eight categories, and four of them hold one app

applicationCategory takes 8 distinct values across the 30 nodes:

applicationCategory nodes
UtilitiesApplication 17
MultimediaApplication 4
BusinessApplication 3
DesignApplication 2
ReferenceApplication 1
EntertainmentApplication 1
EducationalApplication 1
SecurityApplication 1

Four of those eight are a category of one: NewsFlow is the only ReferenceApplication, MovieMatcherAI the only EntertainmentApplication, the Citation Formatter the only EducationalApplication and the Password Generator the only SecurityApplication.

Twenty-three subcategories, and seven that share one string

applicationSubCategory is on 29 of the 30 nodes and takes 23 distinct strings.

The seven studios all carry the same one, "Browser-local Studio". The 16 nodes that end in "Local utility" are the browser-local tools. The rest name their own trade: "Writing / Documents / Careers" for the CV Builder, "News / Briefs / Audio" for NewsFlow, "Personal / Media / Discovery" for MovieMatcherAI, "Writing / Research / Documents" for the Citation Formatter, "Writing / Work / Utility" for the Email Signature Builder and "Personal / Media / Planning" for the Screen & Cinema Planner.

The one node of the 30 with no applicationSubCategory at all is the home page's own node - the product as a whole rather than any single tool.

115 feature strings, in two grammars

featureList is on 29 nodes - every node except that home page one - and all 29 lists are different. They hold 115 strings in total.

They split cleanly into two grammars, and the split follows the studio/app line exactly:

  • The 7 studio lists are all short labels. Not one of their 49 strings is longer than 40 characters. The Image Studio's list is 7 words long: Convert, Compress, Resize, Crop, Remove background, Remove metadata, Images to PDF.
  • The 22 app lists are all sentences. Every one of their 66 strings is longer than 40 characters, and the shortest complete sentence runs to 49. NewsFlow's reads "Read concise briefs with source attribution and a route back to the original publication.", "Listen to the selected story, pause playback, and collect items in a listening queue." and "After signing in, manage the supported source catalogue; available brief and audio controls follow each sourceโ€™s permissions."

Not a single list mixes the two. There is no node with one short label and one sentence.

The longest string in the whole set is 136 characters: "Make passwords of 8 to 128 characters with lower-case, upper-case, digit and symbol options, and optionally avoid look-alike characters.". The shortest is 4 characters: "Crop". The largest list is the Data Studio's, 11 items - CSV viewer, Sort / filter, Columns, Remove duplicates, Merge CSV, Split CSV, CSV to JSON, JSON formatter, JSON validator, JSON to CSV, JSON and YAML. The smallest lists have three items each: the Ambient Noise Mixer, the Browser Teleprompter, the CV Builder and the Calendar Maker.

Sixteen properties we do not publish

There are properties a WebApplication node can carry that ours never do. Across all 255 nodes, 16 of them never appear:

offers, screenshot, aggregateRating, softwareVersion, author, isAccessibleForFree, downloadUrl, installUrl, mainEntityOfPage, datePublished, review, softwareRequirements, permissions, potentialAction, applicationSize, memoryRequirements.

So there is no price in our structured data, no screenshot, no rating, no version number and no author, even for the hosted apps that have all of those things in the product.

What I did not measure

This is one server in one region, so it describes one vantage point on one day. I did not run a schema validator, I did not see how any search engine renders these graphs, and I did not check whether the fields we publish help or hurt. I did not compare the JSON-LD with the visible page. I changed nothing on the site.

If you want to look for yourself, start with the home page and read the application/ld+json block in the page source, then read the same block on one app page and one guide page and compare the three.

Our home page: https://app.onepassapps.com/?utm_source=devto&utm_medium=community&utm_campaign=jsonld-webapp-layer&utm_content=home-link

Our app guides: https://app.onepassapps.com/guides?utm_source=devto&utm_medium=community&utm_campaign=jsonld-webapp-layer&utm_content=guides-link

The identity half of these same graphs - which nodes carry an identifier, which ones carry none - is in our earlier post: https://dev.to/onepassapps/the-identity-layer-of-our-json-ld-54-distinct-ids-91-nodes-without-one-and-22-guide-pages-that-149m

๐Ÿ“ฐ Read the original article on Dev.to WebDev

Originally published by Dev.to WebDev. Aggregated on AIWithGhost for educational purposes โ€” full credit and traffic to the original publisher.