This improves changelog readability and makes it easy to find relevant changes. There are multiple ways to categorize changes - choose whatever suits your project best. Here are the most common categories:
Change types - bug fixes (aka fixed), new features (aka added, new), improvements (aka changed, updated), deprecations (aka deprecated), removed
Breaking changes (aka Migration)
Documentation (aka Docs)
Important system components (e.g. Core, Plugins, individual packages)
Significant new features
Internal (aka Development) - for project developers
When grouping changes doesn't make sense you can label them a prefix, for example '[docs] ...'.
Use "Unreleased" section to help users and project developers to stay informed on the upcoming changes. It also helps you at release time - just move changes from this section into the new version section.
Provide link to the list of commits since the last release