Your site should have the correct semantic elements (header, main, footer, article, etc) in the order that they are intended to be read. This means that sometimes this isn't the order that makes styling the page the easiest. You must also ensure that all your heading levels are hit in the order. This means that you should not skip from an h1 to an h4, and so on.
You should always use native elements when possible (<button>, <input>, <select>, etc). If you can't, ensure you are following the ARIA design pattern for the role.
You can also use W3's Nu HTML Validator to check for proper nesting of elements, complete start/end tags and duplicate attributes.