DEV Community

Cover image for FAQPage Schema + Shareable URLs: Two Quick Wins for Web Tool SEO
MaxxMini
MaxxMini

Posted on • Edited on

FAQPage Schema + Shareable URLs: Two Quick Wins for Web Tool SEO

You built a web tool. It works. It's deployed. But nobody finds it on Google.

I recently applied two features to 15 of my micro-SaaS tools that took ~10 minutes each:

  1. FAQPage structured data → Google rich snippets
  2. Shareable URLs → Users share pre-configured tool states

Here's the exact code.


1. FAQPage Structured Data

Google shows FAQ rich snippets in search results — expandable Q&A boxes that take extra screen space. Free visibility.

The Schema

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "What does this tool do?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Plain text answer. Concise but informative."
      }
    }
  ]
}
</script>
Enter fullscreen mode Exit fullscreen mode

Rules

  • 5-7 questions max
  • Answer adjacent questions — not just "what does your tool do"
  • Include code snippets — developers want code
  • Validate with Rich Results Test

Good Questions

For a JSON formatter:

  • "How do I format JSON in the terminal?" → jq ., python -m json.tool

For a regex tester:

  • "How do I test regex in Python?" → re.match() example

2. Shareable URLs (Zero Backend)

When a user shares your tool URL, the recipient sees the exact same configuration.

Simple: URL Parameters

function shareState() {
  const params = new URLSearchParams({
    n: document.getElementById('count').value,
    t: document.getElementById('type').value
  });
  const url = `${location.origin}${location.pathname}?${params}`;
  navigator.clipboard.writeText(url);
}

function restoreFromURL() {
  const params = new URLSearchParams(location.search);
  if (params.has('n')) {
    document.getElementById('count').value = params.get('n');
    generate();
  }
}
window.addEventListener('DOMContentLoaded', restoreFromURL);
Enter fullscreen mode Exit fullscreen mode

Complex: Base64

function shareState() {
  const state = { input: getText(), options: getOpts() };
  const encoded = btoa(unescape(encodeURIComponent(JSON.stringify(state))));
  navigator.clipboard.writeText(
    `${location.origin}${location.pathname}?d=${encoded}`
  );
}
Enter fullscreen mode Exit fullscreen mode

Every shared URL is a backlink. A working demo link converts 10x better than a cold homepage link.


3. Visible FAQ with Native HTML

<details>
  <summary>Is my data sent to a server?</summary>
  <p>No. Everything runs in your browser.</p>
</details>
Enter fullscreen mode Exit fullscreen mode

Native <details> — no JS, accessible, increases time-on-page.


Results

Applied to 15 tools in one day. ~3 min each after the first (which took 2 hours).

  • FAQPage validation passing ✅
  • Share URLs working ✅
  • 15 tools × 14 cross-links = internal link network
  • Measuring: 36 visits/week baseline → checking in 72h

Building browser-only tools? DonFlow — a budget drift detector, zero backend. Same philosophy.


📘 Free Resource

If you are building with a $0 budget, I wrote a playbook about what works, what doesn't, and how to think about the $0 phase.

📥 The $0 Developer Playbook — Free (PWYW)

Want the deep dive? The Extended Edition ($7) includes a 30-day launch calendar, 5 copy templates, platform comparison matrix, and revenue math calculator.

Top comments (0)