Is this a good structure for my website? I have been building a site using php and would like advice to improve the structure of my site and the best way to lay out my code for SEO. I'm also a little concerned about echoing large chunks of HTML and how SEO will work with my structure.

Ok here's my structure...

My site contains many pages with only the body content changing for each page. So I have created template functions in PHP for echoing HTML. I use $_GET['page_id'] in a switch statement to determine what page content to load. .

my pages look something like this....

Header();                            //echo header HTML

 switch ($_GET['page_id'])            //Echo body content
 {
   default: homePage(); break;
   case 1:  servicesPage(); break;
   case 2:  galleryPage(); break;
   case 3:  contactPage(); break; 
 }

 Footer();                           //Echo footer HTML


And my php functions look like this

 function header() {
      echo "&lt;div&gt;
             &lt;h1&gt;Header&lt;/h1&gt;
            &lt;/div&gt;";
 }

 function footer() {
      echo "&lt;div&gt;
             &lt;h1&gt;Header&lt;/h1&gt;
            &lt;/div&gt;";
}

 function homePage() 
 {
    echo "&lt;div&gt; 
           &lt;h1&gt; Home &lt;/h1&gt;
           &lt;ul&gt; 
            &lt;li&gt; Home1 &lt;/li&gt;
            &lt;li&gt; Home1 &lt;/li&gt;
           &lt;/ul&gt;
           &lt;p&gt;This is home page&lt;/p&gt;
          &lt;/div&gt;";

 }


I'm really looking for any pointers to improve my code but my main concerns are...

Is it ok to echo large chucks of HTML like that from php? especially with my site growing?

Does Google crawler bot still crawl my site ok using $_GET['page_id'] for all my pages?

P.S I'm new here, so sorry if any code formatting is a little off!
Looking at your switch statement from an SEO point of view, I'd have to say: it's awful (sorry).
One of the first things to look at, when you're interested in SEO, is mod_rewrite. Search engines don't like urls that say nothing:

http://www.my-site.com/1
http://www.my-site.com/2
http://www.my-site.com/3
http://www.my-site.com/3


Doesn't say anything, whereas

http://www.my-site.com/home
http://www.my-site.com/services
http://www.my-site.com/gallery
http://www.my-site.com/contact


If anything, contains a sort-of meaningful keyword in the url from the off. Not only to crawlers love that, so do people browsing your site, for that matter.
Naturally, you have to keep this up, take the services page for example. I'm assuming that this is the page where you list what you do/offer, then all sub-nav urls should look like:

http://www.my-site.com/services/custom/cms
http://www.my-site.com/services/portfolio


And so on...
As to what Topener suggested: require_once 'pages/'.$_GET['page'].'.php'; is a terrible, terrible idea. Using data from the network, data the client can change to determine what files should be loaded is a huuuuge security hole!

From a CodeReview viewpoint:
A switch is all well and good, but it won't be long untill you find yourself scrolling up and down through your code, because the switch-case has grown so large. You'll have to invent hacky ways of dealing with form validation, and other types of client requests (pagination, ajax, file uploads, ...) in a manageable, safe and maintainable way.
A switch can be useful to shorten a lot of if-elseif-elseif-else branches, but not for something as crucial as to determine what page you have to present the client with. Most modern sites would go with a framework that implements the MVC pattern (Symfony2, ZendFW, Yii, ...)
As AD7Six said in his comment: if all you're after is a simple routing solution, there are micro-fw's, too, that might be a better fit for your problem. Even so, most frameworks are more or less modular, and with a dependency manager like composer, you can use the routing module(s) from any framework.

Your functions are also in violation of the PSR standards as defined by PHP-Fig (look for them on github). Classes (objects) start with an upper-case, functions/methods don't. Try to adhere to what little standards/conventions you have

Lastly, this just looks wrong to me:

switch($foo)
{
    default: homePage(); break;
    case 1: ...
}


The defaut case is the fallback case. To me, logic dictates that the default/fallback procedure is the last resort, and it should therefore be written as the last case label. Maybe that's just me, and my (sometimes over eager) tendency to use case fallthroughs:

switch ($foo)
{
    case 1:
    case 2:
        bothDoTheSame();
        break;
   case 3:
       threeSpecific();
   case 4:
       threeAndFour();
       break;
   default: defaultCase();//no break required
}