···1818| `ignore` | `string[]` | No | - | Glob patterns for files to ignore |
1919| `removeIndexFromSlug` | `boolean` | No | `false` | Remove `/index` or `/_index` suffix from slugs |
2020| `stripDatePrefix` | `boolean` | No | `false` | Remove `YYYY-MM-DD-` date prefixes from slugs (Jekyll-style) |
2121+| `pathTemplate` | `string` | No | - | URL path template with tokens (overrides `pathPrefix` + slug) |
2122| `bluesky` | `object` | No | - | Bluesky posting configuration |
2223| `bluesky.enabled` | `boolean` | No | `false` | Post to Bluesky when publishing documents (also enables [comments](/comments)) |
2324| `bluesky.maxAgeDays` | `number` | No | `30` | Only post documents published within this many days |
···3435 "publicDir": "public",
3536 "outputDir": "dist",
3637 "pathPrefix": "/posts",
3838+ "pathTemplate": "/blog/{year}/{month}/{slug}",
3739 "publicationUri": "at://did:plc:kq6bvkw4sxof3vdinuitehn5/site.standard.publication/3mdlavhxjhm2v",
3840 "pdsUrl": "https://andromeda.social",
3941 "frontmatter": {
···113115```
114116115117This transforms `2024-01-15-my-post.md` into the slug `my-post`.
118118+119119+### Path Template
120120+121121+By default, the URL path for each post is `pathPrefix + "/" + slug` (e.g., `/posts/my-post`). For more control over URL structure, use `pathTemplate` with token placeholders:
122122+123123+```json
124124+{
125125+ "pathTemplate": "/blog/{year}/{month}/{slug}"
126126+}
127127+```
128128+129129+This would produce paths like `/blog/2024/01/my-post`.
130130+131131+**Available tokens:**
132132+133133+| Token | Description | Example |
134134+|-------|-------------|---------|
135135+| `{slug}` | The generated slug (from filepath or `slugField`) | `my-post` |
136136+| `{year}` | Four-digit publish year | `2024` |
137137+| `{month}` | Zero-padded publish month | `01` |
138138+| `{day}` | Zero-padded publish day | `15` |
139139+| `{title}` | Slugified post title | `my-first-post` |
140140+| `{field}` | Any frontmatter field value (string fields only) | - |
141141+142142+When `pathTemplate` is set, it overrides `pathPrefix`. If `pathTemplate` is not set, the default `pathPrefix`/slug behavior is used.
116143117144### Ignoring Files
118145