Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

SEO: every page ships a complete, shareable head

Open
#2 0 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
5/5
Estimated time
Over a week
Newbie friendliness
30/100
Issue type
Feature
Clarity
Mostly clear
Activity status
Active
Tech stack
next.js, typescript
Domain
web-dev

Research direction

Start with app/layout.tsx and the route-specific generateMetadata implementations, then inspect app/api/looks/[id]/image/route.ts and app/api/products/[id]/image/route.ts. Review the route inventory and existing metadata examples such as cards/[id] and editions/[id]. Done means the checklist passes for all public, private, and token-addressed routes, including raster OG images, locale alternates, sitemap, and robots files.

Written by the indexing model from the issue text.

Description

seo standing

Standing issue — do not close. SEO decays every time a route is added or a layout is reshaped.

This one stays open permanently: do not close it — not after a fix lands, not when the
checklist comes back clean. It is re-audited periodically and every pass is recorded in the log
at the bottom.

The bar

Every route a person can land on or paste into a chat window renders, without JavaScript:

  • a specific <title> and description — not the site default;
  • openGraph (title, description, url, type, siteName, locale) and a twitter card;
  • an OG image that is raster (PNG/JPEG), at least 1200×630, and reachable by an anonymous crawler;
  • a canonical URL, plus alternates.languages for every locale in LOCALE_TAGS;
  • robots directives matching the page's privacy — private Looks and token-addressed pages noindex.

And once, at app level: metadataBase, app/sitemap.ts, app/robots.ts.

Baseline (832a1a6)

The title/description half is already done: all 20 page routes export generateMetadata with a real,
page-specific title and description, and app/layout.tsx:39 sets the %s · Lookline template.

Entirely missing:

  • openGraph / twitter — zero occurrences in the repo.
  • metadataBase, app/sitemap.ts, app/robots.ts, alternates — none.
  • opengraph-image — none.

Route-specific notes:

Route Note
/l/[token], /a/[token] The share surfaces. These are what actually gets pasted into LINE or Messenger, so the OG image matters here most — and they must stay noindex, being token-addressed.
/looks/[id] The generated Look image already lives in R2 and is served by app/api/looks/[id]/image/route.ts; the OG image should reuse it rather than re-render. Must respect canView — a private Look cannot leak a preview to a crawler.
/p/[id] app/api/products/[id]/image/route.ts returns SVG, which Facebook, X and LINE will not render as an OG image. A product OG image needs a raster path.
/trends Public and the strongest organic landing surface. Worth a real OG image, not a generic one.
/me, /bag, /checkout, /checkout/done, /login, /admin Should be noindex.

Per-pass checklist

  • Every route added since the last pass has OG + Twitter + canonical.
  • Every OG image URL returns 200, raster, ≥ 1200×630, to an unauthenticated request.
  • Private and token-addressed routes are noindex; public routes are not accidentally noindex.
  • sitemap.ts lists exactly the public routes — no tokens, no private Looks.
  • Descriptions are page-specific and read as a sentence, not a keyword list.
  • alternates.languages covers every locale in LOCALE_TAGS.

Log

Date Commit Pass Notes
2026-09-19 832a1a6 baseline Gaps recorded above. Nothing implemented yet.
2026-09-19 73bbc4f auto clean — 832a1a6..73bbc4f touches no route, no metadata and no component.
2026-09-19 c86a24d auto clean — 73bbc4f..c86a24d touches no route, no metadata and no component.
2026-09-19 3d4e4a1 auto clean — c86a24d..834b2ee touches no route, no metadata and no component.
2026-09-20 52ef4fa auto Two routes added in a 76-commit range: /previews/new and /previews/[id]. Both export generateMetadata with a real title, matching the repo standard, and both are owner-gated (notFound() for anonymous or non-owner), so neither is crawler-reachable. Both inherit the repo-wide gap — no openGraph, twitter, canonical or robots anywhere. The route count in this issue's baseline goes from 20 to 22. Not a regression; it is the standing gap.
2026-09-20 8475f6e auto Progress on a baseline blocker. fb69641 deleted the SVG product renderer, so /api/articles/[id]/image now serves the article's real photograph out of R2 as image/webp instead of drawn SVG. The baseline table named that SVG as the reason /p/[id] had no viable OG image; a raster source now exists. The declaration itself is still missing — no openGraph anywhere — so the gap stands, but the blocker under it is gone.
2026-09-20 ad48e14 auto The first OG images in the repo land, and one gap fixed (#54). cards/[id] and editions/[id] each set metadataBase + openGraph and ship an opengraph-image.tsx (1200×630 PNG); verify/[code] sets metadataBase + openGraph without an image. Route inventory moved 22 → 31: twelve added (cards, collections ×3, editions, me/friends, me/personas, shop-talk, studio ×2, verify ×2), three removed with Asks (/a/[token], /asks/[id], /asks/new). Eleven of the twelve export generateMetadata; /me/friends did not and fell back to the bare Lookline default — fixed. Still open repo-wide: no twitter card anywhere, no canonical, no alternates.languages, no app/sitemap.ts, no app/robots.ts, and 28 of 31 routes have no openGraph.
2026-09-20 437f498 auto clean — no route, metadata or component touched. The range is CI, Renovate config, and one query swap on /collections/[id].
2026-09-20 ee3ea39 auto clean — no route, metadata or OG surface touched.
Dominant language
TypeScript
Stars
0
Forks
1
Avg merge
54m
Merged PRs (30d)
49

Getting set up

This project ships no dev container, Dockerfile or contributing guide, so setting up is up to you: start from its README, and see our first-contribution guide for the general steps.

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from JacobLinCool/lookline

All issues in JacobLinCool/lookline

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.