Infrastructure
· 9 checks — DNS, redirects, IPv6, crawlability, URL variants, and domain intelligence rolled into one auditable list.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>
<!-- Made in Framer · framer.com ✨ -->
<!-- Published Apr 20, 2026, 12:22 PM UTC -->
<html lang="en-US">
<head>
<meta charset="utf-8">
<script>try{if(localStorage.get("__framer_force_showing_editorbar_since")){const n=document.createElement("link");n.rel = "modulepreload";n.href="https://framer.com/edit/init.mjs";document.head.appendChild(n)}}catch(e){}</script>
<!-- Start of headStart -->
<!-- Snippet: legacy-headStart -->
<script src="https://cdn.amplitude.com/libs/analytics-browser-2.12.0-min.js.gz"></script>
<script src="https://cdn.amplitude.com/libs/plugin-session-replay-browser-1.7.0-min.js.gz"></script>
<!-- HubSpot -->
<script type="text/javascript" id="hs-script-loader" async defer src="//js.hs-scripts.com/8443689.js"></script>
<!-- Google tag (gtag.js) for Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XDQWKTB16G"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XDQWKTB16G');
</script>
<!-- SnippetEnd: legacy-headStart -->
<!-- End of headStart -->
<meta name="viewport" content="width=device-width">
<meta name="generator" content="Framer 1067533">
<title>Turn documentation into your product’s knowledge system | GitBook</title>
<meta name="description" content="GitBook is a technical documentation platform that connects your docs, product and users into a self-improving knowledge loop that answers user questions and identifies knowledge gaps. Docs-as-code support & AI insights included.">
<meta name="framer-search-index" content="https://framerusercontent.com/sites/nNji44mQfYtH9VMKskPg2/searchIndex-inIMsRXiWPYi.json">
<meta name="framer-search-index-fallback" content="https://framerusercontent.com/sites/nNji44mQfYtH9VMKskPg2/searchIndex-vpXls4K951l9.json">
<meta name="framer-html-plugin" content="disable">
<link href="https://framerusercontent.com/images/93a6peqhbHQaWP67zttmrKDazq4.png" rel="icon" media="(prefers-color-scheme: light)">
<link href="https://framerusercontent.com/images/93a6peqhbHQaWP67zttmrKDazq4.png" rel="icon" media="(prefers-color-scheme: dark)">
<link rel="apple-touch-icon" href="https://framerusercontent.com/images/RixubGcwFjRRIx4k36fKy7kV8Y.png">
<!-- Open Graph / Facebook -->
<meta property="og:type" content="website">
<meta property="og:title" content="Turn documentation into your product’s knowledge system | GitBook">
<meta property="og:description" content="GitBook is a technical documentation platform that connects your docs, product and users into a self-improving knowledge loop that answers user questions and identifies knowledge gaps. Docs-as-code support & AI insights included.">
<meta property="og:image" content="https://framerusercontent.com/assets/1IBeoRkP2RzVeGtGFLDk6w0lmEQ.png">
<!-- Twitter -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Turn documentation into your product’s knowledge system | GitBook">
<meta name="twitter:description" content="GitBook is a technical documentation platform that connects your docs, product and users into a self-improving knowledge loop that answers user questions and identifies knowledge gaps. Docs-as-code support & AI insights included.">
<meta name="twitter:image" content="https://framerusercontent.com/assets/1IBeoRkP2RzVeGtGFLDk6w0lmEQ.png">
<style data-framer-font-css>/* cyrillic */
@font-face {
font-family: 'Geist Mono';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/geistmono/v4/or3nQ6H-1_WfwkMZI_qYFrMdmgPn.woff2) format('woff2');
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* latin-ext */
@font-face {
font-family: 'Geist Mono';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/geistmono/v4/or3nQ6H-1_WfwkMZI_qYFrkdmgPn.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Geist Mono';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/geistmono/v4/or3nQ6H-1_WfwkMZI_qYFrcdmg.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* cyrillic */
@font-face {
font-family: 'Geist Mono';
font-style: normal;
font-weight: 600;
src: url(https://fonts.gstatic.com/s/geistmono/v4/or3nQ6H-1_WfwkMZI_qYFrMdmgPn.woff2) format('woff2');
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* latin-ext */
@font-face {
font-family: 'Geist Mono';
font-style: normal;
font-weight: 600;
src: url(https://fonts.gstatic.com/s/geistmono/v4/or3nQ6H-1_WfwkMZI_qYFrkdmgPn.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Geist Mono';
font-style: normal;
font-weight: 600;
src: url(https://fonts.gstatic.com/s/geistmono/v4/or3nQ6H-1_WfwkMZI_qYFrcdmg.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* cyrillic */
@font-face {
font-family: 'Geist Mono';
font-style: normal;
font-weight: 900;
src: url(https://fonts.gstatic.com/s/geistmono/v4/or3nQ6H-1_WfwkMZI_qYFrMdmgPn.woff2) format('woff2');
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* latin-ext */
@font-face {
font-family: 'Geist Mono';
font-style: normal;
font-weight: 900;
src: url(https://fonts.gstatic.com/s/geistmono/v4/or3nQ6H-1_WfwkMZI_qYFrkdmgPn.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Geist Mono';
font-style: normal;
font-weight: 900;
src: url(https://fonts.gstatic.com/s/geistmono/v4/or3nQ6H-1_WfwkMZI_qYFrcdmg.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* vietnamese */
@font-face {
font-family: 'Space Mono';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/spacemono/v17/i7dPIFZifjKcF5UAWdDRYE58RWq7.woff2) format('woff2');
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
font-family: 'Space Mono';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/spacemono/v17/i7dPIFZifjKcF5UAWdDRYE98RWq7.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Space Mono';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/spacemono/v17/i7dPIFZifjKcF5UAWdDRYEF8RQ.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face { font-family: "General Sans Variable Variable Bold"; src: url("https://framerusercontent.com/assets/e1k37xkXdS9Q44MSWSRA9disQ.woff2"); font-display: swap; font-style: normal; font-weight: 700 }
@font-face { font-family: "General Sans Variable Variable Bold Italic"; src: url("https://framerusercontent.com/assets/cv0T8sYmEDDhefCsjuLEPAFbVA.woff2"); font-display: swap; font-style: italic; font-weight: 700 }
@font-face { font-family: "ABC Favorit Bold"; src: url("https://framerusercontent.com/assets/W8a3dfvGM3NpHDSLEUaoVi842zk.woff2"); font-display: swap; font-style: normal; font-weight: 700 }
@font-face { font-family: "ABC Favorit Medium"; src: url("https://framerusercontent.com/assets/7gkmoeTdo7oHehnOqSx1EUKfIs.otf"); font-display: swap; font-style: normal; font-weight: 500 }
@font-face { font-family: "ABC Favorit Regular"; src: url("https://framerusercontent.com/assets/YWayyt1Iml0BqgKTFrny98dORY.otf"); font-display: swap; font-style: normal; font-weight: 400 }
@font-face { font-family: "Aeonik Regular"; src: url("https://framerusercontent.com/assets/ETxp2Sq5IAamocmvwrqiSrJVHic.otf"); font-display: swap; font-style: normal; font-weight: 400 }
@font-face { font-family: "General Sans Variable Bold"; src: url("https://framerusercontent.com/assets/jBnvoOD78v5pbEwCx33OGgRK2g.woff"); font-display: swap; font-style: normal; font-weight: 700 }
@font-face { font-family: "Inter"; src: url("https://framerusercontent.com/assets/5vvr9Vy74if2I6bQbJvbw7SY1pQ.woff2"); font-display: swap; font-style: normal; font-weight: 400; unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F }
@font-face { font-family: "Inter"; src: url("https://framerusercontent.com/assets/EOr0mi4hNtlgWNn9if640EZzXCo.woff2"); font-display: swap; font-style: normal; font-weight: 400; unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116 }
@font-face { font-family: "Inter"; src: url("https://framerusercontent.com/assets/Y9k9QrlZAqio88Klkmbd8VoMQc.woff2"); font-display: swap; font-style: normal; font-weight: 400; unicode-range: U+1F00-1FFF
BTLS Certificate Expiry & Recommendations77 days until leaf cert expires — 3 issues to addressREVIEW
Certificate validity
Recommended actions
- Enable HSTS: Strict-Transport-Security: max-age=31536000; includeSubDomains
- 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 & DeliveryCloudflareREVIEW
A+DNS Records2 A records, 6 ms lookupPASS
| A | 104.18.40.47, 172.64.147.209 |
| AAAA | 2606:4700:4407::6812:282f, 2606:4700:4402::ac40:93d1 |
| CNAME | — |
| NS | dahlia.ns.cloudflare.com, hugh.ns.cloudflare.com |
| MX | 10 aspmx.l.google.com 20 alt2.aspmx.l.google.com 20 alt1.aspmx.l.google.com 30 aspmx2.googlemail.com 30 aspmx3.googlemail.com |
| TXT | 8277640 8lncom12tnn1so22eu2gvaoe9q google-site-verification=9HmRew5KGY83Wzed-UhP71FdHHbV3qoUKP5h_Jenjeo google-site-verification=jOO29_Act4pfhfArsLE_txCdET-NuQQyqp1aAG5-H8s google-site-verification=mAI4k7A4RaCrAbrsgv7m8w6VPx0irEHUO3bHYEPPwdI openai-domain-verification=dv-5coTbUFl8eIUWr3rQkpd9lw2 SPF v=spf1 a mx include:_spf.google.com include:sendgrid.net include:stspg-customer.... |
| CAA | Lookup not available with standard resolver |
CAA record lookup requires a specialized DNS resolver. This check will be available in a future update.
Informational: CAA (Certification Authority Authorization) records weren't checked in this scan.
ARedirect Chain1 redirect(s), 94 ms totalPASS
https://gitbook.io
27 ms · HTTP/1.1
https://www.gitbook.com/
67 ms · HTTP/1.1 FINAL
| # | URL | Status | Time | Protocol | Server |
|---|---|---|---|---|---|
| 1 | https://gitbook.io | 302 | 27 ms | HTTP/1.1 | cloudflare |
| 2 | https://www.gitbook.com/ | 200 | 67 ms | HTTP/1.1 | cloudflare |
See the visual redirect chain in the HTTP Probe tab →
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
A+IPv6 ReadinessIPv6 reachable (2 ms)PASS
A+URL Variantswww/non-www, trailing slash, HTTP→HTTPSPASS
www / non-www
Preferred variant: non-www
HTTP → HTTPS
Consistent
A+Domain Intelligencegitbook.io — via Cloudflare, Inc, 12 years, 2 months oldPASS
1748 days
March 30, 2031
77 days
Issued by Google Trust Services
12 years, 2 months
Registered March 30, 2014
Status unknown
Protects against DNS spoofing
Unknown
2606:4700:4407::6812:282f
Cloudflare, Inc
Expiry timeline
Domain cannot be transferred without explicit unlock from the registrar. This protects against unauthorized transfers.
Registrar lock (clientTransferProhibited et al.) prevents unauthorized domain transfers — strongest defense against domain hijacking.
Source: ICANN / domain-security best practice