Why is it stated that metadata is a property of symbols?

def is a special form and its syntax allows to add metadata on the var your are creating. It does not attach that metadata also to the value. Typical metadata fields attached to a var are :docstring, :private and/or :macro. If you want to add metadata to the value that the var is pointing to, e.g. a symbol, you can do that with with-meta, vary-meta, etc.:

(-> 'foo (with-meta {:a 1}) meta)
{:a 1}

I use that feature a lot in clj-kondo. Not all values can carry metadata, for examples strings and keywords cannot.