@simontsui Good question. It's not that simple :)
I agree with all of your observations. Personally, I like #CVE_2023_4966 the best for readability.
The cvecrowd crawler searches for #CVE20234966, #CVE2023_4966, #CVE_20234966, #CVE_2023_4966 just to not miss anything. However, the thing that makes it complicated is searching for the hashtags used. There are too many CVE numbers to search for all of them regularly.
When searching for #CVE results do not include ANY of the above formats. Ironically, what it does find is #CVE-2023-4966.
In addition to hashtags, I also use full text search. When searching for "CVE" it finds CVE-2023-4966, but not when its written as a hashtag.
So a reliable way to get my crawler to find CVE posts is to use either the word "CVE", perhaps in combination with a CVE ID as described above, or the hashtag #CVE.