Building a map of every fishing water in Poland
polskielowiska.pl puts every PZW water in Poland on one map, with the rules, the fish and how sure we are about each of them. Programmatic SEO took it to 146,000 clicks from Google in three months. Then, on one night in July, 90% of them were gone.
- ROLE
- Everything: product, data, SEO. Code with Claude Code.
- SINCE
- March 2026
- STACK
- Claude Code, Next.js, SQLite, Leaflet, OpenStreetMap, own VPS
- STATUS
- Live, rebuilding trust with Google
Clicks: Google Search Console. Waters: the site’s database, 1 Nov 2026. Visitors: Google Analytics, updated twice a day.
01 THE IDEA
AllTrails, but for Polish fishing
The Polish Angling Association (PZW) manages thousands of waters, but the information lives in PDFs, regional websites and permit lists that don’t talk to each other. If you want to know where you can fish near you, and on what permit, you are on your own.
On 10 March 2026 I scraped pzw.pl and put 1,940 waters on a map. Six days later it had its own domain. By the end of April, an import from OpenStreetMap added over 10,000 rivers and lakes.
02 HOW IT GREW
One page for every water, and Google noticed
Every water got its own page, and so did every municipality, district and species. That is programmatic SEO: thousands of pages built from one database. On 7 April Google indexed 3,530 of them in a single night.
- 10 Mar 2026MVP1,940 waters, map, sitemap
- 7 AprIndexed35 → 3,530 pages overnight
- 25 Apr+10k watersOpenStreetMap import, own server
- 5–8 JunTrust workProof levels, honest labels
- 12 JulPeak4,349 clicks in one day
Every step, with dates
- 10 Mar 2026First versionMap of PZW waters, a scraper and the SEO basics, deployed the same day.
- 16 Marpolskielowiska.plOwn domain, first impressions in Search Console the next day.
- 7 AprGoogle indexes the siteFrom 35 indexed pages to 3,530 overnight.
- 10–12 AprDistrict pages, Vercel limitsThe free hosting tier ran out of room for this many pages.
- Late AprOwn server, OpenStreetMapMoved to a VPS; +4,889 rivers and +5,441 lakes and ponds.
- May388 commitsThe busiest month: unverified status, search logging, monitoring.
- 5–8 JunTrust workProof levels, honest verification, salmonid caution, an inbox for corrections, a twice-daily search-gap monitor.
- 12 JulPeak4,349 clicks from Google in one day.
- 16 JulThe drop2,897 clicks the day before, 300 that day.
- 21–29 JulFirst responseThin pages out of the index, 6,510 unproven waters checked one by one.
- 4–5 AugTold the story in publicOn LinkedIn and in an X article.
- From ~20 AugSecond blowGoogle starts dropping pages from the index.
- 29 SepRecovery planNew sitemap, 2,932 empty pages noindexed, a linking bug fixed.
- 22 OctDe-indexing stopsNo recovery in clicks yet.
| 21 Mar | 31 |
| 7 Apr | 3,530 |
| 21 Apr | 6,900 |
| Jul–Aug | ~33,500 |
| 21 Sep | 21,300 |
| 16 Oct | 20,500 |
03 HONEST DATA
Unverified waters are marked, not hidden
A map like this is only useful if you can trust it at the water’s edge. So every water carries a proof level: from an official PZW register down to “we found it, but can’t confirm who manages it”. The site never claims PZW management without proof, warns about method rules on trout and grayling waters, and has an inbox for anglers who spot a mistake.
Behind it, a monitor runs twice a day: it reads what people searched for and didn’t find, researches it and fills the gap.


04 THE DROP
146,000 clicks in three months, then a wall
Between 2 May and 31 July the site got 146,000 clicks and 4.39 million impressions from Google, at an average position of 7.2. Millions of impressions, for a fishing map I started building in March. I still can’t quite believe that part. On 12 July it had its best day ever: 4,349 clicks. Four days later it had 300.
| 12 Jul | 4,349 |
| 15 Jul | 2,897 |
| 16 Jul | 300 |
| 26 Jul | 336 |
It wasn’t a ban. Search Console showed no manual action, the server was up, and the number of indexed pages didn’t move. Google simply stopped showing the site for thousands of long-tail searches, all sections at once. No update was announced for that day, so the honest answer to “why” is: I don’t know for sure.
My own read: it was partly a victim of its own success. Traffic grew extremely fast on thousands of new, young pages, and growth like that is exactly what makes Google look twice.
The second blow came a month later. From around 20 August Google started dropping pages from its index: from about 33,500 to 21,300. The pattern was clear once I checked a fixed sample of 1,020 pages. Big lakes stayed (97% indexed); tiny ponds under a hectare didn’t (53%). Thin pages were the ones going. I also found my own bug: the “nearby waters” block didn’t sort by distance, so 87% of water pages got no links from their neighbours.
05 WHAT I DID
Fewer pages, better pages, no tricks
- Took about 1,160 thin hub pages out of the index in the first week.
- Checked 6,510 unproven waters one by one: 588 promoted, 2,684 hidden from Google.
- Zero-downtime deploys, so Googlebot never sees an error page.
- Fixed the nearby-waters linking, rebuilt the sitemap with honest dates, noindexed 2,932 pages nobody ever saw.
- Wrote real guides: species, techniques, the fishing calendar.
What I chose not to do: move to a new domain, roll everything back, or pad pages with filler text. Guessed information is worse than none on a site people use to decide where to drive with a rod.
| Week of 3 Aug | 1,662 |
| Week of 21 Sep | 734 |
| Week of 28 Sep | 816 |
| Week of 12 Oct | 599 |
06 WHERE IT IS
Still standing, still used, still waiting
By late October the de-indexing had stopped and 85% of the pages I still submit are indexed. Clicks haven’t come back, and the fishing season is slowly ending anyway. The fair comparison is spring 2027 against spring 2026.
The best signal didn’t come from Google. Owners of private waters wrote to me because anglers had shown up saying “polskielowiska.pl says I can fish here”. My information about those waters wasn’t accurate, and I corrected it the same day. But it told me something no chart could: people really do use the site to decide where to go.
Right now the site keeps itself fresh: every day it updates the waters of each PZW district with what the local clubs publish, on autopilot. Next up is social media, and over the winter most likely a redesign.
Further out, that points to where I want to take it. There are a few ideas on the table, and private waters are the strongest one: owners who want anglers, anglers who want a place they can trust. Meanwhile a new door opened anyway: about one in ten visits now comes from ChatGPT.
The lesson I’d pass on: programmatic SEO works, right until Google decides your pages aren’t worth showing. Build the pages you would want to land on, because one day that is the only kind that stays.
07 SEE IT