В "сайте" есть две основные компоненты: функционал и дизайн.
-
По функционалу, даже "поведению" сайта все относительно просто: это описывается так же, как для любого другого программного обеспечения, разве что с поправкой на stateless-характер HTTP
. Цели, средства, use cases и прочие варианты и методы описания "как это должно работать".
-
Что касается дизайна - то мои партнеры, занимающиеся дизайном, обычно поступают так: рисуют несколько набросков, из которых клиент потом выбирает понравившийся вариант. Далее этот набросок прорисовывается подробнее, после чего на этой картинке ставятся подписи обеих сторон, она получается статус "Приложение № (n+1): макет" и становится неотъемлемой частью общего ТЗ на сайт.
Что касается деталей реализации (например, табличная или блочная верстка будет использовать) - как мне кажется, их необязательно указывать в ТЗ кроме тех случаев, когда это а) критично б) заказчик имеет хорошее представление об этом.
Сам процесс написания ТЗ всегда трудоемок, требует вникания в предметную область Заказчика. Кстати, хорошо работает вопрос "а что Вам нравится из продукции конкурентов"? :)
Успехов!