Målet var tydligt: när en användare skickar in en länk med sina uppgifter ska systemet:
- Validera vad som faktiskt står på sidan
- Kolla om det strider mot plattformens regler eller kan tas bort via Google
- Skicka rätt typ av avindexeringsbegäran
- Följa upp tills ärendet är klart
Allt utan 20 mail fram och tillbaka.
Arkitekturen i korthet
- Next.js API Routes för all serverlogik.
- Kö-system (job queue) för tunga eller tidskrävande steg, så UI aldrig känns trögt.
- Webhooks för att ta emot status från externa tjänster.
- Audit-logg så varje åtgärd går att spåra.
Flödet, steg för steg
1) Inskick och förgranskning
Användaren lämnar URL + vad som ska bort.
API-route /api/submit tar emot ärendet, skapar ett jobb i kön och svarar direkt till frontend.
Ett headless-scrape körs i bakgrunden: hämtar sidans titel, textutdrag, indexeringsstatus, noindex, robots.txt, cache och eventuella kopior (t.ex. AMP eller speglar).
Varför? För att inte skicka onödiga begäranden om sidan redan är noindex, eller om innehållet faktiskt inte innehåller personuppgifter.
2) Klassning med lätt AI + regler
En enkel modell + regelmotor plockar sannolikt personidentifierande info: fullständigt namn + adress, personnummer, telefon, arbetsplats, bilder kopplade till namn.
Output blir en tydlig etikett: "Trolig PII", "Oklar", "Ej PII".
Oklar hamnar i manuell snabbkö med färdiga beslutsmallar.
3) Välj rätt väg: källa vs Google
- Källkontakt först om plattformens egen policy ger bättre chans (t.ex. öppet forum med takedown-formulär).
- Google Removal om källan inte svarar eller om innehållet uppfyller Googles kriterier för avlistning.
- Systemet väljer väg och dokumenterar varför.
4) Skapa ärende mot Google
I Next.js körs en signerad API-route som:
- Samlar alla artefakter: URL, sökresultats-screenshots, cache-hash, textutdrag där uppgifterna syns.
- Mappar ärendet till rätt typ av removal (t.ex. exponerade personuppgifter, doxxing-liknande innehåll).
- Skickar in med rätt fält och sparar ticket-id för uppföljning.
Tips: behåll en minimal, normaliserad datamodell för "evidence", annars drunknar du i bilagor.
5) Köer, retrys och tidsfönster
- Jobben körs i återförsök med backoff om externa tjänster är sega.
- Nattkörningar för tunga batchar, dagtid för realtidsärenden.
- Varje jobb har SLA och pingar uppföljning om inget händer på X dagar.
6) Webhooks för status
När Google eller en källa återkommer med beslut träffar deras svar en webhook /api/webhooks/removal-status.
Status uppdateras i databasen, användaren får ett kort, begripligt meddelande.
Vid avslag: systemet föreslår nästa bästa åtgärd (förtydliga bevis, annan policyväg, eller manuell eskalering).
7) Kontroll efteråt
Verifikation kör en livesök med neutrala parametrar, kollar Cache/Images/Discover.
Om allt ser bra ut markeras ärendet "klart" och stängs.
Om något ligger kvar i ett sidoflöde (bilder, cachade utdrag) skapas automatiskt ett följdärende.
Teknik som gör jobbet smidigt
Next.js API Routes
- /api/submit – ta emot ärenden
- /api/scrape – server-side fetch + normalisering
- /api/work/start – kickoff till kö
- /api/google/submit – avindexeringsrequest
- /api/webhooks/removal-status – status in
- /api/verify – efterkontroller
Job Queue
T.ex. BullMQ eller en hanterad kö. Viktigt: separera "snabba" från "tunga" jobb, annars laggar hela systemet.
Datamodell
- Case: id, url, status, skapad, uppdaterad
- Evidence: utdrag, skärmdumpar, cache-info
- Decision: vägval med motivering
- ExternalRef: ticket-id hos Google/källa
- Audit: vem gjorde vad och när
Loggning och larm
- Strukturerad logg på varje beslut.
- Larm på feltyp, ovanlig responstid och spike i avslag.
Säkerhet och integritet
- Minimera persondata. Spara bara det som behövs för ärendet.
- Kryptera evidence i vila.
- Rollstyrning i admin.
- Tydlig radering när ärendet är klart och lagringstiden har passerat.
UX som minskar support
- Status-steg i klartext: "Skickat", "Under granskning", "Avlistad", "Avslag", "Behöver mer underlag".
- Förslag på nästa steg med ett klick.
- E-post/Push när något händer, men bara när det spelar roll.
Vad gav störst effekt i praktiken?
- Förgranskningen sparade mest tid. Vi slipper ärenden som aldrig hade en chans.
- Webhooks + köer gör att teamet inte behöver "kolla status" manuellt.
- Kort återkoppling till användaren minskar frågor och frustration.
Resultatet är en plattform som känns snabb och trygg för användaren, och som går att drifta utan att supporten brinner. Next.js sköter grunden med API-rutter, köerna bär tunga delar och webhooks håller allt uppdaterat. Precis lagom avancerat för att vara robust, men tillräckligt enkelt för att gå att underhålla över tid.
Vill du veta mer om att skydda dina dolda uppgifter på nätet? Där hittar du verktyg och information för att hantera personlig information online.