What's the "best" way to version your product?
There is the classic “Major.Minor.Patch”. Maybe git sha? I see this becoming popular this year: “year.version” from folks like Neo4J and Rivian.
Define "best" and then define "your product". A library for a programming langugage will have very different idea about versioning than let's say, Microsoft Office.
I developed and shipped one product with monthly releases for decades and always simply bumped the version by one: 1, 2, 3..

Anything fancier doesn't really tell you exactly what features changed when, so a table in the documentation spelled that out for each version.

I have an iOS app and I stick with the usual semantic version scheme. It’s easy for me to use. If I jump to a new major version it’s easy to explain to users.
I use semantic version for basically everything. Even for non-technical users, it's at least OK. Breaking changes are a pretty easy idea.

Year.version might be better for marketing though.

For public consumption - year.version.

For libraries and even the internal version number of a public product like an OS release where developers still want to say.

if os.version > x:

standard semantic versioning.