पाठ 16 / 25

Filesystem Routes and Layouts

+page.svelte, +layout.svelte and parameters.

Routes are folders

Each folder under src/routes is a URL segment. +page.svelte is the page component; +layout.svelte wraps every page below it and renders them with {@render children()} (Svelte 4: <slot />); layouts nest. Dynamic segments use brackets: [slug] matches one segment, [[lang]] is optional and [...path] captures the rest. Groups in parentheses such as (marketing) organise routes and layouts without affecting the URL. Pages receive loaded data through the data prop. Navigation uses ordinary <a href> links, which SvelteKit intercepts for client-side routing; goto() from $app/navigation navigates programmatically, and page from $app/state exposes the current URL and params (older code uses the $page store from $app/stores; check the docs for your version).

Files become routes

SvelteKit maps folders in src/routes to URLs and loads data for each page before it renders.

Three ideas: route files, load functions, errors and redirects.
Figure 6.1 — URL, route files, load, render.

A blog route tree

Folders and a layout.

<!--
src/routes/
  +layout.svelte            -> wraps every page
  +page.svelte              -> /
  about/+page.svelte        -> /about
  blog/+page.svelte         -> /blog
  blog/[slug]/+page.svelte  -> /blog/hello-world
  (app)/dashboard/+page.svelte -> /dashboard (group not in URL)
-->

<!-- src/routes/+layout.svelte -->
<script lang="ts">
  import { page } from '$app/state';
  let { children } = $props();
</script>

<nav>
  <a href="/" aria-current={page.url.pathname === '/' ? 'page' : undefined}>Home</a>
  <a href="/blog">Blog</a>
</nav>

<main>
  {@render children()}
</main>

Only + files are routes

Other files in a route folder (components, helpers) are ignored by the router, so you can colocate them; shared code usually goes in src/lib.

त्वरित जाँच: Which path serves /blog/my-post?

  • src/pages/blog/[slug].svelte
  • src/routes/blog/slug.svelte
  • src/routes/blog/[slug]/+page.svelte
  • src/routes/blog/+slug.svelte
Answer

src/routes/blog/[slug]/+page.svelte — Brackets mark a dynamic segment.