HTML Formatterhtmlformatteronline.com

Testimonials

A quote grid with avatars and attribution, using real blockquote markup.

sectiontestimonialquotesocial proofgrid
<section class="quotes">
  <h2>What people say</h2>
  <p class="sub">From teams shipping on Acme every day.</p>

  <div class="grid">

    <figure>
      <blockquote>
        <p>We replaced four separate tools with this. The part I did not expect was how much time we got
        back from not maintaining the glue between them.</p>
      </blockquote>
      <figcaption>
        <img src="https://placehold.co/80x80/3b4fe4/ffffff?text=PR" alt="">
        <span><strong>Priya Raman</strong> Head of platform, Northwind</span>
      </figcaption>
    </figure>

    <figure class="wide">
      <blockquote>
        <p>Our deploy went from eleven minutes to under forty seconds. I checked three times because
        I did not believe it.</p>
      </blockquote>
      <figcaption>
        <img src="https://placehold.co/80x80/1f8a5b/ffffff?text=TO" alt="">
        <span><strong>Tomás Oliveira</strong> Staff engineer, Lumen</span>
      </figcaption>
    </figure>

    <figure>
      <blockquote>
        <p>The documentation is the reason we chose it. Everything I needed was on the page I was
        already looking at.</p>
      </blockquote>
      <figcaption>
        <img src="https://placehold.co/80x80/b7791f/ffffff?text=AN" alt="">
        <span><strong>Ada Nwosu</strong> CTO, Fieldwork</span>
      </figcaption>
    </figure>

  </div>
</section>

How it works

figure, blockquote and figcaption — in that order. This is the pattern the HTML specification gives for a quotation with attribution, and it matters: putting the attribution inside the <blockquote> claims that the person said their own name and job title as part of the quote. The <figcaption> sits outside it.

The quote mark is a pseudo-element. A literal " in the markup would be read out by a screen reader and would end up in the text if anyone copied the quote. As a ::before it is purely visual, which is what a decorative glyph should be.

Avatars have empty alt text. The name is right beside the photo. An alt of "Priya Raman" makes a screen reader say the name twice in a row.

One quote spans two columns. Three equal boxes in a row reads as a table of data rather than as people speaking. Promoting one and giving it a larger type size gives the section a focal point, and it costs one rule.

The span is removed on mobile. Without the 900-pixel rule, grid-column: span 2 on a single-column grid causes an overflow in some browsers rather than being ignored.

Accessibility notes

Real <blockquote> elements are announced as quotations, so a screen reader user knows where the quote starts and ends rather than hearing it run into the surrounding text.

If you add a star rating, give it a text label the way the product card does — a row of star glyphs is announced as "black star black star black star" or as nothing at all.

The decorative quote mark uses a CSS escape (\201C) rather than an HTML entity, so it cannot end up in the accessibility tree or in copied text.

Making it yours

Specific, concrete quotes work and generic praise does not. "Eleven minutes to under forty seconds" is worth ten testimonials saying the product is great. If the quotes you have are all generic, the section is better left out than filled.

Name, role and company together. A first name alone reads as invented, and most readers treat it that way.

For a carousel instead of a grid: do not. Rotating testimonials are skipped by almost everyone, they move while people are reading, and only the first one is ever indexed.

Related templates

Check your version

Once you have edited this, the HTML validator will catch any tag you left unclosed, and the formatter will tidy the indentation. Both run in your browser.