---
title: The p. url
description: p.shebang.pro/<public-id> — how a page's address is built, and what changed for older accounts.
---

# The p. url

A published page is served at:

```
p.shebang.pro/<public-id>
```

where the public id is 12 characters from a 32-symbol alphabet, matching
`^[a-z2-7]{12}$`. It's assigned once, at publish time, and never
changes — renaming a page's title or its slug afterward doesn't touch
the address. See [public ids and urls](/concepts/public-ids-and-urls)
for the full rules this shares with sherserve's `f.` addresses.

## The trailing slash

A page's entrypoint is served at `p.shebang.pro/<public-id>/` — with a
trailing slash. The bare `p.shebang.pro/<public-id>` answers a `308` to
the slashed form (query string preserved). That is what makes a
bundle's own relative references (`<link href="styles.css">`,
`<a href="about.html">`) resolve inside the bundle rather than at the
host root; a bundle asset is served at `p.shebang.pro/<public-id>/<path>`
as before. Links you share can use either form.

## The old `@handle/slug` form

Older accounts may still see a page referred to by its owner's handle
and slug, `@handle/slug`, in places that predate public ids. Visiting
that form answers a `301` redirect — preserving any sub-path and query
string — to the id-based address above, for one release, rather than
serving the page directly. Anything you link going forward should use
the `p.shebang.pro/<public-id>` form; the redirect is a bridge, not a
permanent alternative.

## Slug is a label, not an address

A page's `slug` still exists and shows up in the dashboard and in a
short link's preview card, but it plays no part in the served url
anymore. Renaming it is purely cosmetic and never breaks a link.

## The short-link wrapper

Every publish also creates an `sl.shebang.pro` short link automatically,
alongside the `p.` address — see [short links and aliases](/sherlink/short-links-and-aliases)
for how that wrapper works and what deleting it does.

## Next

[Blogs](/sherpage/blogs).
