# Content-Signal: search=yes -> indeksowanie i klasyczne wyniki: TAK # Content-Signal: ai-input=yes -> cytowanie w odpowiedziach AI (RAG): TAK # Content-Signal: ai-train=no -> trening modeli na naszej tresci: NIE User-Agent: * Content-Signal: search=yes, ai-input=yes, ai-train=no Allow: / Disallow: /app/ Disallow: /auth/ Disallow: /api/ Disallow: /md/ # NIE MA TU "Disallow: /*?" (audyt 2026-07-29, druga tura). Ta regula lapie # KAZDY URL z query, a Vercel dokleja "?dpl=" do kazdego assetu # — wiec blokowala wszystkie arkusze i skrypty ("/_next/static/...css?dpl="), # oba ikonki i "/og?title=" (og:image landinga). #2317 zalatal to lista # "Allow", ktora wygrywala WYLACZNIE dlugoscia wzorca: Google rozstrzyga # konflikt najdluzszym dopasowaniem, wiec "/_next/" (7 znakow) bilo "/*?" (3). # # Dwa powody, dla ktorych ta konstrukcja poszla w calosci: # 1. Longest-match to regula GOOGLE. Parsery liczace kolejnoscia (sprawdzone # na urllib.robotparser) widza "Disallow: /*?" pierwsze i blokuja komplet # assetow — czyli renderujace crawlery inne niz Googlebot dostawaly strone # bez CSS i JS mimo poprawki. # 2. Blokowanie parametrow jest przeciwskuteczne. URL z "?utm_source=" czy # "?gclid=" ma byc PRZECZYTANY, zeby Google zobaczyl rel=canonical i zwinal # duplikat; za Disallow canonical jest nie do odczytania. Kazda publiczna # strona kanonikalizuje sie na siebie (statystyki funduszy ignoruja "?m=" # w generateMetadata i podaja goly URL), wiec konsolidacja i tak dziala. # # Zamiast wzorca-parasola — konkretne trasy ponizej. Prefiks lapie tez warianty # z zapytaniem, wiec nie potrzeba juz zadnego "Allow" jako przeciwwagi. # # /og/ celowo NIE jest blokowane: kazda strona przetargu podaje # https://przetargowyjanusz.pl/og/tender/ jako og:image, a obrazek schowany za # Disallow jest dla Google nie do pobrania — traci go Discover i karty # w wynikach. # # Wyniki szukania — dynamiczne, bez wartosci dla indeksu. Szukanie w archiwum # tak samo (strona z 2026-08-18 zakladala parasol "/*?", ktorego juz nie bylo). Disallow: /przetargi/szukaj Disallow: /przetargi/archiwum/szukaj # Fasety filtrow (termin, sortowanie, rodzaj, branza, miasto, wojewodztwo, # strona) — miliony kombinacji, kazda renderowana dynamicznie, a "noindex" na # stronie chroni indeks, nie budzet crawla (audyt 2026-10-12: ponad tysiac # adresow dwa klikniecia od /przetargi). Dla archiwum to odwrocenie decyzji z # #2740: przetargi archiwalne Google zna z sitemap, nie z faset. Wzorzec konczy # sie na "?", bo goly prefiks "/przetargi/filtry" lapie tez przetargi o slugu # "filtry-..." (17 w sitemapach). "?" jest dla Google i urllib zwyklym znakiem. Disallow: /przetargi/filtry? Disallow: /przetargi/archiwum/filtry? # Wariant zastepczy bez streszczenia AI (migracja 0358/0359) — linkowany z # opublikowanych stron wykonawcow, zeby link nie byl 404, ale tresc to # przepisane ogloszenie (scaled-content-abuse ksztalt), wiec noindex. Wlasny # prefiks (nie "/przetargi/") wlasnie po to, zeby jeden wpis Disallow # zablokowal caly zbior — inaczej Googlebot i tak by go co jakis czas # przeczytal, zeby upewnic sie, ze noindex nadal tam jest (noindex NIE # oszczedza budzetu crawlowania, tylko chroni przed indeksacja). Disallow: /przetargi/ogloszenie/ # Jednorazowe linki z maila: cala tresc siedzi w tokenie z query, wiec goly URL # nie ma czego pokazac. Prefiks lapie tez /unsubscribe-newsletter. Disallow: /unsubscribe # Jedna dyrektywa — /sitemap.xml jest wskazującym na siedem # child-map (static/tenders/archive/clusters/buyers/contractors/stats). GSC # rozwija indeks sam; pojedyncze zgłoszenie zamiast siedmiu, brak "submitted # in multiple sitemaps". Sitemap: https://przetargowyjanusz.pl/sitemap.xml # ARD (agenticresourcediscovery.org, spec §6.1) — manifest ai-catalog z MCP, # skillami i katalogiem API (app/.well-known/ai-catalog.json/route.ts). Agentmap: https://przetargowyjanusz.pl/.well-known/ai-catalog.json