# ScreenSearch — full LLM content This document is a long-form, machine-readable description of every page and feature on screensearch.co.uk. It exists so AI search engines and large-language-model agents can answer questions about ScreenSearch without having to crawl JavaScript. All claims here are accurate as of the most recent build. ## Site identity - **Name:** ScreenSearch - **Tagline:** Find where to watch any film or TV show, instantly. UK-first. - **URL:** https://www.screensearch.co.uk/ - **Operator:** Independent UK-based team. Founded 2025. Not affiliated with any streaming service, TMDB, or JustWatch. - **Contact:** screensearchuk@gmail.com - **Source code:** https://github.com/Wrecket/screensearch (open source, MIT-licensed scaffolding) - **Hosting:** Cloudflare Pages (static + Pages Functions) - **Default region:** United Kingdom (GB) - **Languages supported:** English (en-GB) ## What ScreenSearch does ScreenSearch is a single-purpose search tool that answers the question "Where can I watch this in the UK?" for any film or TV show in The Movie Database (over one million titles). A user types the name of a film or TV show, picks a result from the list of matches, and sees: - Which subscription services include the title (Netflix, Amazon Prime Video, Disney+, Apple TV+, Paramount+, NOW, Sky, etc.) - Which free ad-supported services carry it (ITVX, Channel 4, BBC iPlayer where applicable, Tubi, Pluto TV, The Roku Channel) - Which rental shops list it (Apple TV, Amazon Video, Google Play, Rakuten TV, Sky Store, Microsoft Store, etc.) - Which storefronts will sell a digital copy outright - For TV shows: per-season availability, because seasons sometimes live on different services The data comes from JustWatch via TMDB and is refreshed daily. ## URL structure (canonical) ScreenSearch uses simple, semantic URLs: - `/` — homepage and search interface. The search query is mirrored to a `?q=` parameter so URLs like `/?q=inception` are shareable. - `/watch/{type}/{id}/{slug}` — server-rendered landing page for a single film or TV show. Examples: - `/watch/movie/27205/inception-2010` - `/watch/tv/85271/wandavision-2021` Each landing page contains: the title, year, genres, runtime, TMDB rating, synopsis, poster, a citation-friendly direct-answer sentence ("X is currently available to stream in the UK on ..."), and the current UK provider list (streaming, free, rent, buy). It includes WebPage + Movie/TVSeries structured data (schema.org), `dateModified`, `mainEntityOfPage`, an `Offer` array with one entry per provider including a deep-link `url`, a `Speakable` specification covering the H1 and the direct-answer paragraph, a BreadcrumbList, and a FAQPage block. If the slug is missing or wrong the server issues a 301 redirect to the canonical URL. - `/watch/{type}/{id}/{slug}.md` — Clean Markdown variant of the same page intended for AI agents and LLM crawlers. No HTML, no styling. Includes the direct answer as a blockquote, key facts as a definition-list block, providers grouped by category, the FAQ, and explicit sources. Same canonical URL. - `/watch/{type}/{id}/{slug}.json` — Structured JSON variant. Stable schema: ```json { "schemaVersion": 1, "canonical": "https://www.screensearch.co.uk/watch/movie/27205/inception-2010", "title": "Inception", "year": "2010", "type": "movie", "tmdbId": 27205, "region": "GB", "directAnswer": "Inception (2010) is currently available to stream in the UK on Netflix. ...", "lastVerified": "2026-05-02T20:14:25.000Z", "lastVerifiedHuman": "2 May 2026", "metadata": { "overview": "...", "runtimeMinutes": 148, "genres": [...], "tmdbRating": 8.4, ... }, "providers": { "stream": [ { "providerId": 8, "name": "Netflix", "category": "subscription", "logoUrl": "...", "url": "https://www.netflix.com/search?q=Inception" } ], "free": [], "rent": [...], "buy": [...] }, "faq": [ { "question": "...", "answer": "..." } ], "sources": { "data": "TMDB", "licensing": "JustWatch", "refreshFrequency": "daily" } } ``` CORS is enabled (`Access-Control-Allow-Origin: *`). - `/on/{service}` — server-rendered streaming-service hub. Service slugs: `netflix`, `amazon-prime-video`, `disney-plus`, `apple-tv-plus`, `paramount-plus`, `now`, `bbc-iplayer`, `mubi`, `crunchyroll`. Each lists the most popular titles currently on that service in the UK and includes ItemList + BreadcrumbList + FAQPage structured data. - `/on/{service}/new` — server-rendered "what's new this week" hub for that service. - `/on/{service}/genre/{genre}` — cross-section hub for a service+genre combination (e.g. `/on/netflix/genre/horror` = "Horror on Netflix UK"). Up to 9 services × 12 genres = 108 long-tail combos. Pages where TMDB returns fewer than 5 titles are served `noindex` so thin combos do not pollute search indexes. Same CollectionPage + ItemList + FAQPage JSON-LD structure as the parent service hub. - `/genre/{slug}` — server-rendered genre hub. Genre slugs: `horror`, `comedy`, `drama`, `documentary`, `sci-fi`, `action`, `thriller`, `romance`, `crime`, `animation`, `family`, `mystery`. - `/person/{id}/{slug}` — server-rendered Person SEO landing page for any cast or crew member. `{id}` is the TMDB person id; `{slug}` is the kebab-case name. Examples: `/person/500/tom-cruise`, `/person/1136406/florence-pugh`. Each page includes: - Person hero with photo, biography (truncated to ~600 chars), known-for department, birthday, deathday (if applicable), birthplace, age, total credits count. - Top 12 films and top 12 TV shows on the person's filmography, sorted by popularity, each linking to the title's `/watch/{type}/{id}/{slug}` page. - Full filmography (top 80 by popularity) as a compact two-column links list. Every link is internal so PageRank flows from each Person page back into the show pages. - JSON-LD: Person (with `knownForDepartment`, `birthDate`, `deathDate`, `birthPlace`, `alternateName`, `image`, `sameAs`→IMDb), BreadcrumbList, ItemList of works, FAQPage. - OpenGraph `og:type=profile` with the person's profile photo as `og:image`. - Wrong/missing slugs receive a 301 redirect to the canonical URL. - `/person/{id}/{slug}.json` — structured JSON variant. Schema: ``` { "@context": "https://schema.org", "@type": "Person", "@id": "https://www.screensearch.co.uk/person/{id}/{slug}", "name": "...", "knownForDepartment": "Acting" | "Directing" | ..., "description": "...", "birthDate": "YYYY-MM-DD" | null, "deathDate": "YYYY-MM-DD" | null, "birthPlace": "...", "alternateName": ["..."], "image": "https://image.tmdb.org/t/p/w500/...", "sameAs": ["https://www.imdb.com/name/nm..."], "lastVerified": "2 May 2026", "filmography": [ { "mediaType": "movie" | "tv", "tmdbId": 27205, "title": "Inception", "year": "2010", "role": "as Cobb" | "Director", "roleKind": "cast" | "crew", "voteAverage": 8.4, "posterUrl": "https://image.tmdb.org/t/p/w500/...", "screenSearchUrl": "https://www.screensearch.co.uk/watch/movie/27205/inception-2010" }, ... ] } ``` CORS-enabled (`Access-Control-Allow-Origin: *`). - `/blog` — server-rendered blog index with all editorial guides. - `/blog/{slug}` — individual editorial article. - `/blog/rss.xml` — RSS 2.0 feed of every blog post. Feed includes full `content:encoded` HTML for direct ingestion by AI training pipelines (Common Crawl, Perplexity, Claude, GPT search). - `/about` — about the company, principles, business model, contact (server-rendered with AboutPage + Person + Organization schema). - `/contact` — direct email contact. - `/privacy` — UK GDPR-compliant privacy policy. - `/terms` — terms of service governed by the law of England and Wales. - `/this-week` — daily-refreshed pulse page showing the films and TV series most-watched on UK streaming services this week. Server-rendered with CollectionPage + ItemList + FAQPage + Speakable JSON-LD, a citation-friendly direct-answer paragraph, and a visible `lastVerified` timestamp. Mixes movies and TV interleaved by global weekly rank. - `/this-week.json` — JSON variant. Schema: `{schemaVersion: 1, canonical, region: "GB", source, lastVerified, counts: {total, movie, tv}, items: [{rank, id, type, title, year, slug, canonical, canonicalMd, canonicalJson, posterUrl, voteAverage, overview}, ...]}`. CORS-enabled. - `/coming-soon` — daily-refreshed pulse of upcoming UK releases over the next 30 days. Mixes TMDB `/movie/upcoming?region=GB` (UK theatrical/home releases) with `/discover/tv` for series whose first air date falls inside the 30-day window. Items are sorted by release date ascending and interleaved (film, TV, film, TV…). Same CollectionPage + ItemList + FAQPage + Speakable JSON-LD playbook as `/this-week`. - `/coming-soon.json` — JSON variant. Schema: `{schemaVersion: 1, canonical, htmlVariant, region: "GB", source, windowDays: 30, lastVerified, counts: {total, movie, tv}, items: [{rank, id, type, title, year, releaseDate, slug, canonical, canonicalMd, canonicalJson, posterUrl, voteAverage, overview}, ...]}`. CORS-enabled. - `/og/{type}/{id}.svg` — per-title branded OpenGraph image (1200×630 SVG). Returns a self-contained SVG with the show's TMDB poster (base64-embedded), the title and year, top-three streaming providers, and the ScreenSearch wordmark. Used as the `og:image` for every `/watch/...` page so social-share previews render with the show's own artwork instead of a generic site card. Cached at the edge for 7 days. - `/mcp` — Model Context Protocol server endpoint. POST JSON-RPC 2.0 requests; GET returns a discovery descriptor. Implements `initialize`, `tools/list`, `tools/call`, `ping`. Tools: - `search_shows({ query, region? })` — multi-search via TMDB; returns ranked hits with each title's canonical ScreenSearch URL. - `get_show_details({ id, type })` — full TMDB detail blob plus canonical ScreenSearch URL. - `get_watch_providers({ id, type, region? })` — JustWatch-via-TMDB providers grouped by category, region-scoped (defaults to GB), plus canonical URL. - `get_trending({ window?, mediaType? })` — TMDB trending list, each item annotated with its canonical ScreenSearch URL. All tool results are returned as a single text content block of compact JSON (the MCP-recommended format). Tool errors are surfaced inside the result with `isError: true`. CORS is open. Compatible with Claude Desktop, Cursor, Continue, and any other MCP-spec-compliant client. - `/sitemap.xml` — dynamically generated sitemap covering static pages, all 9 service hubs, all 12 genre hubs, all 100+ service×genre cross-section URLs, the blog index + RSS feed + every article, `/this-week`, `/coming-soon`, and the top ~150 trending titles. Refreshed every 6 hours. - `/robots.txt` — robots policy. All major crawlers (Googlebot, Bingbot, GPTBot, Google-Extended, ClaudeBot, PerplexityBot, OAI-SearchBot, Applebot-Extended, etc.) are explicitly allowed. - `/llms.txt`, `/llms-full.txt` — LLM-friendly site summaries. ## Pages in detail ### Homepage (/) - **Purpose:** Search interface. Users land here from search engines or direct visits and immediately type a title. - **Above the fold:** Brand badge, headline ("ScreenSearch — Find where to watch any movie or TV show, instantly"), search input. - **Below the fold (when no query is active):** Trending row (top 12 weekly trending titles from TMDB), "How ScreenSearch works" three-step explainer, "200+ streaming services covered" feature grid, newsletter signup, six-question FAQ. - **When a query is active:** Result grid replaces the below-fold content. Clicking a result opens a modal listing UK providers; the same data is also reachable as a permanent URL via `/watch/{type}/{id}/{slug}`. - **Structured data:** WebApplication, Organization, WebSite (with SearchAction), FAQPage. ### Show landing pages (/watch/{type}/{id}/{slug}) - **Purpose:** Indexable per-title pages so search engines can answer "where to watch X UK" queries. - **Content:** Poster, hero with title + year + tagline, a citation-friendly **direct-answer paragraph** (e.g. "Inception (2010) is currently available to stream in the UK on Netflix. It can also be rented from Apple TV, Amazon, Google Play, and Microsoft Store. Last verified on 2 May 2026 by ScreenSearch."), synopsis, genre/runtime/rating pills, four provider sections (Streaming, Free, Rent, Buy) each linking out to the provider with rel="sponsored noopener nofollow", a visible "Last verified" timestamp with `