I have my site built as an SPA using Knockout. The main-page populates a list of items dynamically as the user scrolls and each item has a details-page which is also dynamically loaded. I have implemented so that each details-page do have an explicit url which is handled with the same main-page if navigated to directly.
Only now I realized all the problems with dynamically generated sites and SEO. Since all items are generated client-side, the web crawler sees basically nothing. I did an attempt with rendering links server-side to all details-pages but since they are then also generated dynamically with Knockout, a web crawler still sees nothing.
Serving different content to search engine spiders is known as "cloaking" and it is specifically against the webmaster guidelines published by the search engines:
Some examples of cloaking include:
Serving a page of HTML text to search engines, while showing a page of images or Flash to users
EDIT: as of 2018 the crawlable AJAX described in this section is no longer available for Google.
Google also publishes a guide to making AJAX powered sites crawlable. To make this work you need to:
#!in your URLs where you would normally use just a
<meta name="fragment" content="!">for pages (such as your home page) that don't have a
#in the URL
A correctly implemented site that uses pushstate typically doesn't need any extra support for us to be able to crawl it.
Here is a guide from moz.com on using pushstate to make a crawlable client side powered website that is still SEO friendly.
Since you have pages with URLs for your product pages already. One quick thing that you should do it to create an XML sitemap of all those product URLs. If you do that Google will be able to find all those URLs and index them.
The only caveat is that just having those pages in a sitemap will not help them rank well. You would still need to implement a way for Googlebot to be be able to see links into them from other places on your site if they need to rank better than your competitors' pages in the search results.