Certification markup generator.
The certification markup generator produces two outputs from your certificates' details: the schema.org Certification markup (JSON-LD) to add to your page, and the certificate record table that will appear on your site. Because both are generated from the same data, what the machine reads and what people see cannot drift apart; an expired certificate never enters the output.
How to use
- Enter the company name, legal name and website address
- For each certificate, enter its name with the edition, number, issuing body, scope and validity dates; add more certificates if needed
- Press Generate; see how the certificate record will look on your site, copy the JSON-LD and the table’s HTML separately, and read the warnings
The tool runs entirely in your browser — no data is sent, no cookies are written.
What does the tool generate?
Two outputs, from the same data. The first is JSON-LD to add to your page’s source: with schema.org’s Certification type, each certificate’s name, number, issuing body, scope, validity dates and the address of its record on your site. The second is the certificate record table that will appear on your site: the same details, in the form readers read. The reason for generating both from the same data is simple: if a detail written in the markup does not appear on the page, or changes on the page while staying old in the markup, the machine and the person read different things. How the table will look on your site is shown right above the HTML you will copy; the preview you see is that code itself, not a separate drawing.
At which level is each certificate marked up?
Management system certificates (such as ISO 9001 and ISO 14001) and site certificates belong to the organization; the tool writes them under the Organization node that describes the organization. Certificates covering a product (product labels such as OEKO-TEX) belong to the product; the tool writes them to a separate Product node and links the product to your organization as its manufacturer. The EU energy label is a separate option: the issuing body is the European Commission, and the number is the number of the product’s EPREL registration.
The Certification type entered schema.org in 2024; the properties used are the type’s own: name, certificationIdentification (certificate number), issuedBy (issuing body), about (scope), validFrom and expires (validity), certificationStatus (status) and url (the certificate’s record on your site).
Why does an expired certificate not enter the output?
Because it should not remain on the site as a claim. The tool does not mark up a certificate whose expiry date is before today, and it gives a warning: this certificate should come off your page too. A certificate whose expiry date is after today gets the “valid” status; if no expiry date is entered, no status is written, because calling a certificate valid without knowing it is valid makes the markup itself misleading. The tool never uses an inactive status value; the right place for a certificate whose validity has ended is not the markup but outside your site.
Why is a certificate’s name written with its edition?
Because two editions of the same standard can be valid at the same time. The 2026 edition of ISO 9001 was published on September 16, 2026, and the 2015 edition was withdrawn the same day; but organizations certified to 2015 have until September 30, 2029 to transition. On the site and in the markup, a certificate is written with the edition printed on it: “ISO 9001:2015” or “ISO 9001:2026”. If the tool sees an ISO, IEC or EN numbered standard written without its edition, it warns; for product programs without a year edition (such as OEKO-TEX), this warning does not appear.
Why can “ISO” not be the issuing body?
Because ISO does not certify and does not issue certificates; it writes the standard. Your certificate was issued by a certification body, and that is the correct issuing body. If “ISO” is written in the issuing body field, the tool warns. For the same reason, ISO does not allow certified companies to use its own logo either; the details of the logo rules are in the certificate logo use guide.
Does Google use this markup?
Not at organization level. Google’s merchant listings documentation supports certification markup only at product level and only for the EU energy label and vehicle CO2 classes in France and Germany; a product can carry at most ten certifications, and the issuing body and name are required. At Organization or service level, Google has no certification support. The markup’s value lies elsewhere: describing your certificates to every system that reads them as a machine, in the same way as the information on your page.
How does the certificate record table look on your site?
With your site’s own table styling. The generated HTML has no class names or styles; as soon as the table is added to your page, it looks like the other tables on your site. Its structure, however, is fixed: a table caption, columns for certificate, scope, issuing body, certificate number and validity, and one row per certificate. The first cell of each row is that row’s header; when a screen reader reads a cell, it also says which certificate the cell belongs to. The row’s ID comes from the anchor you write in the record address: the address in the markup and the row in the table point to the same place. In the preview, on a narrow screen the table scrolls sideways inside its own container; putting a wide table inside a scrollable container on phones on your site too keeps the page from overflowing sideways.
When does the tool warn?
Warnings are written below the output, together with the certificate they belong to. Two of them remove the certificate from the output; the others only show the place to correct:
- If the certificate has no name, that row is not included in the output at all.
- If the expiry date is before today, the certificate is not marked up; it should come off your page too.
- If an ISO, IEC or EN numbered standard is written without its edition, you are asked to write the name with its edition.
- If the issuing body is empty or says “ISO”, you are asked to write the body that actually issued the certificate, because the buyer looks the certificate up in its records.
- If no expiry date is entered, the certificate is marked up but the “valid” status is not written.
- If a product-level certificate has no product name, you are asked to write the product’s name.
None of the warnings verifies whether the certificate is actually valid; the tool reads only what you write. You verify the certificate’s validity from the issuing body’s records, and the buyer looks at the same records.
How do you add the output to your site?
- Put the certificate record table on your certificate page; each certificate’s row opens with the anchor you wrote in the record address (e.g. #iso-9001).
- Add the JSON-LD to the source of the same page; if your site has another Organization markup, the two should have the same @id value.
- Reflect product certificates on the product pages too: the product address in the markup should point to that page.
- When a certificate is renewed, run the tool again and update both outputs together; if one stays old, the machine and the person drift apart again.
For the rest of the markup describing your organization (address, contact, founding date), you can use the JSON-LD generator tool. How to build the certificate record on the page is covered in the certified manufacturer website guide, how the buyer verifies the certificate in the certificate verification guide, and what the scope is in the certificate scope entry.
Is my data sent anywhere?
No. The outputs are generated entirely in your browser: the information you enter is not sent to a server, not saved in the browser and is deleted when you close the page. If you want to keep the output, copy it and paste it into your own file.
Let’s read your certificate page together with this output: in a free preliminary review, we write down which certificate stands as a record and which only as a logo, and whether the markup matches the page.