<p><em>On Elyra Sjá, and the strange new job of being legible to something that isn't human.</em></p><p>There's a particular kind of tiredness that comes from auditing a web page in 2026.</p><p>You open a browser extension to check the meta tags. You paste the URL into a structured-data validator. You fire up a crawler in another tab because you should really check the whole site. You run PageSpeed. You open the spreadsheet where you wrote down last month's score, and discover you forgot to write down last month's score. Then, because you're not entirely sure how to fix the thing you just found, you open a chat window and describe it to a model — which gives you good advice about a page it cannot see.</p><p>Six tools. Four subscriptions. No memory. Every finding copy-pasted by hand.</p><p>Elyra Sjá is what happens when you get tired enough of that to build the alternative.</p><h2>The name</h2><p><em>Sjá</em> is Old Norse. It means "to see."</p><p>It's the ancestor of the Norwegian <em>se</em> and the English <em>see</em>, and it carries both senses the word still has today: to look at something, and to understand it. In the sagas it's also the verb of the seer — the one who perceives what others can't.</p><p>Which is a slightly grand way of describing an SEO tool, except that it's precisely the job. A crawler and a language model both "read" your page, and neither of them reads it the way you wrote it. One sees markup, heading hierarchy and link graphs. The other is hunting for claims it can quote and attribute. You wrote prose. They see structure.</p><p>Sjá makes both views visible. It joins the rest of the Norse-named Elyra family — <strong>Askr</strong>, the world-tree that carries the load, and <strong>Ratatosk</strong>, the squirrel that runs messages up and down it.</p><h2>Ranking is no longer the only game</h2><p>Here's the shift that makes this more urgent than another SEO checklist.</p><p>A growing share of your traffic never sees a results page at all. Someone asks an assistant a question, and the assistant answers — citing whichever pages happened to be legible and quotable enough to use. That's Generative Engine Optimization, and it is scored differently from classic SEO.</p><p>Classic SEO asks: can a crawler index this, and does it match the query?</p><p>GEO asks: can a language model understand what you're claiming, and safely attribute it to you?</p><p>Those need different things. JSON-LD structured data so a model knows what kind of thing your page is. An <code>llms.txt</code> so it knows what you'd like it to read. Headings phrased as the questions people actually ask, because a model looking for an answer finds answers, not adjectives. Citable schema types — <code>Article</code>, <code>FAQPage</code>, <code>HowTo</code> — that give it a defensible reason to quote you by name.</p><p>Most tools score the first job. Sjá scores both, and treats GEO as a first-class category rather than a bonus round.</p><h2>How it actually works</h2><p>You type a keyword, a URL, and pick an objective. You press <strong>RUN</strong>.</p><p>That's the whole interaction. About 400 milliseconds later you have a report.</p><p>Here's a real one — Sjá analyzing the site it's sold on, <a target="_blank" rel="noopener noreferrer nofollow" href="http://elyracode.com">elyracode.com</a>, on the <strong>Full audit</strong> objective:</p><pre><code class="language-text">  90   Grade A          HTTP 200 · llms.txt ✓ · schema Organization · 372 ms
                        13 pass · 3 warn · 0 fail

  Meta         81  ████████████████░░░░
  Structure   100  ████████████████████
  GEO / AI     79  ███████████████░░░░░
  Social      100  ████████████████████
  Indexing    100  ████████████████████

  1931 words   ·   62 links int/ext   ·   0 images (0 no alt)   ·   1 H1
</code></pre><p>Nineteen weighted checks across five categories, an overall score, a grade. And crucially, every finding is traced back to the value that caused it:</p><pre><code class="language-text">  ✓  Title tag              49 chars — well within 30–60.
  !  Meta description      270 chars — aim for 70–160.        [+ Fix]
  ✓  HTML lang attribute   lang="en"
  ✓  Single H1             Exactly one H1: "Build it. Run it. …"
</code></pre><p>Note the <code>[+ Fix]</code> next to the warning. That's the part I think is the actual idea.</p><h3>Findings become fixes</h3><p>Click it, and Sjá writes you a fix prompt — not a generic tip, but one built from this page's URL, this keyword, and the actual 270-character description it found. Stack up several. Then either copy the lot, or press <strong>Run with AI</strong>.</p><p>And if you've connected that project to a local code folder, the interesting thing happens: the agent gets sandboxed file tools scoped to that folder — <code>list_dir</code>, <code>read_file</code>, <code>write_file</code>, and no way out of it. It explores your actual repository, finds the template that generates the offending tag, and edits the real file. With <strong>Ask before the AI writes files</strong> on (the default), every write pauses for a preview and your approval.</p><p>The loop closes. You found a problem in your rendered HTML, and the fix landed in your source.</p><h3>The objective changes the maths</h3><p>The objective isn't a label — it re-weights the score. Pick <strong>Improve AI visibility</strong> and the GEO signals dominate. Pick <strong>Get indexed</strong> and canonicals, <code>robots.txt</code> and internal linking come to the front. <strong>Audit</strong> balances everything. Same page, same checks, different question being asked.</p><h3>Then: the whole site, and time</h3><p>One page is where you start, not where you stop.</p><ul><li><p><strong>Site crawl</strong> discovers pages from your <code>robots.txt</code> sitemap directives and <code>/sitemap.xml</code> (including sitemap indexes), then walks internal links breadth-first. It respects your disallow rules with a politeness delay. Out comes a site score, category averages, an issue inventory ("meta description too long: 34 pages"), plus broken pages and duplicate titles. Click any row to open its full report — and fix it.</p></li><li><p><strong>Trends</strong> keeps every run per URL, with a sparkline and the delta since the first one. Pick two runs and compare: which checks were fixed, which regressed, what the score did.</p></li><li><p><strong>Monitors</strong> re-scan on a schedule — hourly, six-hourly, daily, weekly. A score drop of five or more, or a fetch error, raises an alert with a native notification. Your homepage quietly losing its canonical tag during a deploy is exactly the sort of thing you find out about six weeks late. Now you find out today.</p></li><li><p><strong>Reports</strong> export print-optimized PDFs branded with your agency name: score, categories, every finding, the issue inventory, the full page table. ⌘P → Save as PDF, and it goes to the client.</p></li></ul><h2>Local-first, and why that matters</h2><p>Sjá is a native macOS app, built on the Elyra Framework — Rust on the inside, Svelte 5 on the outside, compiled to one binary. No Electron. No bundled Node runtime. No browser engine along for the ride. It launches instantly and idles at nothing.</p><p>More to the point: your pages are fetched and analyzed on your machine. Projects and history live in a local SQLite database. Your AI API key and license code live in the macOS Keychain, never in the database file, never in a config you might accidentally commit.</p><p>There's no crawl budget, because there's no server metering you. There's no seat-based dashboard. There's no vendor accumulating a picture of every client site you work on. That's not a privacy flourish — it's the difference between a tool you own and a subscription you rent.</p><p>The licence follows the same logic. Your code is an Ed25519-signed token, verified offline against a public key compiled into the app. Which means activation works on a plane, we never see your usage, and — because the signing key stays on the server — the binary contains a verifier, not a keygen. Nobody can reverse-engineer a licence generator out of it.</p><h2>What it costs</h2><ul><li><p><strong>Pro — $99/year.</strong> Every check and category, site crawl, trends, monitors, AI fixes in your own files, branded PDF reports. Up to 3 devices.</p></li><li><p><strong>Studio — $249/year.</strong> Everything in Pro, up to 10 devices, unlimited projects and monitors, priority support. For agencies and in-house teams.</p></li><li><p><strong>Lifetime — $399 once.</strong> Everything in Pro, never expires, all future updates. A launch offer.</p></li></ul><p>One licence covers the whole app. No per-crawl credits, no feature gates, nothing held back for a higher tier.</p><p>Every install starts with a 3-day trial — full functionality, no card, no account. Download it, run it against a page you care about, and see whether the report tells you something you didn't know.</p><p>And one thing that is honestly not here yet: today every seat keeps its own local database. On a Studio licence that's going to become a choice — point the whole team at one shared database, so projects, history, trends and monitors belong to the team rather than to whichever laptop ran the scan. It's on the roadmap, it's in the changelog, and it isn't shipping today. I'd rather tell you that now than have you find out after paying.</p><h2>The pitch, honestly</h2><p>I don't think Sjá wins because it has more checks than the other tools. Check counts are a silly way to buy software.</p><p>It wins on three things.</p><p><strong>It's one app.</strong> Audit, crawl, structured data, Core Web Vitals, history, monitoring and reporting share a workspace and a mental model. Nothing gets exported between tools, because there are no other tools.</p><p><strong>It scores the thing that's actually changing.</strong> GEO isn't a checkbox bolted onto an SEO product here; it's a category with real weight, and an objective you can optimise for.</p><p><strong>It closes the loop.</strong> Every other tool in this space ends at a list of problems. Sjá ends at an agent editing the file that caused them, with your approval, in your repo.</p><p>Sjá means to see. Stop guessing what the crawler saw.</p><p><a target="_blank" rel="noopener noreferrer nofollow" href="https://replace-me/"><strong>Download for Apple Silicon macOS →</strong></a> · 3-day trial · offline activation</p>