Skip to content

site: make the landing page crawlable, and drop the README's broken screenshots - #33

Merged
OrellBuehler merged 3 commits into
mainfrom
site/search
Aug 23, 2026
Merged

site: make the landing page crawlable, and drop the README's broken screenshots#33
OrellBuehler merged 3 commits into
mainfrom
site/search

Conversation

@OrellBuehler

Copy link
Copy Markdown
Owner

Searching "kerf editor" turns up four other products called Kerf and no landing page of ours. The site is a project page on a shared github.io host with nothing to crawl but one JS-animated screen, and the repo page — the surface Google does rank — has been rendering three broken-image placeholders.

Note: the first commit here is a recovery. It was written on site/direct-downloads, but PR #32 merged only the commit before it and the branch was then deleted, so it survived as a dangling object and was never pushed.

Crawlability

  • sitemap.xml is generated again (it was in disableKinds), and a layouts/robots.txt points at it. Hugo's built-in robots.txt is a bare User-agent: * with no Sitemap: line, and a project page under a shared host has no domain-root robots.txt to inherit one from.

Structured data

One @graph in partials/schema.html: SoftwareApplication (with offers at price 0, operatingSystem, featureList, downloadUrl, codeRepository — what makes a downloadable app eligible for a rich result; no invented ratings), plus Person, WebSite, WebPage, FAQPage. Needs | safeJS, or html/template re-encodes jsonify's output into a quoted JS string literal no crawler reads as JSON-LD.

Verified against the built page: the block parses as JSON, and all 9 FAQ answers match the visible text byte-for-byte.

Content

A real FAQ section rendered from data/faq.yaml — the same file the FAQPage markup reads, so the marked-up answer is always the one on the page. Nine questions covering what people actually type: what it is, is it free, which platforms, does it need FFmpeg, which AI clients, 360/Insta360.

Meta

Description cut 258 → 152 chars (it was truncating mid-sentence), max-image-preview:large, explicit twitter:* instead of relying on the og:* fallback, og:locale, author. Title, hero lede and download blurb now carry "AI video editor", "video editor" and "free" as adjacent phrases.

README

Adds the site link to the header, and removes the <img> tags for screenshot-editor.png, screenshot-agent.png and screenshot-inspector.png — none of which have ever existed. docs/img/README.md keeps the shot list and now says what is true (nothing references these yet; add the tag back with the file) instead of promising placeholders that read as neglect.


Technical SEO alone will not win "kerf editor" — that query has four established products and an AI Overview reading it as laser-cutter terminology. The realistic wins are "kerf video editor" and "MCP video editor". Two follow-ups this PR does not cover: submitting the sitemap in Search Console (nothing indexes faster), and a real domain — orellbuehler.github.io/kerf/ is a subpath on a shared host with near-zero authority.

Searching "kerf editor" turns up four other products called Kerf and no
landing page of ours — the site is a project page on a shared github.io
host with nothing to crawl but one JS-animated screen.

- sitemap.xml is generated again (it was in disableKinds) and robots.txt
  now points at it; a custom robots template replaces Hugo's bare default,
  which has no Sitemap line and no domain-root robots.txt to inherit one from.
- JSON-LD: a SoftwareApplication (with offers, so it is rich-result
  eligible — no invented ratings), Person, WebSite, WebPage and FAQPage in
  one @graph. safeJS, or html/template re-encodes jsonify's output into a
  quoted JS string literal that no crawler reads as JSON-LD.
- a real FAQ section, rendered from data/faq.yaml — the same file the
  FAQPage markup is built from, so the marked-up answer is always the one
  on the page.
- meta description cut from 258 to under 155 chars so it survives a snippet,
  robots max-image-preview:large for a full-size thumbnail, explicit
  twitter:* rather than relying on the og:* overlap, og:locale, canonical
  sitemap link, author.
- title, hero lede and the download blurb name the category and the price
  the queries actually use: "AI video editor", "video editor", "free".
- README links the site from the header, since the repo page is the one
  surface Google already ranks.
docs/img/screenshot-editor.png, -agent.png and -inspector.png have never
existed, so the repo page — the one surface Google already ranks — renders
three broken-image placeholders: one directly under the badges where the
hero shot goes, two more after the feature table.

Drop the <img> tags. docs/img/README.md keeps the shot list and now says
what is true (nothing references these yet, add the tag back with the file)
rather than promising placeholders that read as neglect.
Both methods Search Console offers, so the property can be verified without
waiting on a second deploy if one is rejected — the site only publishes on a
push to main, so a retry is a whole PR-and-Pages cycle.

- googleSiteVerification param renders a <meta> in baseof's head, alongside
  the other tags and templated like them. Empty param renders nothing.
- static/google879d6297466b7453.html publishes at the property root,
  /kerf/google879d6297466b7453.html.

The token is not a secret: it is served in the page source by design and is
only meaningful for a site Google already fetches from this URL. Whichever
method verifies has to stay in place or the property un-verifies; the other
one can be dropped.
@OrellBuehler
OrellBuehler merged commit 443f154 into main Aug 23, 2026
23 of 24 checks passed
@OrellBuehler
OrellBuehler deleted the site/search branch August 23, 2026 20:06
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