There some JCR-level constraints outlined here: https://jackrabbit.apache.org/oak/docs/constraints.html
That said, I try to stick with: lowercase, alphanumeric using hypens for separators, because:
- names are unambiguous
- names are easily human-readable
- names work well in URLs and do not require escaping/unescaping
- This is also the "default" way the AEM UI converts Titles to Node names (if you type in a Page title, it "auto-suggests" a Node name in this format)
Obviously, if your language is non-latin (ex. Chinese, Arabic, etc.) i wouldn't use latin characters 🙂 .. but i'd still avoid any unnecessary special chars, and use hypens for word delimiters.
Content architecture is a whole different can of worms though, and heavily depends on what your specific requirements.