What does hreflang do?
It tells search engines that a group of URLs are versions of one page for different languages or regions, so they can show each reader the right one. Google recommends declaring the relationship wherever localised versions exist. It translates nothing, does not decide the page's language, and does not lift rankings by itself. It affects which version is shown.
Do I need both hreflang and canonical tags?
Usually. Canonical handles duplicates of one page; hreflang handles alternates of one page for different readers. Translated pages each carry a self canonical plus the shared hreflang set. Same-language regional copies are the special case: decide whether they should be indexed separately, then set the canonical to match rather than leaving it to the CMS default.
Is en-HK different from en?
Yes. en is English for anyone. en-HK adds a Hong Kong signal, which matters when the page carries Hong Kong pricing, delivery or legal content. If the page is the same for everyone, use en and leave the region out.
Should I use zh-HK or zh-TW?
Choose by reader, not by writing system. Both are usually Traditional Chinese, but Hong Kong and Taiwan differ in vocabulary, currency and what people search for. A page written for Hong Kong is zh-HK; for Taiwan, zh-TW. One Traditional Chinese page serving both is zh-Hant. Google detects the actual language from the content, so no tag can make a Simplified page count as Traditional.
Is x-default mandatory?
No. It names the page for readers who match none of the listed versions, and Google says it works best for language selector pages. Useful when you have a global home page or a chooser; unnecessary when every reader matches one of your versions. More on x-default above.
Can hreflang live in a sitemap instead of the page?
Yes. Google accepts HTML link tags, HTTP Link headers and sitemap xhtml:link entries, and says using more than one brings no benefit in Search. Pick one method for the whole site. This checker reads the first two today; sitemap checking is planned.
Why does an audit say I have no return tags when I can see them?
Usually the return tag names a slightly different URL: http rather than https, a missing trailing slash, www against a bare domain. Or the tag sits outside the head, or is added by JavaScript after load. Run the pair through the checker; it compares the exact final URLs and shows the tag it found on each page.