In #3094 Keats mentioned that they were planning on reworking how internal links work after the terra2 refactor.
I’m here to make the case for treating all schema-/protocol-less paths as internal links, and drop the special @/ syntax entirely. Instead, Zola would always translate absolute (eg. </foo>) and relative (eg. <../foo>) paths according to the internal link rules.
I wasn’t around for the ./ → @/ discussion (#686, #19) so apologies if this is reopening a closed issue.
Here are my arguments:
- When a markdown file is displayed in a git forge (eg. GitHub),
@/links are always broken, making it harder to navigate through the markdown. If links are encoded as file system paths, they’ll work in the markdown previews. Note: this is only true for relative paths unless/means the root of the repository and not/content/. - Relative paths are more resilient than absolute paths. If I have a folder of posts that interlink and I decide I want to reorganize them, I’d have to change every absolute path. Relative paths don’t suffer from this problem.
- It’s intuitive. Users don’t need to learn a new syntax. You just link to the file. The user doesn’t need to consider aliases, path overrides, slugs, etc.
- Strict by default. The normal tool users reach for (standard markdown links) becomes the safer option, and that means less broken links.
- Pages and assets behave the same.
Some downsides:
- You cannot make protocol-less links to files not managed to Zola, you always have to include the domain. Personally, this feels like an uncommon thing to do anyway?
- Extremely breaking change, though it would be pretty easy to write helpful error messages or even make a tool to do the migration.
Anyways, thanks for giving this a read, and thanks for making a great tool!
for whatever reason, I can’t include links in my post; sorry!

