Dear developers,
You need a button somewhere, or a mass action, that checks if a products canonical url is correct. If you delete an alias (menu, module, etc.) that is used in a canonical url, the resulting canonical url leads to a 404.
I changed a bunch of alias on the backend for various modules. This resulted in a bunch of products leading to 404. When I checked the database __hikashop_product, under the column product_canonical, I was greeted to a huge mess of old/non-existing canonical urls from way back when I was first testing hikashop, doh. I updated the table and set all product's canonical urls' to blank.
Perhaps when you update a alias (delete/modify), you check all products canonical urls and update them if needed. (ie. delete = set canonical url to blank; modify = set canonical url to new alias). Also a button would be nice, or a mass action as said above that can regularly check if canonical urls are correct / aliases used in a canonical url is available.