Free tools

FAQ Schema Generator

The FAQ Schema Generator is a free tool that turns your questions and answers into FAQPage structured data (JSON-LD), plus a ready-to-paste Shopify section that shows the same FAQ on your page. It runs in your browser.

Good to know: Google stopped showing FAQ rich results on 7 May 2026. FAQ markup is still valid, and clear questions and answers on your page still help shoppers and AI tools. Only mark up questions that are visible on the page, word for word. Source: Google Search Central

ExampleExample questions for a made-up beard oil. Replace them with your own.

  1. 34/300 characters

    54/2000 characters

  2. 21/300 characters

    68/2000 characters

  3. 27/300 characters

    82/2000 characters

  4. 0/300 characters

    0/2000 characters

  5. 0/300 characters

    0/2000 characters

  6. 0/300 characters

    0/2000 characters

  7. 0/300 characters

    0/2000 characters

Need more questions? Make my code gives you 4 more empty rows.

Free · No sign-up · Runs in your browser

Ready

3 questions ready

Three ways to add it: pick the one that suits your site.

JSON-LD for any website

Add this to the page that shows these questions and answers, word for word. Use it on one page only, not on every page of your site.

JSON-LD script tag

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "How long does a 30 ml bottle last?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "About two months if you use three or four drops a day."
      }
    },
    {
      "@type": "Question",
      "name": "Is it fragrance-free?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Yes. It's made with jojoba and argan oil and has no added fragrance."
      }
    },
    {
      "@type": "Question",
      "name": "Do you ship outside the US?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Yes, we ship to most countries. You'll see the delivery time and cost at checkout."
      }
    }
  ]
}
</script>

Shopify section (shows the FAQ and adds the markup)

In Shopify admin, go to Online Store, then Themes. Next to your live theme, click the three dots and choose Edit code. In the Sections folder, add a new section called geo-faq and replace its contents with this code. Save. Then click Customize, open the page or product template you want, choose Add section, and pick FAQ.

Section filesections/geo-faq.liquid

{%- comment -%}
  FAQ section made with GEO's free FAQ Schema Generator: https://usegeo.app/tools/faq-schema-generator
  Shows your questions and answers on the page and adds FAQPage structured data (JSON-LD) built from
  the same text, so the two always match. Change the questions in the theme editor (Customize).
{%- endcomment -%}
{%- assign geo_qa_count = 0 -%}
{%- for block in section.blocks -%}
  {%- if block.settings.question != blank and block.settings.answer != blank -%}
    {%- assign geo_qa_count = geo_qa_count | plus: 1 -%}
  {%- endif -%}
{%- endfor -%}

{%- if geo_qa_count > 0 -%}
  <div class="geo-qa">
    {%- if section.settings.heading != blank -%}
      <h2 class="geo-qa__heading">{{ section.settings.heading | escape }}</h2>
    {%- endif -%}
    {%- for block in section.blocks -%}
      {%- if block.settings.question != blank and block.settings.answer != blank -%}
        <div class="geo-qa__item" {{ block.shopify_attributes }}>
          <h3 class="geo-qa__question">{{ block.settings.question | escape }}</h3>
          <p class="geo-qa__answer">{{ block.settings.answer | escape | newline_to_br }}</p>
        </div>
      {%- endif -%}
    {%- endfor -%}
  </div>

  <script type="application/ld+json">
    {
      "@context": "https://schema.org",
      "@type": "FAQPage",
      "mainEntity": [
        {%- assign geo_qa_comma = '' -%}
        {%- for block in section.blocks -%}
          {%- if block.settings.question != blank and block.settings.answer != blank -%}
            {{ geo_qa_comma }}
            {
              "@type": "Question",
              "name": {{ block.settings.question | json }},
              "acceptedAnswer": {
                "@type": "Answer",
                "text": {{ block.settings.answer | json }}
              }
            }
            {%- assign geo_qa_comma = ',' -%}
          {%- endif -%}
        {%- endfor %}
      ]
    }
  </script>
{%- endif -%}

{% stylesheet %}
  .geo-qa { max-width: 72rem; margin: 0 auto; padding: 2rem 1.5rem; }
  .geo-qa__item { padding: 1rem 0; border-top: 1px solid rgba(0, 0, 0, 0.1); }
  .geo-qa__question { margin: 0 0 0.5rem; }
  .geo-qa__answer { margin: 0; }
{% endstylesheet %}

{% schema %}
{
  "name": "FAQ",
  "tag": "section",
  "class": "geo-qa-section",
  "max_blocks": 20,
  "disabled_on": {
    "groups": [
      "header",
      "footer"
    ]
  },
  "settings": [
    {
      "type": "text",
      "id": "heading",
      "label": "Heading",
      "default": "Questions and answers"
    }
  ],
  "blocks": [
    {
      "type": "question",
      "name": "Question",
      "settings": [
        {
          "type": "text",
          "id": "question",
          "label": "Question"
        },
        {
          "type": "textarea",
          "id": "answer",
          "label": "Answer"
        }
      ]
    }
  ],
  "presets": [
    {
      "name": "FAQ",
      "blocks": [
        {
          "type": "question",
          "settings": {
            "question": "How long does a 30 ml bottle last?",
            "answer": "About two months if you use three or four drops a day."
          }
        },
        {
          "type": "question",
          "settings": {
            "question": "Is it fragrance-free?",
            "answer": "Yes. It's made with jojoba and argan oil and has no added fragrance."
          }
        },
        {
          "type": "question",
          "settings": {
            "question": "Do you ship outside the US?",
            "answer": "Yes, we ship to most countries. You'll see the delivery time and cost at checkout."
          }
        }
      ]
    }
  ]
}
{% endschema %}

Your questions are already filled in. Change them later in Customize: the FAQ on the page and the markup change together.

Store-wide questions, like shipping and returns, belong on one page, such as your FAQ or shipping page. A product template shows the same section on every product, so for questions about one product, use the product metafield version.

A different FAQ on each product (product metafield)

Each product keeps its own questions in a product field, and one section shows them with the markup.

  1. Create the field once. In Shopify admin, open any product. In the Metafields section, click Add definition. Name it FAQ, check that Namespace and key says custom.faq, click Select type and choose JSON (under Advanced), then save.

  2. Fill it in for each product. Open the product, click its FAQ field, paste that product's questions and answers in the format below, and save.

    Value for this product's FAQ field (JSON)

    [
      {
        "q": "How long does a 30 ml bottle last?",
        "a": "About two months if you use three or four drops a day."
      },
      {
        "q": "Is it fragrance-free?",
        "a": "Yes. It's made with jojoba and argan oil and has no added fragrance."
      },
      {
        "q": "Do you ship outside the US?",
        "a": "Yes, we ship to most countries. You'll see the delivery time and cost at checkout."
      }
    ]
  3. Add the section once. In Edit code, add a new section called geo-product-faq, replace its contents with the code below and save. Then click Customize, open your product template, choose Add section, and pick Product FAQ. Products with an empty FAQ field show nothing.

    Section filesections/geo-product-faq.liquid

    {%- comment -%}
      Product FAQ section made with GEO's free FAQ Schema Generator: https://usegeo.app/tools/faq-schema-generator
      Reads each product's FAQ from the product metafield custom.faq (type JSON), written like this:
      [{"q": "Your question?", "a": "Your answer."}]
      Shows the questions and answers and adds FAQPage structured data from the same text.
      Products with an empty FAQ field show nothing.
    {%- endcomment -%}
    {%- assign geo_qa_items = product.metafields.custom.faq.value -%}
    {%- assign geo_qa_count = 0 -%}
    {%- for item in geo_qa_items -%}
      {%- if item.q != blank and item.a != blank -%}
        {%- assign geo_qa_count = geo_qa_count | plus: 1 -%}
      {%- endif -%}
    {%- endfor -%}
    
    {%- if geo_qa_count > 0 -%}
      <div class="geo-qa">
        {%- if section.settings.heading != blank -%}
          <h2 class="geo-qa__heading">{{ section.settings.heading | escape }}</h2>
        {%- endif -%}
        {%- for item in geo_qa_items -%}
          {%- if item.q != blank and item.a != blank -%}
            <div class="geo-qa__item">
              <h3 class="geo-qa__question">{{ item.q | escape }}</h3>
              <p class="geo-qa__answer">{{ item.a | escape | newline_to_br }}</p>
            </div>
          {%- endif -%}
        {%- endfor -%}
      </div>
    
      <script type="application/ld+json">
        {
          "@context": "https://schema.org",
          "@type": "FAQPage",
          "mainEntity": [
            {%- assign geo_qa_comma = '' -%}
            {%- for item in geo_qa_items -%}
              {%- if item.q != blank and item.a != blank -%}
                {{ geo_qa_comma }}
                {
                  "@type": "Question",
                  "name": {{ item.q | json }},
                  "acceptedAnswer": {
                    "@type": "Answer",
                    "text": {{ item.a | json }}
                  }
                }
                {%- assign geo_qa_comma = ',' -%}
              {%- endif -%}
            {%- endfor %}
          ]
        }
      </script>
    {%- endif -%}
    
    {% stylesheet %}
      .geo-qa { max-width: 72rem; margin: 0 auto; padding: 2rem 1.5rem; }
      .geo-qa__item { padding: 1rem 0; border-top: 1px solid rgba(0, 0, 0, 0.1); }
      .geo-qa__question { margin: 0 0 0.5rem; }
      .geo-qa__answer { margin: 0; }
    {% endstylesheet %}
    
    {% schema %}
    {
      "name": "Product FAQ",
      "tag": "section",
      "class": "geo-qa-section",
      "enabled_on": {
        "templates": [
          "product"
        ]
      },
      "settings": [
        {
          "type": "text",
          "id": "heading",
          "label": "Heading",
          "default": "Questions and answers"
        }
      ],
      "presets": [
        {
          "name": "Product FAQ"
        }
      ]
    }
    {% endschema %}
    

Source: Shopify Help Center

How the FAQ looks on your page

How long does a 30 ml bottle last?
About two months if you use three or four drops a day.
Is it fragrance-free?
Yes. It's made with jojoba and argan oil and has no added fragrance.
Do you ship outside the US?
Yes, we ship to most countries. You'll see the delivery time and cost at checkout.

The GEO app writes FAQs for your products from your own product details. You approve them, and it adds them to your store with the markup.

See how GEO writes FAQs that AI can quote

What this tool checks

  • Builds FAQPage JSON-LD that follows schema.org
  • Gives you a Shopify section that shows the FAQ and adds the markup from the same text
  • Flags empty, repeated or advert-style answers
  • Escapes your text so it can't break your page

How this tool works

  • Everything runs in your browser. Your questions aren't sent to us, unless JavaScript is off in your browser: then the form is sent to our server once to build the code, and nothing is kept.
  • The output follows schema.org's FAQPage type and the properties Google last documented: a FAQPage with a mainEntity list, each Question with a name and an acceptedAnswer, and each Answer with text. Source: schema.org FAQPage
  • We escape quotes, line breaks and the characters that could break a script tag.
  • The Shopify section shows the FAQ and adds the markup from the same text, so they always match.
  • Google no longer shows FAQ rich results (since 7 May 2026), so we don't promise any change in how your page looks in Google. Source: Google Search Central

Maintained by GEO. Updated .

Questions people ask

Does FAQ schema still work in 2026?

The markup is still valid, but Google no longer shows FAQ rich results. Google limited them to well-known government and health sites in 2023, stopped showing them on 7 May 2026, and removed the documentation in June 2026. Clear questions and answers on the page still help shoppers, and AI tools can read them.

Source: Google Search Central

Is FAQ schema bad for SEO now?

We found no statement from Google that FAQ markup harms a page. Google's general rule still applies: structured data must match what's visible on the page. Markup for questions people can't see, or the same FAQ copied onto every page, is what to avoid.

Source: Google: AI features and your website

Do AI assistants read FAQs?

Microsoft's Bing team says question-and-answer pairs can often be lifted word for word into AI answers, and warns that answers hidden in tabs or expandable menus may not be read. So keep answers short, factual and visible. Google says its AI features need no special markup.

Sources: Microsoft Advertising, Google's AI optimization guide

How do I add FAQ schema to Shopify?

The simplest way is the Shopify section above: add it as a new section file in Online Store, Themes, Edit code, then add the FAQ section to a product or page template in the theme editor. It shows the questions and adds the markup from the same text. For a different FAQ on each product, use the product metafield version.

Should I put FAQ schema in theme.liquid?

No. theme.liquid loads on every page, so the same FAQ markup would appear on pages that don't show those questions. Google's old FAQ rules said to mark up a repeated FAQ only once on your site, and each page's markup should match what that page shows.

Source: Google's FAQ rules (archived March 2026)

What should my product FAQs answer?

The questions shoppers ask before buying: size and fit, what it's made of, how to use it, who it suits, shipping times and returns. Answer with facts, not praise. If you don't know an answer, find out rather than guess.

More free tools

  • Product Schema Checker

    See which product facts Google and AI shopping tools can read from your product page.

  • AI Bot Checker

    Check if your product copy sounds generic, and which facts shoppers and AI are missing.

  • AI Visibility Checker

    See if ChatGPT, Gemini and Perplexity recommend your product, and who they pick instead.

See all free tools

Updated · Made by GEO