Group By And Two Counts
Aside from the performance issues you should make the query more readable by using relevant variable names instead of a, b, c, d, g, and h.  In addition, the ambiguous ListReport class name should be changed to something more specific like PageUsage since it contains information about a page and how many times it has been viewed/used for signup.

(from page in Context.Pages
join visitor in Context.Visitors on page.PageID equals visitor.PageFK
join visit in Context.Visits on visitor.VisitorID equals visit.VisitorFK
join signup in Context.Signups on visit.VisitID equals signup.VisitFK
where
signup.DateOptinUtc.HasValue &amp;&amp; page.UserFK == USER_ID
group signup by new { page.PageID, page.DateCreated, page.BaseName, page.Name }
into signupsByPage
select
new PageUsage
 {
     DateCreated = signupsByPage.Key.DateCreated,
     BaseName = signupsByPage.Key.BaseName,
     Id = signupsByPage.Key.PageID,
     Name = signupsByPage.Key.Name,
     Optins = signupsByPage.Count(),
     Views =
         (from subVisit in Context.Visits
          where
              subVisit.Visitors.PageFK == signupsByPage.Key.PageID
          select subVisit).Count()
 }).AsQueryable();