Fixes & Pull Requests

Most tools stop at "title is missing". Seoruna prepares the change and opens a Pull Request — you review it like any teammate's PR, merge, deploy, and the next crawl confirms the finding is gone. The loop is Detect → PR → Merge → Verified, and every step is visible.

Connect the repository

In the site's Settings → Repository card, install the Seoruna GitHub App and pick the repository that serves this site. The connection is per site — different sites can use different repositories and different GitHub accounts. The App only gets access to the repositories you select (contents and pull requests).

Opening a fix PR

On the Health page, findings the fixer registry covers show an Open PR button. Seoruna creates a fresh seoruna/fix-… branch — never your default branch — commits the change and opens a PR whose description explains why, what changed and the expected impact, linking back to the finding.

What can be fixed today

  • Missing llms.txt — generated from your latest crawl: the most important pages by internal authority, with your site's categories. No AI involved — the file is derived from measured crawl data.
  • AI crawlers blocked in robots.txt — appends explicit Allow blocks for exactly the blocked bots (GPTBot, ClaudeBot, PerplexityBot…). Purely additive: your existing rules stay untouched.

Next.js-aware fixes

When the connected repository is a Next.js App Router project (detected automatically at connect time), more findings become fixable — on static routes:

  • Missing canonical — adds alternates: { canonical } to the page's metadata; the value is the page's own path, no AI involved.
  • Missing / weak titles and meta descriptions — the copy is written from the page's own crawled content, in the page's language, within our standing length rules; then a tightly bounded edit places it in the metadata export.
  • Broken canonicals (pointing at redirects or 404s) — reset to the page's own path.
  • Missing og:title — a verbatim copy of the page's measured title.
  • Missing <html lang> — set in the root layout to the language the crawl actually measured across your pages.
  • Missing structured data — an Organization + WebSite JSON-LD script in the root layout, built only from measured site facts.

Guardrails: only the one target file may change, the edit must stay under a hard line budget, and pages with dynamic metadata (generateMetadata) or dynamic routes ([slug]) are refused with a clear reason — a wrong-file PR is worse than no PR.

Verified, automatically

After you merge and deploy, the next crawl re-checks the finding. If it is gone, the fix turns Verified in the history and the PR receives a "Verified by Seoruna" comment — proof, not promises.