# @madebydanny / seo-tester ![img](https://mbdio.uk/xrpc/com.atproto.sync.getBlob?did=did:plc:l37td5yhxl2irrzrgvei4qay&cid=bafkreid3uxjmibj6nnlnvksakjtr4kuszlvmsvyau42v46w3o2222alnzm ) Try it [seo-tester.madebydanny.uk](https://seo-tester.madebydanny.uk/) > [!IMPORTANT] > The app is slow at first, please give it time to do the first scraping # SEO Inspector *(Vite + React + TypeScript)* Lightweight web app for scraping a page's metadata and producing an SEO-quality report. Features - Analyze a URL for title, description, Open Graph and Twitter metadata, canonical, lang, viewport, charset, and more. - Built with Vite, React, TypeScript and shadcn/ui primitives. - Client-side HTML fetch via a CORS proxy and metadata extraction. Quick start 1. Install dependencies ```bash cd /Users/danielmorrisey/Desktop/Tangled/seo-inspector-api npm install ``` 2. Start dev server ```bash npm run dev ``` 3. Open the app in your browser (usually http://localhost:5173) and go to the main page to use the SEO tester. Notes about the SEO tester performance improvements - In-memory caching: repeated analyses for the same URL use a short (5 minute) cache to avoid refetching HTML. - Fetch timeout: network fetches use an 8s AbortController timeout to avoid long hangs. - UI responsiveness: removed unnecessary UI delays and shortened the animated counters for a snappier feel. Testing the improvements - Run an analysis on a URL (for example https://github.com). Re-run the same URL and you should see the second run complete faster. - Test a slow or non-responsive target to see the 8s timeout and error handling. Developer notes - Type checking: after installing deps run `npx tsc --noEmit` to run TypeScript checks. - Linting: `npm run lint` (requires eslint installed via `npm install`). - The simple cache is stored in-memory (window.__seo_tester_cache_v1). If you want persistence across reloads, persist to localStorage or a small server-side cache. Contact - For changes or suggestions, open an issue or edit the repo directly. Enjoy! **Preview** --- ![img](https://mbdio.uk/xrpc/com.atproto.sync.getBlob?did=did:plc:l37td5yhxl2irrzrgvei4qay&cid=bafkreiceafmigyon4mg7dg4vgmur2doxppdgiouoxj7wxpnrbncohk7d3u) ![img](https://mbdio.uk/xrpc/com.atproto.sync.getBlob?did=did:plc:l37td5yhxl2irrzrgvei4qay&cid=bafkreief5clpgayifmwibr5tpb4wcx6u64g4fwgrm6eaukcqveaoucgp64) ![img](https://mbdio.uk/xrpc/com.atproto.sync.getBlob?did=did:plc:l37td5yhxl2irrzrgvei4qay&cid=bafkreifnlouxx5dmtznslfosspzd6kir2v7k5tz2kggymhxbpymtplg7ge)