Real answer:

For the most part it doesn’t matter

There are many "By" selector types and they all have advantages and disadvantages. I have yet to be on a project where we just used one type of selector. As long as you are creating good (work and are maintainable) selectors you really don’t need to stress out about what is the best selector.

Closing thoughts:

The "best" selector for your team is largely a matter of what works and what is maintainable

You are not tied to one "By" selector type

Selenium supports several "By" selectors, not just CSS and XPath

Avoid saving selectors as string, instead save them off as "By" objects

This make is easier to maintain your selectors

Test your selectors before running your scripts

All modern web browsers come with developer tools that allow you to test selectors on any open web page