mirror of
https://github.com/BookStackApp/BookStack.git
synced 2026-07-16 05:33:49 +03:00
Feature Request: Extend Historical Slug Tracking to Books and Chapters for Complete URL Stability #5448
Closed
opened 2026-02-05 10:04:34 +03:00 by OVERLORD
·
5 comments
No Branch/Tag Specified
development
l10n_development
release
snyk-action
ci_and_static
mfa_key
phpstan_june26
MilnerMart/development
GamerClassN7/impersonations-for-admin
Zhey-on/feature/csp-image-css-controls-6033
tortillas5/development
llm_only
vectors
McTom234/oidc-key-algorithms
captcha_example
v26.05.2
v26.05.1
v26.05
v26.03.5
v26.03.4
v26.03.3
v26.03.2
v26.03.1
v26.03
v25.12.9
v25.12.8
v25.12.7
v25.12.6
v25.12.5
v25.12.4
v25.12.3
v25.12.2
v25.12.1
v25.12
v25.11.6
v25.11.5
v25.11.4
v24.11.4
v25.11.3
v25.11.2
v25.11.1
v25.11
v25.07.3
v25.07.2
v25.07.1
v25.07
v25.05.2
v25.05.1
v25.05
v25.02.5
v25.02.4
v25.02.3
v25.02.2
v25.02.1
v25.02
v24.12.1
v24.12
v24.10.3
v24.10.2
v24.10.1
v24.10
v24.05.4
v24.05.3
v24.05.2
v24.05.1
v24.05
v24.02.3
v24.02.2
v24.02.1
v24.02
v23.12.3
v23.12.2
v23.12.1
v23.12
v23.10.4
v23.10.3
v23.10.2
v23.10.1
v23.10
v23.08.3
v23.08.2
v23.08.1
v23.08
v23.06.2
v23.06.1
v23.06
v23.05.2
v23.05.1
v23.05
v23.02.3
v23.02.2
v23.02.1
v23.02
v23.01.1
v23.01
v22.11.1
v22.11
v22.10.2
v22.10.1
v22.10
v22.09.1
v22.09
v22.07.3
v22.07.2
v22.07.1
v22.07
v22.06.2
v22.06.1
v22.06
v22.04.2
v22.04.1
v22.04
v22.03.1
v22.03
v22.02.3
v22.02.2
v22.02.1
v22.02
v21.12.5
v21.12.4
v21.12.3
v21.12.2
v21.12.1
v21.12
v21.11.3
v21.11.2
v21.11.1
v21.11
v21.10.3
v21.10.2
v21.10.1
v21.10
v21.08.6
v21.08.5
v21.08.4
v21.08.3
v21.08.2
v21.08.1
v21.08
v21.05.4
v21.05.3
v21.05.2
v21.05.1
v21.05
v21.04.6
v21.04.5
v21.04.4
v21.04.3
v21.04.2
v21.04.1
v21.04
v0.31.8
v0.31.7
v0.31.6
v0.31.5
v0.31.4
v0.31.3
v0.31.2
v0.31.1
v0.31.0
v0.30.7
v0.30.6
v0.30.5
v0.30.4
v0.30.3
v0.30.2
v0.30.1
v0.30.0
v0.29.3
v0.29.2
v0.29.1
v0.29.0
v0.28.3
v0.28.2
v0.28.1
v0.28.0
v0.27.5
v0.27.4
v0.27.3
v0.27.2
v0.27.1
v0.27
v0.26.4
v0.26.3
v0.26.2
v0.26.1
v0.26.0
v0.25.5
v0.25.4
v0.25.3
v0.25.2
v0.25.1
v0.25.0
v0.24.3
v0.24.2
v0.24.1
v0.24.0
v0.23.2
v0.23.1
v0.23.0
v0.22.0
v0.21.0
v0.20.3
v0.20.2
v0.20.1
v0.20.0
v0.19.0
v0.18.5
v0.18.4
v0.18.3
v0.18.2
v0.18.1
v0.18.0
v0.17.4
v0.17.3
v0.17.2
v0.17.1
v0.17.0
v0.16.3
v0.16.2
v0.16.1
v0.16.0
v0.15.3
v0.15.2
v0.15.1
v0.15.0
v0.14.3
v0.14.2
v0.14.1
v0.14.0
v0.13.1
v0.13.0
v0.12.2
v0.12.1
v0.12.0
v0.11.2
v0.11.1
v0.11.0
v0.10.0
v0.9.3
v0.9.2
v0.9.1
v0.9.0
v0.8.2
v0.8.1
v0.8.0
v0.7.6
v0.7.5
v0.7.4
v0.7.3
0.7.2
v.0.7.1
v0.7.0
v0.6.3
v0.6.2
v0.6.1
v0.6.0
v0.5.0
Labels
Clear labels
🎨 Design
📖 Docs Update
🐛 Bug
🐛 Bug
:cat2:🐈 Possible duplicate
💿 Database
☕ Open to discussion
💻 Front-End
🐕 Support
🚪 Authentication
🌍 Translations
🔌 API Task
🏭 Back-End
⛲ Upstream
🔨 Feature Request
🛠️ Enhancement
🛠️ Enhancement
🛠️ Enhancement
❤️ Happy feedback
🔒 Security
🔍 Pending Validation
💆 UX
📝 WYSIWYG Editor
🌔 Out of scope
🔩 API Request
:octocat: Admin/Meta
🖌️ View Customization
❓ Question
🚀 Priority
🛡️ Blocked
🚚 Export System
♿ A11y
🔧 Maintenance
> Markdown Editor
pull-request
Mirrored from GitHub Pull Request
No Label
🔨 Feature Request
Milestone
No items
No Milestone
Projects
Clear projects
No project
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: starred/BookStack#5448
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @oopen on GitHub (Oct 8, 2025).
Describe the feature you'd like
Redirect from 404 to 301, a page when the book/chapter title change
Describe the benefits this would bring to existing BookStack users
No more 404 ! When page/chapter/book titles change.
Can the goal of this request already be achieved via other means?
Do NOT USE {SLUG} routing, USE permalink /link/{ID}
But the actual chapter/book slug history is lost !
Have you searched for an existing open/closed issue?
How long have you been using BookStack?
1 to 5 years
Additional context
BookStack currently no support for recovering from slug changes. Thanks to PR #5826, which introduced a middleware that redirects requests containing old page slugs to the stable permalink (
/link/{id}) by leveraging thepage_revisionstable. This is a valuable improvement that handles cases where only the page slug has changed.However, this solution is incomplete because it does not address slug changes at the book or chapter level—a common and equally disruptive scenario.
🧩 The Core Problem
In BookStack, a page’s public URL is structured as:
/book-slug/page-slug(if not in a chapter), or/book-slug/chapter-slug/page-slug(if in a chapter).If either the book or chapter slug is modified, all existing URLs to pages within that book or chapter break permanently, even if the page slug itself remains unchanged. For example:
/project-docs/api-guide/getting-started/project-docs/...returns a 404, despite the page still existing at/product-docs/api-guide/getting-started.This happens because:
book_revisionsorchapter_revisionstables exist).page_revisionstable includesbook_slug(as it was at revision time) but notchapter_slug.As a result, PR #5826 cannot redirect these broken URLs, because the middleware only matches the page slug and assumes the current book/chapter path is valid—which it is not if those containers were renamed.
🎯 Proposed Solution
To enable complete and reliable redirection of all historical URLs, we propose adding revision tracking for books and chapters by introducing:
book_revisionstable (columns:book_id,slug,name,created_at)chapter_revisionstable (columns:chapter_id,slug,name,created_at)This would allow:
/old-book/old-chapter/old-page).🔍 Why This Matters
✅ Backward Compatibility & Implementation
This change would be fully backward-compatible:
page_revisions.🙏 Conclusion
While PR #5826 was a great first step, true URL stability requires preserving slug history for all path components—not just pages. Adding revision tables for books and chapters would close this gap and make BookStack significantly more robust as a documentation platform.
Thank you for considering this enhancement!
@oopen commented on GitHub (Oct 8, 2025):
In addition, the best and most professional solution is : Implement a Permalink System with Automatic Redirects.
It is the only option that completely solves the problem for all users—past, present, and future—without any negative side effects like broken links or poor SEO. While it is the most complex to build, it is the "correct" way to handle this in a content management system and would be a massive quality-of-life improvement for all BookStack users.
Propositions to archive this : disabling the variable {SLUG} routing and using the actual {ID} or generating a {UUID} will be better
@oopen commented on GitHub (Oct 8, 2025):
This is a mitigation hack
c7b909aecb@bridgeyuwa commented on GitHub (Oct 10, 2025):
I strongly support this proposal.
Extending historical slug tracking and automatic 301 redirects to books, chapters, pages, and shelves would make BookStack’s URL system truly robust and future-proof. It directly solves the long-standing issue where renaming or reorganizing any of these items can break external links or harm SEO.
The current design idea feels solid, it maintains backward compatibility, enhances SEO, and builds user trust in shared links.
Suggested Improvements
Enable Historical Redirectsso self-hosted instances can toggle the behavior.This feature would bring BookStack’s link stability closer to what’s expected from full-featured CMS platforms, while keeping its clean, readable URLs intact.
@ssddanbrown commented on GitHub (Oct 11, 2025):
Thanks for the request @oopen and the input @bridgeyuwa, but I'm going to close this off as a duplicate of existing issue #5411.
This is something I'm wanting to implement soon, but I'm awaiting some significant database changes to be made first (ongoing in #5800) before moving onto this.
@ssddanbrown commented on GitHub (Oct 11, 2025):
Also, please avoid using AI to fill/write issues & comments within this project, it adds a lot of extra noise and I'd rather that time is focused on reading human thought/content.