Skip to content

Site and README: structured data listings, a task page for opening .md files, badges - #38

Merged
abooodbah merged 6 commits into
mainfrom
seo-2026-11
Nov 8, 2026
Merged

abooodbah merged 6 commits into
mainfrom
seo-2026-11

Conversation

@abooodbah

Copy link
Copy Markdown
Owner

This follows the LeanMark findings and the site and README checklists in the 2026-11-07 discoverability report (sections 3.2, 4.1 and 4.2). The October changes (titles, descriptions, FAQ, sitemap, social preview) are kept as they are.

What changed and why

Change Report item
JSON-LD: codeRepository removed; sameAs lists the GitHub repo, the Microsoft Store listing (9MSS4WKJ22ZV), the winget-pkgs manifest folder, the Chocolatey package and the Homebrew tap; screenshot is the product screenshot the page shows; image is the social preview; the author gets url (the Lean Apps page). softwareVersion stays 0.7.1, which matches package.json and the latest release. No rating or review. 3.2 row 1, S3
<link rel="alternate" type="application/atom+xml"> to the GitHub releases feed in the page head (both pages). 3.2 row 3, S6
Install section: the Scoop and Homebrew commands were missing on the site (the FAQ already said LeanMark is on both, and the README has both). Same commands as the README. S1
New page site/open-md-files-on-windows/: how to open .md files on Windows with Notepad, VS Code, a browser extension or LeanMark, with what each one leaves out; a section on Markdown saved by ChatGPT, Claude or a coding agent; how to set the default app; the 0.3.0 Windows measurement with its machine. The FAQ answer "How do I open an .md file on Windows?" links it. Plain HTML with the site stylesheet, no build change. 3.2 row 8, S5
sitemap.xml lists both pages with lastmod 2026-11-07, the date of this change. S4
README: one badge line (winget version, Microsoft Store, license, total GitHub release downloads; no stars or ratings badge) and a link to the releases feed in the GitHub Releases section. The keyword-first H1 and second line were already in place and all install lines (winget, Store, Scoop, Chocolatey, Homebrew, GitHub Releases) were present and current, so they are unchanged. 3.2 row 7, R1 to R3
role="group" on the two divs that carry aria-label (the Markdown sample and the rendering diagram). html-validate reports aria-label on a role-less div; nothing changes on screen. S8

Every fact on the new page comes from the repo or from the two sources it links. The Notepad paragraph follows Microsoft's Notepad formatting announcement (bold, italic, links, lists, headings; Mermaid is not listed). The VS Code paragraph follows the VS Code Markdown documentation, which says the built-in preview renders Mermaid, so the page does not claim otherwise. The numbers are the README's 0.3.0 figures (74.15 ms to a visible window, 96.79 MiB peak private memory, median of ten warm launches) with the machine named in the README. The page makes no speed or size comparison with other programs, in line with the README's "No unmeasured comparison" line. The 4.17 MiB payload figure is not on the new page because nothing in the repo besides the landing page records it.

Tests-first history: the first commit only changes tests/Test-Site.ps1 and tests/Invoke-SiteBrowserSmoke.mjs. On that commit Test-Site.ps1 fails at "JSON-LD author must link the Lean Apps page" and the browser smoke fails on the missing task page. Both pass at the head of the branch. The smoke test now audits the task page at the same three viewports (desktop and tablet light, mobile dark) and checks the accessibility tree per page; its loopback server now serves a folder URL as that folder's index.html, as Pages does.

Checks run

All on this laptop (Windows 11, Edge headless), against a local python -m http.server on 127.0.0.1. "Before" is origin/main at 696c7a9.

html-validate 11.19.0

errors
Before, index.html 3: doctype-style (1), aria-label-misuse (2)
After, index.html and the task page 2: doctype-style, one per file

doctype-style asks for <!DOCTYPE html> in upper case. Lower case is valid HTML and is what the existing page uses, so I kept it.

linkinator 8.1.0

links 200 other
Before, landing page 28 27 1 x 401
After, both pages 36 34 1 x 401, 1 x 404
After, local links only, recursive 9 9 none
After, README.md (--markdown, from the repo root) 34 33 1 x 401

The 401 is the Google Play tester page, which needs a signed-in Google account; it was there before. The 404 is the task page's own canonical URL on the live site, which exists only after this deploys.

JSON-LD. One block; JSON.parse succeeds. Keys: @context, @type, name, applicationCategory, operatingSystem, softwareVersion, license, downloadUrl, description, url, screenshot, image, sameAs, offers, author. softwareVersion 0.7.1; no codeRepository; no aggregateRating or review; 5 sameAs URLs, each returned HTTP 200 to curl; the screenshot file exists at that path. I did not run Google's Rich Results Test or the Schema Markup Validator (web tools that need the deployed URL).

Lighthouse 13.6.0, mobile form factor, Edge headless. Single runs:

Page Colour scheme Performance Accessibility Best practices SEO
Landing, before light 100 100 100 100
Landing, before dark 100 96 100 100
Landing, after light 90 100 100 100
Landing, after dark 93 96 100 100
Task page light 100 100 100 100
Task page dark 97 95 100 100

Performance moved a lot between runs, so I ran the landing page 12 times before and 12 times after, interleaved, light scheme. Before: 81 to 100, median 95, total blocking time median 377 ms, LCP median 1,165 ms. After: 85 to 98, median 91, TBT median 396 ms, LCP median 1,173 ms. CLS was 0 in every run. Neither page has JavaScript, and the extra blocking time is in Lighthouse's "other" and unattributable tasks; I cannot separate the difference from noise on this laptop, which was also running other work.

The accessibility score below 100 in dark mode is the existing color-contrast failure: in dark mode the .eyebrow labels keep the light-theme accent #1d4ed8 on dark backgrounds (2.89:1 on #0e0d0b, 2.16:1 on #2b2924). It is the same before and after, and the task page inherits it. I did not change it here (see below).

Site test and browser smoke. tests/Test-Site.ps1 and node tests/Invoke-SiteBrowserSmoke.mjs --site ./site pass at the head.

Mutations (each applied alone to a copy of the site, then tests/Test-Site.ps1; all exit 1):

Mutation First failing line
Put codeRepository back in the JSON-LD JSON-LD must not use codeRepository on a SoftwareApplication.
Drop the winget sameAs entry JSON-LD sameAs is missing https://github.com/microsoft/winget-pkgs/tree/master/manifests/a/abooodbah/LeanMark
Drop screenshot JSON-LD screenshot must be the real product screenshot on the page.
Drop the author url JSON-LD author must link the Lean Apps page.
Add an aggregateRating JSON-LD must not carry ratings or reviews.
Drop the releases feed link The page must point feed readers to the releases feed.
Drop the Homebrew command The install section must give the Homebrew command.
Drop the FAQ link to the task page The landing page must link the task page.
Drop the task page from the sitemap sitemap.xml must list https://abooodbah.github.io/leanmark/open-md-files-on-windows/
Drop the task page's lastmod sitemap.xml must give a lastmod date for https://abooodbah.github.io/leanmark/open-md-files-on-windows/.
Change 96.79 MiB to 97 MiB on the task page The task page must quote the measured memory as published.
Point the task page at styles.css instead of ../styles.css The task page must use the site stylesheet.
Break a relative image path on the task page A local site reference is broken: assets/leanmark-icon.png

With no mutation the copy passes again.

Look of the page. I captured full-page screenshots of the landing page before and after at the smoke test's three viewports and compared them pixel by pixel. Everything above the two new install command boxes is identical. The install section has those boxes and the FAQ answer has one more sentence; below that the page is the same, shifted down (desktop 283 px). The task page uses the existing header, section, FAQ grid, measurement list and install-box styles.

Left out, and why

  • AlternativeTo in sameAs: alternativeto.net answered 403 to every request, so I could not confirm the slug.
  • featureList: optional in the report; not added.
  • A second task page ("view Mermaid diagrams without a browser"): the report recommends one task page per app and warns against several pages for query variants.
  • Re-measuring the Windows numbers on 0.7.1: the README keeps them dated as 0.3.0 and the new page does the same.
  • The dark-mode .eyebrow contrast: a CSS colour change that affects every section label, outside this PR's scope. A one-line follow-up (.eyebrow using the dark --link colour in dark mode) would clear it.
  • doctype-style (see above).
  • A Chocolatey badge: the Chocolatey listing still shows 0.6.0, so the badge would show an old version.

Left for the owner or orchestrator

  • Mermaid integrations page: there is still no LeanMark entry. No PR was opened to mermaid-js/mermaid or any other outside repo.
  • Next winget manifest: add markdown-viewer, md, gfm, readme to the tags (check the schema's tag limit).
  • Chocolatey: the listing is 0.6.0; push 0.7.1.
  • After the deploy: Search Console URL Inspection and "Request indexing" for https://abooodbah.github.io/leanmark/ and https://abooodbah.github.io/leanmark/open-md-files-on-windows/; resubmit the LeanMark sitemap; check that Settings > "Search generative AI" is on Include and read the Generative AI performance report; Bing URL submission or IndexNow (owner's call). Run the Rich Results Test and the Schema Markup Validator on the live URL; the software type is expected to be "not eligible" because there are no ratings.
  • Hub site (abooodbah.github.io): WebSite JSON-LD, og:image, the LeanRows winget line, sitemap lastmod, optional llms.txt and 404 page.
  • Repo topics (18 of 20): windows-11 and one more search phrase such as markdown-preview. Repo settings are not changed here.
  • Release notes: start the next one with the keyword line ("LeanMark 0.7.2, a free Markdown viewer for Windows, Linux and macOS, ...").
  • awesome-markdown-editors #293 and awesome-mac #4061 stay open; do not bump.
  • AlternativeTo: confirm the LeanMark slug, then it can be added to sameAs.

Deploy and rollback

The PR triggers build.yml (it also runs on every branch push). Merging to main triggers pages.yml, because site/** and tests/Test-Site.ps1 change, which runs the site test and deploys the site; and build.yml on the push to main, which builds and tests but releases nothing (releases run on v* tags only). store-msix.yml is not triggered. No application code changes; the README copied into the Windows ZIP gets the badge line and feed sentence on the next release.

To roll back, revert the merge commit; pages.yml redeploys the previous site. The new page then returns 404 and should be removed from Search Console if it was submitted.

The site test now requires sameAs listings instead of codeRepository,
a screenshot and image, the author's page, no ratings, the releases
feed link, the Scoop and Homebrew commands, and a task page at
open-md-files-on-windows/ that is linked and in the sitemap. The
browser smoke test audits that page at the same three sizes.

These checks fail until the site changes land in the next commit.
…data

codeRepository is a SoftwareSourceCode property, not a SoftwareApplication
one. The repository, Microsoft Store, winget, Chocolatey and Homebrew tap
pages now go in sameAs. The JSON-LD also gets the product screenshot, the
social preview as image, and the author's page. No rating or review is
added. The page head links the GitHub releases feed.
The FAQ already says LeanMark is on Scoop and Homebrew, and the README has
both commands; the install section now shows them too.
html-validate reports aria-label on a div without a role. role=group
keeps the existing label and changes nothing on screen. role=figure
draws html-validate's prefer-native-element error instead, and a
figure element would bring its default margins.
The page lists Notepad, VS Code, a browser extension and LeanMark with
what each one leaves out, covers Markdown saved by ChatGPT, Claude or a
coding agent, and quotes the 0.3.0 Windows measurement from the README
with its machine. The FAQ links it and the sitemap lists both pages with
today's date.
Four badges under the links line: the winget version, the Microsoft Store
listing, the license, and total GitHub release downloads. No stars or
ratings badge. The GitHub Releases section links the releases feed.
@abooodbah
abooodbah merged commit 4cf0e9d into main Nov 8, 2026
12 checks passed
@abooodbah
abooodbah deleted the seo-2026-11 branch November 8, 2026 05:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant