SPB Git forge
38commits 1branches 0releases
338.7 MBsize
maindefault branch
3 h agolast push
HTML 53.9% TypeScript 44.5% JavaScript 0.6% SQL 0.5%
3.8 KB

# equinix — Equinix IBX data centers

Config config/connectors/equinix.yaml
Parser apps/worker/src/connectors/operators1/equinix.ts → equinix_facility_v1
Kind / priority operator / 1
License / attribution Publicly accessible operator pages; factual data only; © Equinix, Inc.
Cadence facility pages weekly · index monthly · sitemap weekly

# What is crawled

  • Sitemap https://www.equinix.com/sitemap-core.xml (the /sitemap.xml index also lists sitemap-resources.xml and sitemap-prs.xml; the latter returns HTML, not XML).
  • Facility pages: /data-centers/<region>-colocation/<country>-colocation/<metro>-data-centers/<code> (code = [a-z]{2,3}\d{1,2}[a-z]?, e.g. dc2, fr5, ty11). Metro / country / region pages are index.
  • Newsroom: disabled. Press releases live on newsroom.equinix.com (RSS https://newsroom.equinix.com/press-releases-global?pagetemplate=rss, articles /YYYY-MM-DD-<slug>). Those pages are served normally (HTTP 200, ~20 KB of text) but embed Cloudflare's /cdn-cgi/challenge-platform/ beacon, which the shared looksBlockedOrEmpty() heuristic in packages/connectors/src/fetchers.ts treats as a bot wall → each article escalated to Scrapfly (30 credits each; 120 credits burnt in the first dry run). The feed is commented out in the YAML until that heuristic only fires on short pages.

# Access

www.equinix.com is behind Akamai: the bot UA gets 403, the browser identity (L2, still direct HTTP, 0 credits) is served in full. fetch.level: 1, maxLevel: 4 — L2 is enough for every IBX page tested; Scrapfly is never reached. maxCreditsPerRun: 60. robots.txt: Allow: /, Disallow: /content/dam/eqxcorp/* (not crawled).

# Fields (method)

  • code ← JS constant const title = "DC2" in the map script (js-var:title); name ← h1#hero-banner-heading ("Washington DC DC2").
  • address, city, postalCode, countryIso2 ← const address1/address2/city/postalCode/country (country name → ISO-2 via countryFromText).
  • regionName ← US state in the meta description ("…, Ashburn, VA.") — US only.
  • lat/lng ← const latitude/longitude (unicode-escaped, decoded) → geo.precision = exact (operator marker).
  • certifications ← "Certified to global standards" list (HECVAT, HIPAA, ISO 22301/27001/9001, NIST 800-53/FISMA High, PCI DSS, SOC 1/2 Type II …).
  • renewableClaim ← the REC/renewable bullet of the "Sustainability" spec row.
  • facilityType ← const ibxType (IBX → colocation, xScale → hyperscale). status ← "coming soon / under construction" only when stated in the hero; default operational.
  • description ← meta description + "Colocation space: 11,004 m² (118,446 ft²). Power redundancy: N+1. UPS redundancy: N+1." Colocation (white) space is not stored as buildingSqm (it is not the building footprint).
  • Not published per IBX: MW capacity, PUE, rack count → left null (nothing invented).
  • Key equinix:<CODE>; externalIds.equinix_ibx.

# Verification (2026-09-11)

  • Discovery: 398 URLs → facility_pages=265, index=133 (sitemap-core has 403 /data-centers/ URLs: 276 IBX-shaped, of which 265 pass classify; the rest are metro/country/region pages).
  • --url DC2: Washington DC DC2, 21715 Filigree Court, Ashburn, VA 20147, US, geo 39.01679/-77.46054, 9 certifications, renewable claim "2025: Wind RECs from Texas and Oklahoma vPPAs…" — matches the live page.
  • --url FR5: Frankfurt FR5, Kleyerstrasse 90, 60326 Frankfurt, DE, geo 50.09842/8.63239.
  • Sweep of 8 spread IBX pages (AT1, NY2, DC12, TR6, FR4, AM11, LD3, HK2): 8/8 valid, 0 rejected, all with address + coordinates. Credits: 0 (L2).

# Gaps / TODO

  • Newsroom off (see above) — re-enable the RSS line once the fetcher heuristic is fixed.
  • regionName only for US sites; MW never published.