Skip to content
This repository was archived by the owner on Oct 25, 2026. It is now read-only.
Syed Ahmer Shah edited this page Oct 25, 2026 · 1 revision

Inertia renders page bodies in the browser, so the server writes everything a crawler needs into the HTML head.

Rules every page follows

Item Rule
<title> 50 characters or fewer. A longer title first loses its trailing " | ..." or ": ..." segment, then is clipped at a word (Seo::title())
Meta description 150 characters or fewer (Seo::description())
Canonical Absolute URL on the canonical domain; ?page=n kept on paginated lists
Open Graph / Twitter og:title, og:description, og:image (1200×1200, one per film), og:url, og:type, twitter:card
JSON-LD Organization and WebSite (with SearchAction) everywhere; BreadcrumbList below the home page; Movie with AggregateRating and ScreeningEvent offers on film pages; MovieTheater with address, geo and opening hours on cinema pages; FAQPage on the help centre
Robots Public pages are indexable. Search results, seat maps, account, checkout, payments, password reset, admin and every error page (403, 404, 429, 5xx) send noindex

Files

  • public/robots.txt: the same private paths are disallowed for every crawler, including GPTBot and ClaudeBot.
  • public/sitemap.xml, public/llms-full.txt and the Open Graph images: generated with php artisan seo:generate.
  • public/llms.txt: a hand-written summary for AI assistants, with links to the project page, the case study and the security write-up.

Checks

tests/Feature/SeoAndAssistantTest.php asserts the title and description limits, JSON-LD and og:image on the main public pages, and noindex on error pages.

Clone this wiki locally