1. Using '#' in URLs is not great.
- When requesting a page, the browser doesn't include anything after the hash, which means:
- Tag pages rely solely on client-side routing — they'll never work with JS disabled. You might not support no-JS right now, but if you ever want to allow for it in the future, it's incompatible with hash-based routing.
- SEO will probably be impacted; not sure how well crawlers deal with hash-based routing.
- If someone links to non.io/#dog on social media, I think the opengraph preview will also ignore the hash.
If you want client-side routing, you should use a library or the JS history API[0]. That way you can use normal URLs and potentially support server-side rendering to allow for no-JS clients.2. Putting user-generated URLs at the root of your site could be bad.
- Keep that namespace for yourself: what if you want to make a page at non.io/support but someone already named their post 'support'?
- Some stuff needs to be at the root (currently non.io/robots.txt 404s and seems to be trying to render a post).
- There are other standards that look for specific URLs, or non-standards: e.g. BlueSky was authenticating domain names in a dumb way [1]
To be fair, Twitter does put usernames at the root (not sure if they regret that), but they have some careful exceptions (/home, /i/, etc). If you don't want to switch your post URLs away from the root, you should at least set aside some of the useful URL real-estate.If you do decide to make these changes, you should try and set up redirects for any existing URLs, at least for a while.
[0] https://developer.mozilla.org/en-US/docs/Web/API/History
[1] >>35820368