Repository navigation
seo: strengthen Dev Ledger search positioning - #83
Merged
Merged
Conversation
Retitle the public homepage from the vague "Code Metrics" frame to the product category — open-source GitHub analytics for developers — and rewrite the meta description around what the app actually reads (commits, source growth, churn, languages, activity, projects, releases). Add a JSON-LD entity graph reusing the publishing layer's identity scheme: WebApplication at https://devledger.site/#app with license, repository, and shipped-feature claims only, plus a WebSite node linking the site entity to the application. The login surface gets two minimal copy changes for category clarity: the tagline now names the category, and the quiet trust-link row gains a crawlable link to the canonical GitHub analytics tool page. Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
The JSON-LD entity graph links codeRepository/sameAs to the public source repo, whose path trips the Aliferous3/ fixture-identifier guard. The guard's intent is private repo paths; mask only the known public repo URL so everything else still fails closed. Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
The assertion scans serialized history_cursor for provider-identity substrings including 'a1' (the fixture login). Server-minted ids inside that blob — scope_id and lease tokens — are random UUIDs, and a hex uuid contains the pair 'a1' about one run in eight, so the check was flaky on CI. Mask UUID-shaped values first; the identity needles still fail on any real leak. Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Schema.org `publisher` expects an Organization or Person; the graph declares neither, so publishing the WebApplication was invalid. Use `about` — which accepts any Thing — to link #website to #app without inventing an Organization. Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
SEO-1 for the public app repo — consolidates what the homepage claims before more content ships. Search acquisition is currently near zero (≈1 visitor each from Google and DuckDuckGo in the last 30 days); the homepage's
<title>was the vague "Dev Ledger — Code Metrics", which owns no category. Companion PR: Aliferous3/dev-ledger-site#7 carries the intent map, code-churn clarification, and internal-link clusters this PR follows.Homepage positioning
<title>:Dev Ledger — Code Metrics→Dev Ledger — Open-Source GitHub Analytics for Developers(57 chars, fits within practical limits, owns the category)og:title/og:description/Twitter equivalents updated in lockstepStructured data
New JSON-LD
@graphon the homepage reusing the publishing layer's identity scheme:WebApplication@id: https://devledger.site/#app— name, url,applicationCategory: DeveloperApplication,operatingSystem: Web browser,isAccessibleForFree: true,license(AGPL-3.0),codeRepository/sameAs→https://github.com/Aliferous3/dev-ledger, and afeatureListnaming only shipped capabilities (mirrors the publishing repo'sapplicationEntity())WebSite@id: https://devledger.site/#website— name/url +publisher → #app; the app entity links back viaisPartOfNo fabricated ratings, reviews, user counts, pricing, or org claims.
Visible copy (minimal — design preserved)
/tools/github-analytics(joins the existing/securityand/bloglinks) — homepage → authority flow without a link farmNotes
WebApplicationis used rather than the genericSoftwareApplicationbecause the publishing layer already identifies the product entity that way — this reuses the identity scheme instead of creating a parallel onehttps://devledger.site/),robots(index,follow), OG image metadata unchangedtest/security.test.mjsallowlists the exact public repo URLhttps://github.com/Aliferous3/dev-ledger— required by the newsameAs/codeRepositoryJSON-LD — while still rejecting fixture-eraAliferous3/identifiers elsewhere in dist artifactstest/ownership-accumulate.test.mjsmasks UUID values before its serialized-state substring scan — thea1needle was a ~1-in-8 false positive against random scope/lease UUIDs (pre-existing flake in the merged B2 test; assertion-only change, no runtime touch)Test plan
npm test— 686 pass / 0 fail / 3 pre-existing credential-gated skips;launch-metadata.test.mjsupdated for the new title and extended with a JSON-LD contract test (parses, stable@ids,sameAs, license, no fabricated claims)npm run typecheck— cleannpm run build— clean;dist/index.htmlverified to carry the new title + JSON-LDnpm audit --audit-level=moderate— 0 vulnerabilitiesnpm run db:drill— pass on local PostgreSQL 17 (unchanged surface)Generated with Devin