Loading...
Loading...
Write and save an OpenSEO report as one self-contained HTML page. Use when a skill has finished its research, and whenever the user asks for a report, check-in, or summary, or names a report template.
npx skill4agent add every-app/open-seo seo-reportsave_reportlist_reportsreportIdsave_reportreportIdreportIdget_reportincludeHtml: truelist_report_templatestemplateIdsave_report.notetitlesummarylist_reportsh2how-this-report-was-made<p>Generated by the <a href="https://openseo.so/docs/skills/seo-audit" target="_blank" rel="noopener">OpenSEO SEO Audit skill</a>, run by AGENT NAME on MONTH D, YYYY.</p>https://openseo.so/docs/skills/fetch<style><a href="..." target="_blank" rel="noopener">href="#id"<script><text>viewBox${<code></html><html><head><title>save_report{ reportId, url, htmlBytes }Read the full report: <url>{ appendResearchLog: { summary: "Report: <title>. Verdict: <conclusion>" } }<!doctype html>
<html lang="en"><head><meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>DOMAIN — REPORT TITLE</title>
<style>
/* One light look, on screen and on paper. The report is read inside the app,
which has its own theme toggle, and a saved document has no way to hear about
it: a report that follows the OS scheme alone shows a black panel inside a
light app for anyone whose two settings disagree. */
:root{--bg:#fff;--fg:#0a0a0a;--fg-2:#454545;--fg-3:#8f8f8f;--rule:#ebebeb;--rule-2:#dcdcdc;--sunk:#fafafa;
/* The one token a report template may change. Left as the text color, so a
report with no template looks exactly as it did before. */
--accent:var(--fg)}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{background:var(--bg);color:var(--fg);margin:0;padding:0 24px 120px;font-size:18px;line-height:1.65;letter-spacing:-.003em;
font-family:Geist,-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased}
.shell{max-width:1100px;margin:0 auto}
header{padding:40px 0 0;max-width:660px}
h1{font-size:clamp(34px,6vw,56px);font-weight:700;line-height:1.03;letter-spacing:-.035em;margin:0;text-wrap:balance}
.byline{margin:24px 0 0;font-size:16px;color:var(--fg-2)}
.body{display:grid;grid-template-columns:minmax(0,660px) 1fr;gap:0 64px;margin:48px 0 0}
/* Both explicitly in row 1: without it the rail auto-places into row 1 and
pushes the article down a whole row, opening an empty band above the text. */
article{grid-column:1;grid-row:1;min-width:0}
.rail{grid-column:2;grid-row:1;font-size:14px;color:var(--fg-3);padding-top:6px}
.rail .sticky{position:sticky;top:40px}
.toc-label{font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--fg-3);margin:0 0 10px}
.toc ol{list-style:none;margin:0;padding:0}
.toc li{margin:0 0 7px}
.toc a{color:var(--fg-2);text-decoration:none}
.toc a:hover{color:var(--fg)}
/* Below 900px the rail is dropped rather than stacked: a contents list above
the report is a wall to scroll past on a phone, not a shortcut. */
@media (max-width:900px){.body{grid-template-columns:1fr}.rail{display:none}}
article p{margin:0 0 26px;text-wrap:pretty}
h2{font-size:30px;font-weight:600;letter-spacing:-.025em;line-height:1.2;margin:60px 0 22px;text-wrap:balance}
h3{font-size:20px;font-weight:600;letter-spacing:-.015em;margin:38px 0 14px}
.finding{list-style:none;padding:0;margin:0 0 26px}
.finding li{margin:0 0 8px;color:var(--fg-2)}
.finding b{color:var(--accent);font-weight:600}
a{color:var(--fg);text-decoration:underline;text-underline-offset:3px;text-decoration-color:var(--rule-2)}
strong{font-weight:600}
code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.86em;background:var(--sunk);border:1px solid var(--rule);padding:1px 5px;border-radius:4px}
ul,ol{margin:0 0 26px;padding-left:22px}li{margin:0 0 11px}li::marker{color:var(--fg-3)}
.note{border-left:2px solid var(--fg);padding:2px 0 2px 22px;margin:0 0 26px}
.note p{margin:0;color:var(--fg-2)}
.note p+p{margin-top:14px}
.tw{overflow-x:auto;margin:0 0 30px}
table{border-collapse:collapse;width:100%;font-size:15.5px;min-width:440px}
th{text-align:left;font-weight:500;color:var(--fg-3);padding:0 20px 10px 0;border-bottom:1px solid var(--rule-2);white-space:nowrap}
td{padding:13px 20px 13px 0;border-bottom:1px solid var(--rule);vertical-align:top;color:var(--fg-2)}
td:first-child{color:var(--fg)}
td.n,th.n{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
td:last-child,th:last-child{padding-right:0}
tr:last-child td{border-bottom:none}
figure{margin:0 0 30px}
figcaption{font-size:14px;color:var(--fg-3);margin-top:8px}
.bars{display:grid;grid-template-columns:minmax(90px,170px) 1fr auto;gap:10px 12px;align-items:center;font-size:14px}
.bars .label{color:var(--fg-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bars .track{display:block;height:20px;background:var(--sunk)}
.bars .bar{display:block;height:100%;background:var(--accent);opacity:.16}
.bars .value{font-variant-numeric:tabular-nums;min-width:3ch;text-align:right}
svg{display:block;max-width:100%;height:auto}
hr{border:none;border-top:1px solid var(--rule);margin:60px 0}
footer{max-width:660px;margin:64px 0 0;padding:26px 0 0;border-top:1px solid var(--rule);font-size:15px;color:var(--fg-3)}
@media print{
/* A zero top margin hides the browser's own print header (date, tab title);
the bottom margin holds a page counter instead of the browser's URL line.
The body padding supplies the visible page margins. */
@page{margin:0 0 12mm 0;@bottom-center{content:counter(page) " of " counter(pages);font:10px -apple-system,BlinkMacSystemFont,Helvetica,Arial,sans-serif;color:#8f8f8f}}
body{background:#fff;color:#111;padding:14mm 16mm 6mm;font-size:11pt}
.shell,.body{display:block;max-width:none}
header{padding:0;max-width:none}
h1{font-size:26pt}
h2{font-size:15pt;margin:22pt 0 10pt}
h3{font-size:12pt;margin:14pt 0 6pt}
article,footer{max-width:none}
.rail{display:none}
h1,h2,h3{break-after:avoid}
table,figure,.note,svg{break-inside:avoid}
tr,td,th{break-inside:avoid}
p,li{orphans:3;widows:3}
thead{display:table-header-group}
.tw{overflow:visible}
table{font-size:10pt;min-width:0}
.byline,footer,figcaption{font-size:9.5pt}
svg,.bars .bar,.bars .track{-webkit-print-color-adjust:exact;print-color-adjust:exact}
a{text-decoration:none}
}
</style></head>
<body><div class="shell">
<header>
<h1>REPORT TITLE</h1>
<p class="byline">Prepared for NAME · MONTH D, YYYY</p>
</header>
<div class="body">
<aside class="rail"><div class="sticky">
<p class="toc-label">Contents</p>
<nav class="toc" aria-label="Contents">
<ol>
<li><a href="#section-heading">SECTION HEADING</a></li>
<li><a href="#what-to-do-next">What to do next</a></li>
<li><a href="#how-this-report-was-made">How this report was made</a></li>
</ol>
</nav>
</div></aside>
<article>
<p>One or two sentences: the state of things and the one action.</p>
<h2 id="section-heading">SECTION HEADING</h2>
<h3>FINDING TITLE</h3>
<ul class="finding">
<li><b>Status:</b> what is true, with the number or the quoted tag that proves it.</li>
<li><b>Fix:</b> the concrete step, doable this week by a non-technical person.</li>
</ul>
<div class="note"><p>A caveat, a confidence note, or something you could not verify.</p></div>
<div class="tw">
<table>
<thead><tr><th>Item</th><th class="n">Volume</th><th class="n">Difficulty</th></tr></thead>
<tbody><tr><td>example keyword</td><td class="n">1,300</td><td class="n">4</td></tr></tbody>
</table>
</div>
<figure>
<div class="bars" role="img" aria-label="Monthly volume: alpha 1,300, beta 590">
<span class="label">alpha</span><span class="track"><span class="bar" style="width:100%"></span></span><span class="value">1,300</span>
<span class="label">beta</span><span class="track"><span class="bar" style="width:45%"></span></span><span class="value">590</span>
</div>
<figcaption>One row per item; the widest bar is 100% and the rest are scaled to it.</figcaption>
</figure>
<hr>
<h2 id="what-to-do-next">What to do next</h2>
<ol><li>The top priority, first.</li></ol>
<h2 id="how-this-report-was-made">How this report was made</h2>
<p>Generated by the <a href="https://openseo.so/docs/skills/SKILL-NAME" target="_blank" rel="noopener">OpenSEO SKILL TITLE skill</a>, run by AGENT NAME on MONTH D, YYYY.</p>
<ul class="finding">
<li><b>Tools:</b> which OpenSEO tools reported which numbers.</li>
<li><b>Verified:</b> what you checked against the live site by hand.</li>
</ul>
</article>
</div>
<footer>Prepared with OpenSEO. Data as of MONTH D, YYYY.</footer>
</div></body></html>h1.byline.railh2href="#id"target="_blank"h2h3h2h3h3.finding<li><b>Status:</b> …</li><li><b>Fix:</b> …</li><li><b>Why:</b> …</li>.note.twclass="n"thtdfigure.bars.label.track.bar.valueviewBox<text>hrh2h2footer--accentPrepared for NAMEPrepared bysave_reportprojectIdunknown.note