They're not the same. A page fault means an access to a page required help from the kernel. A hard fault means an access to a page required I/O. There are many reasons a page access would require help from the kernel but no I/O. The three most common are first use, copy on write and access tracking.
First use means that an area of memory that has been allocated but never accessed was accessed for the first time. The kernel needs to map a page of zero-filled physical memory to service the operation. So kernel help is needed, but since the page is blank, no I/O is needed.
Copy on write means that a page is shared by two or more processes only because they have the same data in that page. If a process writes to a copy on write page, the kernel has to give that process its own copy of the data in that page so that it doesn't corrupt the other process. This requires kernel help, and thus causes a page fault, but no I/O since the data is already in memory.
Access tracking means that a page that hadn't been recently accessed was accessed. The kernel needs to know this because it doesn't want to page out or release pages that are recently accessed. So periodically, the kernel deliberately forces accesses on pages to trigger a page fault to give the kernel a chance to track which pages are being accessed. Again, since the page data is already in memory, no I/O is needed.