Infrastructure
· 17 checks — DNS, redirects, IPv6, crawlability, URL variants, and domain intelligence rolled into one auditable list.BDNSSECUnsigned (DNSSEC not deployed)REVIEW
BCAA RecordsNo CAA records (any CA may issue certificates)REVIEW
CReverse DNSAction0/2 IPs match cert SANREVIEW
BRedirect Chain2 redirect(s), 672 ms totalREVIEW
https://garbau-git-preview-garbau.vercel...
173 ms · HTTP/1.1
https://vercel.com/sso-api?url=https%3A%...
443 ms · HTTP/1.1
https://vercel.com/login?next=%2Fsso-api...
55 ms · HTTP/1.1 FINAL
| # | URL | Status | Time | Protocol | Server |
|---|---|---|---|---|---|
| 1 | https://garbau-git-preview-garbau.vercel... | 302 | 173 ms | HTTP/1.1 | Vercel |
| 2 | https://vercel.com/sso-api?url=https%3A%... | 307 | 443 ms | HTTP/1.1 | Vercel |
| 3 | https://vercel.com/login?next=%2Fsso-api... | 200 | 55 ms | HTTP/1.1 | Vercel |
See the visual redirect chain in the HTTP Probe tab →
Each redirect adds latency. Try to minimize the chain to 1 hop.
Redirect chain — each hop adds latency; combine into one redirect where possible.
Source: Google Search Central / web.dev
If permanent, use 301 instead.
302 (Found) is for genuinely temporary redirects — if this redirect is permanent, switch to 301 to preserve SEO equity.
Learn more ▾ ▴
Search engines treat 302 as temporary, keeping the original URL indexed and not transferring full link equity to the destination. Use 301 (Moved Permanently) for permanent redirects (HTTP→HTTPS, www-vs-non-www, URL restructures).
Source: Google Search Central
CIPv6 ReadinessActionNo IPv6 supportREVIEW
IPv6 support is increasingly important for global accessibility. About 40% of internet users have IPv6 connectivity.
No AAAA records — same impact as 'no IPv6 (AAAA) records'; IPv6-preferring clients pay extra latency falling back to IPv4.
Source: Google IPv6 stats
CCrawlabilityActionrobots.txt present, sitemap with 0 URLsREVIEW
Search engines may not be able to parse the sitemap. Fix XML validation errors.
An unparseable sitemap is silently ignored by Google — the URLs it advertises are never queued for crawl.
Learn more ▾ ▴
Google's sitemap parser is strict about XML validity. A single unescaped `&` or unclosed tag invalidates the whole file. Run your sitemap through a validator (Search Console's Sitemaps report flags it) and fix the offending entry. Most generators escape correctly; mistakes usually come from manually-written entries.
Source: sitemaps.org / Google Search Central
An empty sitemap provides no value. Add <url> entries for your pages.
An empty sitemap signals 'no content to index' to Google — actively harmful versus having no sitemap at all.
Learn more ▾ ▴
Google compares URLs in the sitemap against URLs it has crawled. An empty sitemap on a site with thousands of pages signals abandonment. Either populate it correctly (most CMSes auto-generate) or delete the file and let Google crawl normally.
Source: Google Search Central / sitemaps.org
Add a 'Sitemap:' directive to robots.txt so search engines can discover your sitemap.
robots.txt omits Sitemap: directive — crawlers must fetch /sitemap.xml by convention; reliable but missing the explicit hint.
Source: sitemaps.org
<!DOCTYPE html><html data-dpl-id="dpl_AHhoLu6JCsdqkuZF7n9itZ4fkh3k" class="VEU71W_className X0u9Hq_className VEU71W_variable X0u9Hq_variable dash" lang="en-US"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/><link rel="stylesheet" href="/_next/static/immutable/chunks/052uy04jbbw3m.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/immutable/chunks/1jc8son67d-_8.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/immutable/chunks/1-9yb6i_h9yg1.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/immutable/chunks/3vqqyy4w38wyl.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/immutable/chunks/1krd_81cec7ra.js"/><script src="/_next/static/immutable/chunks/3rxy6d_dsn9uu.js" async=""></script><script src="/_next/static/immutable/chunks/2ddjettp8-k6m.js" async=""></script><script src="/_next/static/immutable/chunks/2f0i_nrfelq8q.js" async=""></script><script src="/_next/static/immutable/chunks/2nmfvff0ovoiz.js" async=""></script><script src="/_next/static/immutable/chunks/2613ojn1riu09.js" async=""></script><script src="/_next/static/immutable/chunks/turbopack-2kua30ffxumth.js" async=""></script><script src="/_next/static/immutable/chunks/30qowpix7kex-.js" async=""></script><script src="/_next/static/immutable/chunks/3v9tdjl8qjmbi.js" async=""></script><script src="/_next/static/immutable/chunks/2oe_za_zllk5s.js" async=""></script><script src="/_next/static/immutable/chunks/19s1yb-u8-3vg.js" async=""></script><script src="/_next/static/immutable/chunks/3_6-899gzxoa5.js" async=""></script><script src="/_next/static/immutable/chunks/18at33djaad4m.js" async=""></script><script src="/_next/static/immutable/chunks/1l4w1s-k7kzmm.js" async=""></script><script src="/_next/static/immutable/chunks/3p1y64i679a4d.js" async=""></script><script src="/_next/static/immutable/chunks/0ei349j8-h367.js" async=""></script><script src="/_next/static/immutable/chunks/10y7jl7mdsvdu.js" async=""></script><script src="/_next/static/immutable/chunks/1t_z0aybyumpx.js" async=""></script><script src="/_next/static/immutable/chunks/0ur9dkj8yjfv-.js" async=""></script><script src="/_next/static/immutable/chunks/0vle7ycu0xqh3.js" async=""></script><script src="/_next/static/immutable/chunks/1eno8do7hme24.js" async=""></script><script src="/_next/static/immutable/chunks/02_l8g63wwss8.js" async=""></script><script src="/_next/static/immutable/chunks/28sberjlahv9o.js" async=""></script><script src="/_next/static/immutable/chunks/1pqvy2y216xg3.js" async=""></script><script src="/_next/static/immutable/chunks/0b23-dqqac0_7.js" async=""></script><script src="/_next/static/immutable/chunks/059l4xqtr--34.js" async=""></script><script src="/_next/static/immutable/chunks/36wk-444ysue9.js" async=""></script><script src="/_next/static/immutable/chunks/3j1w9e3f70pll.js" async=""></script><script src="/_next/static/immutable/chunks/2ofm-ud-1flp_.js" async=""></script><script src="/_next/static/immutable/chunks/1aiwlgzhubjj2.js" async=""></script><script src="/_next/static/immutable/chunks/1ccrxb0-nek2-.js" async=""></script><script src="/_next/static/immutable/chunks/2c54sf2e_8tva.js" async=""></script><script src="/_next/static/immutable/chunks/34gj2zo4ats3q.js" async=""></script><script src="/_next/static/immutable/chunks/2ll2trtp9yoww.js" async=""></script><script src="/_next/static/immutable/chunks/1bti72x80896j.js" async=""></script><script src="/_next/static/immutable/chunks/2kmi932utblr-.js" async=""></script><script src="/_next/static/immutable/chunks/0ambgv387vyv1.js" async=""></script><script src="/_next/static/immutable/chunks/1ev9b-6wt-uuq.js" async=""></script><script src="/_next/static/immutable/chunks/454ldg3hxfogb.js" async=""></script><script src="/_next/static/immutable/chunks/2jr1ys58ch4uk.js" async=""></script><script src="/_next/static/immutable/chunks/24k62h10zor6k.js" async=""></script><script src="/_next/static/immutable/chunks/02361x3ym-rxc.js" async=""></script><script src="/_next/static/immutable/chunks/165tic2ofoshr.js" async=""></script><script src="/_next/static/immutable/chunks/0kzvtj3ji3_q2.js" async=""></script><script src="/_next/static/immutable/chunks/2ceorktced_ov.js" async=""></script><script src="/_next/static/immutable/chunks/3wb7k510ah06q.js" async=""></script><script src="/_next/static/immutable/chunks/1966ac9cp3_ed.js" async=""></script><script src="/_next/static/immutable/chunks/1uy91637cm1yu.js" async=""></script><script src="/_next/static/immutable/chunks/20i-jxmxemyj8.js" async=""></script><script src="/_next/static/immutable/chunks/1fq602uaggsgv.js" async=""></script><script src="/_next/static/immutable/chunks/2ssqthv1mxvjl.js" async=""></script><script src="/_next/static/immutable/chunks/3lx6bs40u4etk.js" async=""></script><script src="/_next/static/immutable/chunks/1zymr_h40v7q1.js" async=""></script><script src="/_next/static/immutable/chunks/07-8o5huwt7_r.js" async=""></script><script src="/_next/static/immutable/chunks/3a-d7753nafx3.js" async=""></script><script src="/_next/static/immutable/chunks/0dco3vu4tmb4k.js" async=""></script><script src="/_next/static/immutable/chunks/1ljva5st7dbco.js" async=""></script><script src="/_next/static/immutable/chunks/1xqtq9hjstw_o.js" async=""></script><script src="/_next/static/immutable/chunks/2imkxymtafexi.js" async=""></script><script src="/_next/static/immutable/chunks/3sgzqeqyub54z.js" async=""></script><script src="/_next/static/immutable/chunks/0sdz2gm2iam4d.js" async=""></script><script src="/_next/static/immutable/chunks/2jc1svhqvilv-.js" async=""></script><script src="/_next/static/immutable/chunks/06gtbyrlo6ujx.js" async=""></script><script src="/_next/static/immutable/chunks/0h5secw6bhuh7.js" async=""></script><script src="/_next/static/immutable/chunks/1lg0mgob3km5k.js" async=""></script><script src="/_next/static/immutable/chunks/2gr7k3xe9bpsq.js" async=""></script><script src="/_next/static/immutable/chunks/15n18qpy0v7a3.js" async=""></script><script src="/_next/static/immutable/chunks/29aybxq854p_6.js" async=""></script><script src="/_next/static/immutable/chunks/21pgw-zn6duxm.js" async=""></script><link rel="preload" href="/_next/static/immutable/chunks/431j1z8s1inmp.css" as="style"/><link rel="preload" href="/_next/static/immutable/chunks/1-vyfk6cbr430.css" as="style"/><link rel="preload" href="/_next/static/immutable/chunks/3wf5ilwo0gl0i.css" as="style"/><link rel="expect" href="#_R_" blocking="render"/><meta name="color-scheme" content="dark light"/><meta name="next-size-adjust" content=""/><script>(function ar(a,b){let c=!1;try{let a=localStorage.getItem("zeit-theme");c="dark"===a||"light"!==a&&window.matchMedia("(prefers-color-scheme: dark)").matches}catch{c=window.matchMedia("(prefers-color-scheme: dark)").matches}let d=c?b:a,e=document.querySelectorAll('meta[name="theme-color"]');if(0===e.length){let a=document.createElement("meta");a.setAttribute("name","theme-color"),document.head.appendChild(a),e=document.querySelectorAll('meta[name="theme-color"]')}e.forEach(a=>{a.setAttribute("content",d)})})("#FAFAFA","#000000");</script><script>(({protect:a})=>{function b(a){return new Promise((b,c)=>{if(document.querySelector(`script[src="${a}"]`))return void b();let d=document.createElement("script");d.src=a,d.async=!0,d.onload=()=>b(),d.onerror=a=>{console.error("Error loading script",a),c(a)},document.head.appendChild(d)})}var c=class a{#a;#b;#c=0;constructor(){let{promise:b,resolve:c}=a.#d();this.#a=b,this.#b=c,this.#e(),window.addEventListener("online",this.#f),window.addEventListener("visibilitychange",this.#f)}getChallenge=async()=>(await this.#g(),await this.#a.then(a=>"function"==typeof a?a():a));#f=()=>{if(document.hidden)return;let{promise:b,resolve:c}=a.#d();this.#a=b,this.#b=c,window.V_C=[],window.V_C.push=c;let d=document.querySelector('script[src*="c.js"]');d&&d.remove(),this.#c+=1};#e=()=>{if(window.V_C){let a=window.V_C.pop();a&&this.#b(a)}else window.V_C=[],window.V_C.push=this.#b};#g=()=>{let a=new URL("/149e9513-01fa-4fb0-aad4-566afd725d1b/2d206a39-8ed7-437e-a3be-862e0f06eea3/a-4-a/c.js",window.location.origin);return a.searchParams.set("i",String(this.#c)),a.searchParams.set("v",String(3)),a.searchParams.set("h",window.location.host),b(a.pathname+a.search)};#h=()=>{window.V_C=void 0};static #d(){let a,b;return{promise:new Promise((c,d)=>{a=c,b=d}),resolve:a,reject:b}}},d=class a{#a=!1;#b;constructor(a){this.#b=a}get loaded(){return this.#a}load=async()=>{this.#a||await this.#f()};#c=()=>{if(typeof globalThis.window>"u")throw Error("KPSDK is not available in the server");if(!window.KPSDK)throw Error("KPSDK is not loaded");let b=this.#b.map(b=>{let c=a.#e(b.path);return{domain:c.host,path:c.pathname,method:b.method}});try{window.KPSDK.configure(b)}catch(a){console.error("Error configuring KPSDK...",a)}};#f=async()=>{let a=this;return new Promise((c,d)=>{let e=()=>{document.removeEventListener("kpsdk-load",e),this.#c()},f=()=>{document.removeEventListener("kpsdk-ready",f),a.#a=!0,c()};document.addEventListener("kpsdk-load",e,{once:!0}),document.addEventListener("kpsdk-ready",f,{once:!0}),b("/149e9513-01fa-4fb0-aad4-566afd725d1b/2d206a39-8ed7-437e-a3be-862e0f06eea3/p.js").catch(a=>{document.removeEventListener("kpsdk-load",e),document.removeEventListener("kpsdk-ready",f),d(a)})})};static #e(a){let b;try{b=new URL(a)}catch{b=new URL(a,location.origin)}return b}},e=a=>{let b=a.replace(/[.?+^$[\]\\(){}|-]/g,"\\$&").split("*").join(".*");return RegExp(`^${b}$`)},f=({path:a,pattern:b})=>-1!==a.search(b);!function({protect:a=[]}){let b;for(let b of a)if(b.advancedOptions?.checkLevel!==void 0&&"deepAnalysis"!==b.advancedOptions.checkLevel&&"basic"!==b.advancedOptions.checkLevel)throw Error(`Invalid checkLevel "${b.advancedOptions.checkLevel}" for route "${b.path}". Must be one of: deepAnalysis, basic`);let g=new c,h=new d(a);(async function(a,b,c){let d=XMLHttpRequest.prototype.open,g=XMLHttpRequest.prototype.send;XMLHttpRequest.prototype.open=function(a,b,c,e,f){return this._requestUrl=b.toString(),this._requestMethod=a,d.call(this,a,b,c??!0,e,f)},XMLHttpRequest.prototype.send=async function(d){let h=this.
BTLS Certificate Expiry & Recommendations31 days until leaf cert expires — 2 issues to addressREVIEW
Certificate validity
Recommended actions
- Enable DNSSEC on your domain for DNS spoofing protection
- Enable OCSP stapling on your TLS server to remove a CA roundtrip and protect user privacy
BCDN & DeliveryDocument on Vercel; assets also on AkamaiREVIEW
Asset hosts on a CDN
- assets.vercel.com — Akamai · assets: 10
- vercel.com — Vercel · assets: 6 · Cache Status: HIT
Other asset hosts
- accounts.google.com — assets: 3 · Google
- si-next.vercel-scripts.com — assets: 1 · below probe threshold
BCDN Cache ObservabilityNo CDN cache-status headers in the responseREVIEW
BOperational Status PageNo status page link detectedREVIEW
ADNS Records2 A records, 29 ms lookupPASS
| A | 216.198.79.195, 64.29.17.195 |
| AAAA | — |
| CNAME | — |
| NS | — |
| MX | — |
| TXT | — |
| CAA | Lookup not available with standard resolver |
SPF helps prevent email spoofing. Add a TXT record starting with 'v=spf1'.
Without SPF, receiving servers can't validate sending IPs — your domain is easier to spoof in phishing.
Learn more ▾ ▴
SPF complements DMARC. Both should be published. SPF records list authorized sending IPs (e.g., `v=spf1 include:_spf.google.com ~all` for Google Workspace). After publishing, verify in Google Postmaster Tools or mxtoolbox.
Source: RFC 7208 (SPF)
A+Subdomain TakeoverNo subdomain takeover risk detectedPASS
A+Multi-Resolver DNS SpeedMean 15ms across 3 resolvers (spread 24ms)PASS
A+URL Variantswww/non-www, trailing slash, HTTP→HTTPSPASS
www / non-www
HTTP → HTTPS
Consistent
A+HTTP Probe TimingTotal 242 ms — DNS, TCP, TLS, TTFB, content transfer breakdownPASS
Connection waterfall
A+Health Check EndpointHealth endpoint at https://garbau-git-preview-garbau.vercel.app/health (HTTP 200)PASS
Domain IntelligenceDomain intelligence data not availableINFO
RDAP and WHOIS lookup both failed