SPB Git forge
28commits 1branches 0releases
7.7 MBsize
maindefault branch
10 days agolast push
Python 66.3% TypeScript 22.7% JavaScript 8.6% HTML 1.4% CSS 0.7%
3.7 KB · 58 lines tsx
Raw Blame History
1import type { Metadata } from 'next';2import Link from 'next/link';3import { Container, PageHeader } from '@/components/ui/section';4import { BOT_UA, CONTACT_EMAIL, routes, SITE_URL } from '@/lib/site';56export const metadata: Metadata = { title: 'CompanyAtlasBot — our crawler', description: 'Identity of the Company Atlas crawler, what it collects, how it behaves, and how to opt out with robots.txt.' };78export default function BotPage() {9  return (10    <Container>11      <PageHeader eyebrow="Crawler" title={BOT_UA} lede="Company Atlas observes publicly accessible corporate web pages with a clearly identified, polite crawler. This page is linked from its User-Agent string." />12      <div className="prose-atlas max-w-3xl text-[15px] leading-relaxed text-ink-2">13        <h2>Identity</h2>14        <pre>15          <code>{`User-Agent: ${BOT_UA}/0.1 (+${SITE_URL}/bot; ${CONTACT_EMAIL})`}</code>16        </pre>17        <p>18          Requests originate from the MacLustr infrastructure operated by Simon-Pierre Boucher (Québec, Canada). Contact for any question, rate concern or removal request: <a href={`mailto:${CONTACT_EMAIL}`}>{CONTACT_EMAIL}</a>.19        </p>20        <h2>What we collect</h2>21        <ul>22          <li>Publicly accessible pages of company websites: homepage, about, careers and job boards, newsroom, blog and feeds, products, pricing, leadership, locations, documentation, changelogs, legal/terms/privacy, security, investor relations, partners, customers, sitemaps.</li>23          <li>Public structured data on those pages (JSON-LD, microdata, RSS/Atom) and public JSON endpoints that the page itself loads.</li>24          <li>Text and structure only. Images, videos, fonts, binaries and tracking scripts are not downloaded by default.</li>25        </ul>26        <h2>What we never do</h2>27        <ul>28          <li>Never log in, never bypass authentication, paywalls, CAPTCHAs or bot challenges; a challenge page is recorded as a failure and the sensor backs off.</li>29          <li>Never collect non-public or personal consumer data. People appear only in their public professional context on the company’s own pages.</li>30          <li>Never access private networks, localhost or infrastructure endpoints.</li>31        </ul>32        <h2>How it behaves</h2>33        <ul>34          <li>35            Honours <code>robots.txt</code> (including <code>Crawl-delay</code>) for <code>{BOT_UA}</code> and <code>*</code>.36          </li>37          <li>Per-domain concurrency of 1–2 and per-domain rate limits; adaptive schedules from every 5–15 minutes for very active pages to every 3–7 days for stable ones; conditional requests (ETag / Last-Modified) whenever the server supports them.</li>38          <li>Retry budgets with exponential backoff; sustained 429/403 responses pause the domain.</li>39          <li>Redirect and size caps; no endless pagination, calendars or faceted crawling.</li>40        </ul>41        <h2>Opting out</h2>42        <p>Add to your robots.txt:</p>43        <pre>44          <code>{`User-agent: ${BOT_UA}45Disallow: /`}</code>46        </pre>47        <p>48          Or disallow only specific paths. Changes are picked up within 24 hours. To also remove already collected observations of your pages, write to <a href={`mailto:${CONTACT_EMAIL}`}>{CONTACT_EMAIL}</a> from a company address; we suppress the surfaces and mark the history as unavailable rather than pretending it never existed.49        </p>50        <h2>Attribution</h2>51        <p>52          Every event on <Link href={routes.home()}>Company Atlas</Link> links to the public page it was detected on. See also the <Link href={routes.about()}>about page</Link> and the <Link href={routes.api()}>API terms</Link>.53        </p>54      </div>55    </Container>56  );57}58