posts_nav_link
is intended for archive pages. That function uses get_next_posts_nav_link
which uses the global
variable $wp_query
. There is a check for !is_singular()
. That will always be false on your “static” page, since $wp_query
will represent the page (single) and not the query you have created. So, yes, it is because it is a static page.
Chip Bennett wrote/compiled an fairly exhaustive answer explaining how to make pagination work.