inputとbutton

input要素はvoid要素のため、擬似要素が使えないが、button要素は使用できる。
button要素は見た目の柔軟性を向上するために追加された要素であり、input要素の後発。
そのため、IEでバグが多く、昔は動作が安定しなかったため、inputがよく使われた。

またデフォルトのCSSが若干異なる。

aとbutton

リンクとボタンというセマンティック上の意味の違いがある。
ページ内リンクやページを遷移するためのリンクを設定するのは、aタグ。
それ以外のUIとしての意味を持たせるのであれば、buttonタグを使用する(例えば、トップページへのリンクでないのに#や、javascript:void()を指定しているようなものはbuttonタグにする)。

また操作上、下記のような違いがある。

  • 特殊キーを押しながら操作した時の動作
  • 表示されるコンテキストメニューの違い
  • スクリーンリーダーの読み上げ内容
  • 画面の左下にリンク先が表示される

参考:https://zenn.dev/kandai/articles/fd23c7497c1fea

リンクをクロールできるようにするには

クローラーが認識できるリンクはhref属性が指定されたaタグのみである。
aタグでもhref属性がなかったり、javascriptのクリックイベントとしてリンクを設置している場合は、クローラーが認識できない。

たどることができないリンク:
<a routerLink="some/path">
<span href="https://example.com">
<a onclick="goto('https://example.com')">

https://developers.google.com/search/docs/advanced/guidelines/links-crawlable?hl=ja