Google is Full of Contradictions
Why is Search Engine Optimization (SEO) so complicated?
Of course, some people may tell you it's not. They are probably working on it daily, that's what a pro is. It's just in its veins and thus easy.
Okay, so, what's complicated?
First of all, things change. Probably a lot faster than you realize. That is, every single month, some parameters will be slightly different and make the same searches return different results. Or not. Because a user who's logged in is likely to see the same results he's got for a very similar or exactly the same search, especially when that user clicked one or more of the results. Great, but if that's a new search for the user, those results are completely different... Complicated enough already?
Technologically wise, each search engine also pushes their result quality comparing technological feature of the site. For example, if your website uses HTTPS instead of HTTP, you are likely to appear before a page that otherwise has an equal rank to yours. Also in 2015, Google decided to add Mobile search that only return mobile ready websites. Again that puts a great strain on the web masters.
Another aspect of search results by Google: it has to be fast. If your response time is too long, they do not want to show your website because their users would have to wait for you to answer.
Items on your website need to be well tagged. For example, you want images to be given a proper name and to load fast.
Up to here, though, it does not sound contracdictory, does it?
If speed is an issue, having a site using HTTPS when it does not require it (i.e. it only offers data and you never have to log in and post anything on that site) then the site will be slower for no good reason. That contradicts the speed issue Google likes too.
Loading an image can often be accelerated by using an image store. Only that often causes a problem: the name of the image is now set to something like the MD5 of the image. This is double practical because the image URL will be forever unique, which means you can ask the browser to cache that data forever. So you gained a lot in speed but as a side effect, you lost in searchability because now the image does not have a describing name. (i.e. if you do not use the MD5 of the file as the URI for that image, then it is not unique because the user may end up loading another image with the same name so you cannot benefit from the cache as much... now you want the end users to see the new image, don't you?)