Let’s start by pasting the code below into your functions.php file:
function basic_wp_seo() { global $ page, $ paged, $ post; $ default_keywords = 'wordpress, plugins, themes, design, dev, development, security, htaccess, apache, php, sql, html, css, jquery, javascript, tutorials'; // customize $ output = ''; // description $ seo_desc = get_post_meta($ post->ID, 'mm_seo_desc', true); $ description = get_bloginfo('description', 'display'); $ pagedata = get_post($ post->ID); if (is_singular()) { if (!empty($ seo_desc)) { $ content = $ seo_desc; } else if (!empty($ pagedata)) { $ content = apply_filters('the_excerpt_rss', $ pagedata->post_content); $ content = substr(trim(strip_tags($ content)), 0, 155); $ content = preg_replace('#\n#', ' ', $ content); $ content = preg_replace('#\s{2,}#', ' ', $ content); $ content = trim($ content); } } else { $ content = $ description; } $ output .= '<meta name="description" content="' . esc_attr($ content) . '">' . "\n"; // keywords $ keys = get_post_meta($ post->ID, 'mm_seo_keywords', true); $ cats = get_the_category(); $ tags = get_the_tags(); if (empty($ keys)) { if (!empty($ cats)) foreach($ cats as $ cat) $ keys .= $ cat->name . ', '; if (!empty($ tags)) foreach($ tags as $ tag) $ keys .= $ tag->name . ', '; $ keys .= $ default_keywords; } $ output .= "\t\t" . '<meta name="keywords" content="' . esc_attr($ keys) . '">' . "\n"; // robots if (is_category() || is_tag()) { $ paged = (get_query_var('paged')) ? get_query_var('paged') : 1; if ($ paged > 1) { $ output .= "\t\t" . '<meta name="robots" content="noindex,follow">' . "\n"; } else { $ output .= "\t\t" . '<meta name="robots" content="index,follow">' . "\n"; } } else if (is_home() || is_singular()) { $ output .= "\t\t" . '<meta name="robots" content="index,follow">' . "\n"; } else { $ output .= "\t\t" . '<meta name="robots" content="noindex,follow">' . "\n"; } // title $ title_custom = get_post_meta($ post->ID, 'mm_seo_title', true); $ url = ltrim(esc_url($ _SERVER['REQUEST_URI']), '/'); $ name = get_bloginfo('name', 'display'); $ title = trim(wp_title('', false)); $ cat = single_cat_title('', false); $ tag = single_tag_title('', false); $ search = get_search_query(); if (!empty($ title_custom)) $ title = $ title_custom; if ($ paged >= 2 || $ page >= 2) $ page_number = ' | ' . sprintf('Page %s', max($ paged, $ page)); else $ page_number = ''; if (is_home() || is_front_page()) $ seo_title = $ name . ' | ' . $ description; elseif (is_singular()) $ seo_title = $ title . ' | ' . $ name; elseif (is_tag()) $ seo_title = 'Tag Archive: ' . $ tag . ' | ' . $ name; elseif (is_category()) $ seo_title = 'Category Archive: ' . $ cat . ' | ' . $ name; elseif (is_archive()) $ seo_title = 'Archive: ' . $ title . ' | ' . $ name; elseif (is_search()) $ seo_title = 'Search: ' . $ search . ' | ' . $ name; elseif (is_404()) $ seo_title = '404 - Not Found: ' . $ url . ' | ' . $ name; else $ seo_title = $ name . ' | ' . $ description; $ output .= "\t\t" . '<title>' . esc_attr($ seo_title . $ page_number) . '</title>' . "\n"; return $ output; }
Once done, replace the $ default_keywords (line 3) with your own and add the following code into your header.php file:
<?php echo basic_wp_seo(); ?>
Then, don’t forget to check the source of your pages and fine tune the code if needed.
Big thanks to Jeff Starr for this amazing code!