How to embed Websec Badge
The WebSec badge increases trust, safety and confidence among your customers!
How to embed
Step 1: Get a badge id from websec. If you're eligible, you should recieve one shortly after a successful audit.
Step 2: Copy/paste the below code somewhere in your html. Replace <BADGE_ID>
with the one you recieved from websec.
<div style="width: 64px" data-websec-badge-id="<BADGE_ID>"></div>
<script defer src="https://websec.nl/snippets/badge/v2/badge.js"></script>
Make sure the the div has appropriate width. The badge will expand to full width.
With Next.js
Use the Script
component next.js provides and you're all good.
import Script from 'next/script'
import { useEffect } from 'react'
export function WebsecBadge() {
// re-mount on soft navigation
useEffect(() => {
if (window.WebSecSecureBadge) window.WebSecSecureBadge.initialize()
}, [])
return (
<>
<div style={{ width: 64 }} data-websec-badge-id="<BADGE_ID>"></div>
<Script strategy="lazyOnload" src="https://websec.nl/snippets/badge/v2/badge.js" />
</>
)
}
TypeScript
If you use typescript, make sure to add the type window.WebSecSecureBadge
globally.
declare global {
interface Window {
WebSecSecureBadge?: { initialize: () => void }
}
}
React Hydration errors
You should not encounter this with the Next Script
component. But if you're not satisfied with next/script
, try conditionally rendering in client instead.
Also notice we used next head
component. Script might not execute without it.
import Head from 'next/head'
export function WebsecBadge() {
const [isClient, setIsClient] = useState(false)
useEffect(() => setIsClient(true), [])
return isClient ? (
<>
<div style={{ width: 64 }} data-websec-badge-id="<BADGE_ID>"></div>
{/* notice the head tag is used, otherwise the script might not execute */}
<Head>
<script async src="https://websec.nl/snippets/badge/v2/badge.js"></script>
</Head>
</>
) : null
}
If you use Next /app
directory, take a look at the next script optimization guide for app dir.
Prevent layout shift
Ideally you should give the badge same height/width to prevent layout shifts.
<div style="width: 64px; height: 64px;" data-websec-badge-id="<BADGE_ID>"></div>
If you conditionally render the badge in nextjs like environements, try to wrap with another element and give the wrapper explicit height/width. Something like below:
return (
<div style={{ width: 64, height: 64 }}>
{isClient && (
<>
<div style={{ width: '100%' }} data-websec-badge-id="<BADGE_ID>"></div>
<Head>
<script async src="https://websec.nl/snippets/badge/v2/badge.js"></script>
</Head>
</>
)}
</div>
)
Dark mode
We support dark mode automatically through (prefers-color-scheme: dark)
css media.
Just embed the badge as you normally do and we promise, your night owl customers won't be lasered down with bright beam of light.
Development
For development environments, you may use one our test IDs. Make sure to replace it with a valid ID before going into production.
testid_valid
testid_invalid
testid_expired
Happy Hacking!