Kalo te përmbajtja
SEO Analyzer

Politika e crawl-it

Çfarë bën roboti ynë, çfarë nuk bën, dhe si e ndal atë — e shkruar nga sjellja e matur e kodit, jo nga premtime.

Kush jemi dhe si na njeh

Roboti ynë identifikohet me një User-Agent të vetëm dhe të pandryshueshëm:

Mozilla/5.0 (compatible; LessonPeakSeoBot/1.0; +https://seo.lessonpeak.com/roboti)
From: roboti@lessonpeak.com

Nuk ka rotacion User-Agent-ësh. Nuk ka funksion që kthen një varg tjetër. Nuk ka opsion konfigurimi, sepse po të kishte, dikush do ta përdorte.

Sistemi i vjetër i këtij projekti rrotullonte gjashtë User-Agent-ë, përdorte një shtojcë për t'iu fshehur zbulimit të automatizimit, dhe kishte kod që klikonte vetë kutinë e verifikimit të Cloudflare-it. Të gjitha janë hequr — jo të fshehura pas një flamuri, por të fshira, me teste që lexojnë kodin burim dhe dështojnë nëse ndonjëra rikthehet.

Arsyeja nuk është estetike. Një robot që fshihet nuk mund të bllokohet nga pronari i faqes; një robot që nuk mund të bllokohet nuk ka si të pretendojë se respekton robots.txt.

Si na bllokon

Shto këtë te robots.txt i sajtit tënd:

User-agent: LessonPeakSeoBot
Disallow: /

Kjo hyn në fuqi sapo ne e lexojmë skedarin herën tjetër. Nuk ka nevojë të na shkruash, të kërkosh, apo të presësh miratim.

Për të ndaluar vetëm një pjesë:

User-agent: LessonPeakSeoBot
Disallow: /admin/
Disallow: /kerko
Crawl-delay: 10

Krahasimi i grupeve User-agent: bëhet kundrejt tokenit LessonPeakSeoBot, jo kundrejt vargut të plotë — pra nuk ke nevojë të kopjosh gjithë User-Agent-in.

Një bllokim i përgjithshëm me User-agent: * na vlen njësoj.

Si e zbatojmë robots.txt

Parsimi është i plotë, jo i pjesshëm:

  • specifikitet User-agent me prefiks, dhe bashkim i grupeve me të njëjtin specifikitet;
  • Allow dhe Disallow me rregullin e rrugës më të gjatë; në barazim fiton Allow;
  • wildcard-e * dhe $;
  • Crawl-delay dhe Sitemap;
  • BOM, CRLF, CR, komente, rreshta të keqformuar dhe përkodim procentual trajtohen saktë.

Dy hollësi që shpesh zbatohen gabim nga mjete të tjera:

`Disallow:` me vlerë bosh do të thotë lejo gjithçka, jo ndalo rrënjën. Ngatërrimi i tyre bllokon sajte të tëra pa qëllim.

Prerja te 512 KiB bëhet gjithnjë te fundi i rreshtit të fundit të plotë. Një rresht i prerë në mes — Disallow: /priv në vend të Disallow: /privat — do të ndalonte më pak sesa kërkoi pronari. Prerja në mes nuk është e papastër; është e rrezikshme.

Kur robots.txt nuk merret dot

Këtu shumica e crawler-ëve zgjedhin atë që u leverdis. Ne zgjedhim dështimin e mbyllur:

| Statusi i robots.txt | Vendimi | Pse | |---|---|---| | 2xx | rregullat zbatohen | | | 4xx që nuk është 429 | lejohet gjithçka | një 404 nuk është ndalim | | 429 | ndalohet | serveri po thotë shprehimisht "më pak"; ta lexoje si "s'ka robots.txt" e kthen kuptimin përmbys | | 5xx | ndalohet | nuk dimë ç'thotë robots.txt-ja e tyre | | timeout ose DNS i dështuar | ndalohet | e njëjta arsye | | mbi 512 KiB | ndalohet | ose nuk është robots.txt, ose është kurth burimesh |

Cache-i i robots.txt ka kohëzgjatje të ndarë për përgjigjet pozitive dhe negative: një 503 i vetëm nuk duhet të na mbyllë hostin për orë të tëra, dhe një leje e vjetër nuk duhet të vazhdojë pasi rregullat kanë ndryshuar.

Sa shpejt kërkojmë

Një kërkesë në çast për host. Jo një në sekondë për sajt me shumë lidhje paralele — një, dhe pastaj pritje.

Kur robots.txt deklaron Crawl-delay, ai fiton kur është më i madh se minimumi ynë. Nuk negociojmë kurrë poshtë asaj që kërkoi pronari i faqes.

Çdo 429, 5xx ose timeout e dyfishon pritjen për atë host, deri te një tavan. Një sukses e ul numëruesin një hap, jo në zero — një përgjigje 200 e vetme pas disa 503-shave nuk do të thotë se serveri u shërua.

Kufijtë e tjerë, të gjithë të fiksuar në kod: 8 MiB për faqe, 512 KiB për robots.txt, 4 KiB për skedarin e verifikimit, 5 ridrejtime, 20 sekonda për kërkesë, 45 për faqe, 120 për punë, dhe më së shumti 10 nivele thellësi ose 2.000 faqe për punë.

Tejkalimi i një kufiri bajtesh është gabim i tipizuar, jo prerje e heshtur.

Ku nuk shkojmë

Roboti nuk lidhet kurrë me adresa private. Kjo zbatohet te tri nivele njëherësh, me qëllim: një defekt në kod nuk duhet të mjaftojë, dhe as një gabim konfigurimi rrjeti.

  • Rrjeti — rregulla te zinxhiri i hostit që i refuzojnë paketat drejt loopback-ut, RFC1918, link-local, ULA, CGNAT, multicast dhe çdo porti që nuk është 80 ose 443. Kontejneri nuk ka të drejtën t'i heqë vetë.
  • Kodi — validimi rri te funksioni lookup i socket-it, pika më e ulët ku kodi ynë ka ende fjalë. Çdo adresë e kthyer nga DNS-ja kontrollohet, jo vetëm e para. Lidhja shkon te adresa e validuar, jo te një zgjidhje e dytë — pa këtë do të mbetej një dritare rebinding-u.
  • Shfletuesi — filtri i kërkesave i ndal nën-burimet para se të hyjnë te stack-u i rrjetit.

Skemat file:, gopher:, data: dhe ftp: refuzohen. Ridrejtimet ndiqen me dorë dhe rivalidohen plotësisht në çdo hop: një 30x drejt një adrese të ndaluar ndalet.

Kur duhet leje dhe kur jo

Skanimi i një faqeje të vetme nuk kërkon leje. Ai është një kërkesë e vetme drejt një adrese publike, me identitet të deklaruar dhe me robots.txt të respektuar — pikërisht ajo që bën çdo shfletues.

Crawl-i i plotë i një sajti kërkon verifikim pronësie. Marrja e qindra faqeve nga një server i huaj është ngarkesë reale mbi burimet e dikujt tjetër, dhe nuk duhet të nisë me një klikim nga kushdo.

Verifikimi bëhet me një regjistrim DNS TXT ose me një skedar te /.well-known/. Procedura e plotë është te verifikimi i pronësisë.

Sistemi i vjetër i këtij projekti nuk e kishte këtë kufi: çdo URL skanohej menjëherë, dhe të dhënat tregojnë skanime të sajteve institucionale pa asnjë gjurmë autorizimi. Ky kufi është ndreqja e asaj gjendjeje.

Nëse na bllokon një faqe

Nëse një sajt na bllokon — me robots.txt, me një mur mbrojtjeje, me një sfidë verifikimi — rezultati raportohet si "e bllokuar".

Nuk provohet një rrugë e dytë. Nuk ndryshohet identiteti. Nuk kërkohet një kopje nga cache-i i dikujt tjetër. Kodi që bënte këto është hequr dhe testet e mbajnë të hequr.

Kjo do të thotë se raportet tona do të kenë boshllëqe aty ku pronari i faqes nuk deshi të na lërë. Ky është rezultati i drejtë.

Nga u nxor kjo faqe

Çdo pohim më sipër është nxjerrë nga kodi ose nga plani, dhe këtu janë vendet e sakta. Nëse njëri prej tyre nuk përputhet me atë që lexove, faqja është gabim.

  • workers/seo-crawler/README.md:1
  • workers/seo-crawler/src/shfletuesi/ua.ts:30
  • workers/seo-crawler/src/robots/parser.ts:1
  • workers/seo-crawler/src/robots/index.ts:164
  • workers/seo-crawler/src/robots/rate-limit.ts:95
  • workers/seo-crawler/src/kontrata.ts:25
  • workers/seo-crawler/src/adresa.ts:1
  • workers/seo-crawler/src/safe-http.ts:1
  • workers/seo-crawler/infra/egress-iptables.sh:1