Skip to content

fix(public): point appraisal-page canonicals and JSON-LD WebPage @ids at the clean non-307 URLs - #218

Merged
nish3451 merged 30 commits into
mainfrom
fix/appraisal-page-clean-canonicals-lane1
Aug 19, 2026
Merged

fix(public): point appraisal-page canonicals and JSON-LD WebPage @ids at the clean non-307 URLs#218
nish3451 merged 30 commits into
mainfrom
fix/appraisal-page-clean-canonicals-lane1

Conversation

@nish3451

@nish3451 nish3451 commented Aug 15, 2026

Copy link
Copy Markdown
Collaborator

What

The deployed worker 307-redirects every .html form to its clean extensionless twin. The audit page was migrated in PR #56; the three remaining appraisal pages still named the redirecting .html twins in their <link rel="canonical">, og:url, and JSON-LD WebPage @id/url.

Live (2026-08-15):

Address HTTP Location
/agents.html 307 /agents
/agents 200
/pricing.html 307 /pricing
/pricing 200
/specimen.html 307 /specimen
/specimen 200

Change

  • public/agents.html: canonical, og:url, JSON-LD @id/urlhttps://tinystudio.io/agents
  • public/pricing.html: canonical, og:url, JSON-LD @id/urlhttps://tinystudio.io/pricing
  • public/specimen.html: canonical, og:url, JSON-LD @id/urlhttps://tinystudio.io/specimen
  • scripts/check-site.mjs: canonical, social-share and structured-data guard expectations moved to the clean forms (same shape as PR fix(public): point appraisal-page canonicals and JSON-LD @ids at the clean /audit URL #56's audit migration)

Verification

  • npm run check → "TinyStudio.io checks passed."
  • npm test → all suites pass (headings 6/6, sitemap 7/7, worker 80/80, ui 16/16, contract 8/8, viewport 4/4).
  • Evidence: docs/evidence/appraisal-canonicals-clean-urls-lane1-2026-08-15.md

Summary by CodeRabbit

  • Improvements

    • Updated appraisal pages to use clean, extensionless URLs for agents, pricing, and specimen pages.
    • Aligned canonical links, social-sharing URLs, icons, and structured data with the clean page paths.
    • Improved consistency for search engines and shared links by avoiding redirecting .html URLs.
  • Documentation

    • Added verification reports covering metadata updates, validation results, and supporting evidence.

nish3451 and others added 2 commits August 15, 2026 06:09
…age @ids at the clean non-307 URLs

The deployed worker 307-redirects every .html form to its clean
extensionless twin (verified live 2026-08-15: /agents.html -> /agents,
/pricing.html -> /pricing, /specimen.html -> /specimen, all 200 on the
clean form). audit.html was migrated in PR #56; the remaining three
appraisal pages still named the redirecting .html twins in their
canonical, og:url, and JSON-LD WebPage @id/url. A canonical must name
the address that serves 200, never the redirecting form.

- public/agents.html: canonical, og:url, JSON-LD @id/url -> /agents
- public/pricing.html: canonical, og:url, JSON-LD @id/url -> /pricing
- public/specimen.html: canonical, og:url, JSON-LD @id/url -> /specimen
- scripts/check-site.mjs: move the canonical, social-share and
  structured-data guard expectations for the three pages to the clean
  forms, matching the audit page migration

Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
…clean non-307 URLs

Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your trial has ended. Reactivate Greptile to resume code reviews.

@coderabbitai

coderabbitai Bot commented Aug 15, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@nish3451, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 50 minutes

Limit details: You’ve used the included review currently available.

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits within each organization.

For paid Pro and Pro+ reviews, CodeRabbit uses a developer's included PR review attempts over the past 7 days to set the current hourly allowance. At typical activity levels, the full plan allowance applies. Higher sustained activity can lower the allowance until earlier attempts leave the 7-day window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Free

Run ID: d3e212b3-120f-419b-af0c-0f3c588ef6df

📥 Commits

Reviewing files that changed from the base of the PR and between 360389b and 2465da2.

📒 Files selected for processing (2)
  • public/pricing.html
  • scripts/check-site.mjs
ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Free

Run ID: 6a86def1-de07-4575-b801-63793c64358d

📥 Commits

Reviewing files that changed from the base of the PR and between 2f0933b and 360389b.

📒 Files selected for processing (1)
  • scripts/check-site.mjs
🚧 Files skipped from review as they are similar to previous changes (1)
  • scripts/check-site.mjs

Included review availability: Your plan includes up to 1 review per rolling hour; 0 remain after this review.


📝 Walkthrough

Walkthrough

The agents, pricing, and specimen pages now use extensionless canonical, Open Graph, favicon-related, and JSON-LD URLs. Site validation checks and evidence reports use the same URL expectations.

Changes

Canonical URL migration

Layer / File(s) Summary
Update page metadata
public/agents.html, public/pricing.html, public/specimen.html
Page metadata and JSON-LD identifiers now use /agents, /pricing, and /specimen instead of .html paths.
Align validation and evidence
scripts/check-site.mjs, .lane/reports/..., docs/evidence/...
Social-share, structured-data, and canonical checks now require the extensionless URLs. Reports document the migration and verification results.

Estimated code review effort: 2 (Simple) | ~10 minutes

Merge Risk: ⚪ Minimal · up to 36038

This PR updates three appraisal pages to use their clean, non-redirecting URLs for canonical, social, and structured-data metadata, with the supplied checks passing; no actionable merge-blocking risk remains.


Note

🎁 Summarized by CodeRabbit Free

Your organization is on the Free plan. CodeRabbit will generate a high-level summary and a walkthrough for each pull request. For a comprehensive line-by-line review, please upgrade your subscription to CodeRabbit Pro by visiting https://app.coderabbit.ai/login.

Comment @coderabbitai help to get the list of available commands.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your trial has ended. Reactivate Greptile to resume code reviews.

@nish3451
nish3451 merged commit ed2b1a9 into main Aug 19, 2026
3 checks passed
nish3451 pushed a commit that referenced this pull request Aug 20, 2026
…ne report

- Add 'study-freshness pass' to the npm-test chain command summary so the
  receipt records every script that ran (test-study-freshness.mjs was the
  omission Greptile flagged).
- Tighten the Limitation section: source and served bytes CAN drift when a
  commit lands on main but its static assets have not yet been redeployed
  to the Worker. Reference the same PR #218 deployment lag the report
  records on /agents, /pricing, and /specimen as the live example.
nish3451 added a commit that referenced this pull request Aug 21, 2026
…eclaration (2026-08-21, lane 1) (#285)

The three pages' canonical, og:url and JSON-LD WebPage @id/url already
self-declare the clean non-307 URLs on origin/main (PR #218, ed2b1a9,
merged 2026-08-19) and npm run check enforces the shape. Live probes
(2026-08-21) still show the pre-fix .html declarations on all three
pages, plus other 2026-08-19 staleness on /pricing, so the remaining
action is a redeploy of origin/main, not a source change.

Co-authored-by: minimax-vps <minimax-vps@local>
Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
nish3451 added a commit that referenced this pull request Aug 21, 2026
…current main and live (2026-08-20, lane 1) (#248)

* docs(evidence): re-verify canonical-URL finding 6631c0ab0454 against current main and live (2026-08-20, lane 1)

Re-verify on origin/main d0daea9: home canonical (<link rel="canonical"
href="https://tinystudio.io/">) is byte-identical to every prior receipt,
the 'Canonical URLs (dogfood)' guard in scripts/check-site.mjs passes the
full npm test chain, the live site serves the same home canonical with no
console or page errors on six served pages, and PR #218 extended the guard
to the clean extensionless addresses for /agents, /pricing, /specimen —
strengthening the source-side guarantee the finding rests on. The home
finding 6631c0ab0454 remains closed on the code side, in CI, and against
the deployed site; only change in this PR is the standing receipt and the
new lane report. Records the deployment lag on PR #218 (live /agents,
/pricing, /specimen still serve the .html-form canonicals) as a separate
ship item.

* docs(evidence): address Greptile review on canonical-URL re-verify lane report

- Add 'study-freshness pass' to the npm-test chain command summary so the
  receipt records every script that ran (test-study-freshness.mjs was the
  omission Greptile flagged).
- Tighten the Limitation section: source and served bytes CAN drift when a
  commit lands on main but its static assets have not yet been redeployed
  to the Worker. Reference the same PR #218 deployment lag the report
  records on /agents, /pricing, and /specimen as the live example.

---------

Co-authored-by: minimax-vps <minimax-vps@fleet.local>
Co-authored-by: minimax-vps <minimax-vps@local>
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