GithubHelp home page GithubHelp logo

sybrew / the-seo-framework Goto Github PK

View Code? Open in Web Editor NEW
406.0 28.0 47.0 9.27 MB

The SEO Framework WordPress plugin.

Home Page: https://theseoframework.com/

License: GNU General Public License v3.0

PHP 84.88% CSS 1.29% JavaScript 13.83%
wordpress-plugin php seo framework metadata api opengraph schema-org xml-sitemap wordpress

the-seo-framework's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

the-seo-framework's Issues

No images in sitemap

I'm used to having images get indexed explicitly via the sitemap, but noticed they don't appear in The SEO Framework's sitemap. It made me wonder if it's even necessary to explicitly list them, or if bots consume them reliably directly from the posts. What do you think, @sybrew?

sharing does not show image

Hello

I installed the plugin on one of my sites and I'm enjoying the performance.

But I have a problem. When I share a post on social networks (Facebook, G +, Twitter) the highlighted image does not appear in the post sharing.

If you could help me solve this problem I would be very grateful.

sorry for my bad English.
2016-04-26-14 41 32_477x372
2016-04-26-14 46 00_583x357
2016-04-26-15 05 40_372x378

BuddyPress query detection

Currently, The SEO Framework can't detect BuddyPress pages.
This means, for instance, the canonical URL will point towards the homepage.

For this to work, a new layer of compatibility has to be written; as also has been for WooCommerce.
The current BuddyPress page ID has to be detected as well.

BuddyPress has an array of functions for this; but it's very annoying to work with as it invokes all kinds of debugging errors 😑. Oh well...

wp-admin paths in robots.txt incorrect when WP installed in subdirectory

when WP is installed in a subdirectory such as on a bedrock install, robots.txt shows:

User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php

expected output is:

User-agent: *
Disallow: /wp/wp-admin/
Allow: /wp/wp-admin/admin-ajax.php

example from a bedrock install that's not running this plugin: https://roots-example-project.com/robots.txt

wordpress core uses the site URL instead of home URL for the admin paths: https://github.com/WordPress/WordPress/blob/a800cf654b7ed54fbb329fdce865672f300b1e79/wp-includes/functions.php#L1319-L1322

Disable transient cache for posts

From kiets' review:

When having lots and lots of posts, the transients can and will flood the database.

In order to solve this, a new option has to be created:

  • Disable meta transients?

Explaining what it does, and maybe auto-enable this when more than an "X" amount of posts have been found (action: 'activate_' . THE_SEO_FRAMEWORK_PLUGIN_BASENAME) should be an ideal way to handle such situations.

See #39 (General settings metabox) for its location and implementation.

Confusing verbiage in settings

SEO > Social Media Settings > Post Dates > Home Page

The part I think may be wrong, or I'm misunderstanding how that works is the "by disabling the"... Should it not be "by enabling the following options"?

screen shot 2016-07-07 at 17 52 50

Also where do you take that time from? the time that page was last updated/published or based on recent posts published dates? Just wondering as I'm starting to look into migrating some clients to this plugin.

Cheers

The Plugin is incompatible with Wordpress 4.7.0 and WPEngine

When I try and make deploys from staging to production in WPEngine I get the attached message:
screen shot 2016-12-29 at 10 28 15 am

I deactivated and reactivated all my plugins one by one and also had a WPEngine technician look into this. We have determined that the issue is with the SEO Framework plugin. Please resolve! We love this plugin!

The SEO Framework destroys Relevanssi Search Plugin

Hi there,

you're doing a great job! Thank you very much for that very useful and clean plugin. Looking forward to see much more in the future like a global settings page for multisite networks. :)

However I found out that it breaks the search results if Relevanssi is activated. I was happy to find the solution in another answer here on GutHub and want to go sure that you're aware of this so other users find the issue solution as well.

Adding
add_action( 'init', 'seo_remove_search_filter' ); function seo_remove_search_filter() { if ( function_exists( 'the_seo_framework' ) ) remove_action( 'pre_get_posts', array( the_seo_framework(), 'search_filter' ), 999 ); }
to functions.php let's Relevanssi work as expected. Maybe you can add a check for common search enhancement plugins like Relevanssi.

Best regards,

Philipp

Setting description['social'] empties og & twitter tags, does not eliminate them

Since there's currently no way to modify the description created in the plugin I'd like to stop the og:description and twitter:description tags from being created and run my own. However, when I turn social off using the the_seo_framework_description_args filter it only empties the meta tags and still displays them in the HTML.

Expected behavior would be for the tags to no longer exist in the HTML, allowing me to use my own.

Happy to create a patch and submit a PR if this is something you'd like to pursue πŸ‘

Ability to select primary category for posts.

From: Levente's question on WordPress.

When multiple categories are assigned to a post, the primary category is automatically chosen first of all set categories in alphabetic order.

The goal is to be able to select the primary category, as per the wish of the post author or editor.

Pros:

  • LD+json and theme/plugin breadcrumbs will correctly display the preferred/primary category.
  • Complex breadcrumbs will no longer be prioritized.
  • The user has a more reliable expectation.

Cons:

  • A possible cause for bugs with some themes and plugins.
  • Requires additional interaction for each post.
  • Could confuse or irritate users as they don't know what's set from just "viewing" the post in the overview or on the front-end.
  • Creates additional overhead in maintenance (WordPress 4.4+ differs greatly from what's below) We support WP 4.4+ only now.

no open graph image fallback?

perhaps I am missing where this is at or documented but it seems that there is not an option to add an open graph image fallback for pages/posts without a featured image.

Settings Exporter & Importer

A feature that also has been asked for a few times:
An exporter and importer for SEO Settings.

Particularly handy for when you host many alike websites, or if you wish to migrate to a clean environment.

Planned as a Free Extension πŸ˜„.

Note to self: Allow missing settings merge to happen automatically with defaults.
More importantly: Don't forget to state that it's best to grab an export file where TSF version numbers match.

Pagination detection from Page Builders

From Bichareh's support topic:

Pagination is not correctly detected by The SEO Framework when it's queried by page builders, such as Visual Composer.

This is because (for example) Visual Composer adds its pagination Just in Time, within the appropriate element. This is too late for The SEO Framework to detect.

To support this, an extra module needs to be added:

  1. It needs to detect page builders, which is already possible.
  2. It needs to detect pagination from the page builder and its state (which page we're on).
  3. This needs to propagate to the Pagination, Title and Canonical URL output.
  4. The pagination could lead to duplicated or incorrect content for Search Engines, as page builders tend to not consider correct use of aside tags, among other scenario's as image carousels.

Because of 4., I believe this is best handled within the Page Builder β€” be it either through their plugin, or through their interface externally β€”, so that users who set up the pagination are aware of this behavior.

Filter for JSON Search schema

Hi,

I'm working with an edge case where I'm not using the ?s= search parameter for my site but there's little control for changing the potential action schema.

Is there an objection to adding a filter for the $target variable or maybe the $json variable for full control?

Search Canonical URL points to first page

From MassimoD's bug report:

When performing a search action on any WordPress installation, by default, the canonical URL will point to the first post/page result found.

This is not beneficial when the user wants Search Pages to be indexed by Search Engines. But the feature (as it should be) wasn't either.

Also, allowing Search Result pages to be indexed is a major concern for SEO issues: Duplicated Content.
Finding items throughout the site should never be handled through the sitemap or local search, but should instead be handled through WordPress Tags and Categories.

Therefore, this bug (it wasn't intended to be this way), can actually be seen as a positive feature.

In 2.6.5 it was promised to always point to the home page. Such alterations were assumed, but not made.

I need feedback on this one. And I possibly think this can only be conveniently solved by adding options.
See #20 for this more focused, but related, feature request.

I know, many topic labels have been added, but this "bug" covers a wide spectrum.

General settings metabox

Feature to add a general metabox, including:

  • Layout options (i.e. output metaboxes, bars)
  • Timestamp output options
  • Canonical URL settings (http, https).
  • And more...?

This change should reset the SEO Settings page metaboxes order to maintain a consistent experience.

robots.txt file throws 404

Trying to figure out why the generated robots.txt file throws a 404 error code.
I can view it w/ my browser but Google search console and Fetch show it as 404.

Thoughts?

WP: 4.6.1
Plugin: 2.7.0
PHP 7.0.12-1+deb.sury.org~trusty+1

Title too long when it's not

I have a small WooCommerce store. At the time of this issue submission I have 81 categories. Some of the categories I use the generated title and some I create a custom title because of the length. The issue is SEO framework says the title is too long for the custom titles I created when they are between 50 - 55 characters. This doesn't happen on all of the custom titles only some.

Manually created seo title showing up with - site title

AFAIK the post/page title will also have the site title on L or R if it's automated (aka you didn't manually write your post seo title). I'm having it show up regardless if I manually add my title to the "Post SEO Settings" > "Custom Post Title". I'd like it to not do that... or give me an option to disable that?

WP: 4.6.1
Plugin: 2.7.0
PHP 7.0.12-1+deb.sury.org~trusty+1

meta_query conflict

Hi sybrew,

Quick and dirty: Running into a site search conflict when SEO Framework is active that returns 0 content for any s= and from what I can tell it's because of the meta_query arrary that gets set in search.class.php LN 82. I think. Maybe.

Long explanation below, b/c I'm not sure exactly what's going on and code about as well as a caveman with a keyboard. So I manage a site that lives within a WP Multisite within a university environment that has some custom post types and ACF fields. Our multisite admin introduced me to SEO Framework at some point earlier this year and quickly came to appreciate the level of control it provided.

One of our homebrew cpts is a course post that uses ACF for session/date info and an shared all posttype 'Location' taxonomy to create a targeted search for just courses with some options to filter. Initially I was using Ultimate WP Search Query Filter plugin to generate this and embed, but apparently on our multisite AJAX is locked down, and the search won't function for non-University logged in users, which was an issue since our courses are for public at large/industry segments. Sitewide search worked fine, though I could never get UWPSQF to use the non-AJAX search results option, so had to dump it and try building a custom search.

Thus I set to cobbling together a search form that throws filter options via url to a custom search.php for the course post_type and then hits the loop with whichever arguments are provided. Things looked dandy testing in my dev space and when I pushed the theme updates to production, search didn't return anything.

So dumping wp_query on both I ended up with the logs here:
multidev-shingo-wp-query.txt
production-shingo-wp-query.txt

So I see the main differences between the two as:

`
https://multidev.eos.ncsu.edu/ncjones4/?s=shingo
MultiDev's request:
[request] => SELECT SQL_CALC_FOUND_ROWS DISTINCT wp_17_posts.ID FROM wp_17_posts LEFT JOIN wp_17_postmeta ON wp_17_posts.ID = wp_17_postmeta.post_id WHERE 1=1 AND (((wp_17_posts.post_title LIKE '%shingo%') OR (wp_17_postmeta.meta_value LIKE '%shingo%') OR (wp_17_posts.post_excerpt LIKE '%shingo%') OR (wp_17_posts.post_content LIKE '%shingo%'))) AND wp_17_posts.post_type IN ('post', 'page', 'attachment', 'courses', 'staff', 'project', 'tribe_venue', 'tribe_events') AND (wp_17_posts.post_status = 'publish' OR wp_17_posts.post_status = 'acf-disabled' OR wp_17_posts.post_status = 'private') ORDER BY wp_17_posts.post_title LIKE '%shingo%' DESC, wp_17_posts.post_date DESC LIMIT 0, 5
[posts] => Array ( ...

https://www.ies.ncsu.edu/?s=shingo&debug
Production's request:
[request] => SELECT SQL_CALC_FOUND_ROWS DISTINCT wp_15_posts.ID FROM wp_15_posts LEFT JOIN wp_15_postmeta ON (wp_15_posts.ID = wp_15_postmeta.post_id AND wp_15_postmeta.meta_key = 'exclude_local_search' ) LEFT JOIN wp_15_postmeta ON wp_15_posts.ID = wp_15_postmeta.post_id WHERE 1=1 AND (((wp_15_posts.post_title LIKE '%shingo%') OR (wp_15_postmeta.meta_value LIKE '%shingo%') OR (wp_15_posts.post_excerpt LIKE '%shingo%') OR (wp_15_posts.post_content LIKE '%shingo%'))) AND (
(
wp_15_postmeta.post_id IS NULL
)
) AND wp_15_posts.post_type IN ('post', 'page', 'attachment', 'courses', 'staff', 'project', 'stlr_place', 'tribe_venue', 'tribe_events') AND (wp_15_posts.post_status = 'publish' OR wp_15_posts.post_status = 'acf-disabled' OR wp_15_posts.post_author = 35 AND wp_15_posts.post_status = 'private') GROUP BY wp_15_posts.ID ORDER BY wp_15_posts.post_title LIKE '%shingo%' DESC, wp_15_posts.post_date DESC LIMIT 0, 5
[posts] => Array
(
)

Post meta appears in the dump in a couple of spots on Production::

        LN 108
        [meta_query] => Array
            (
                [0] => Array
                    (
                        [0] => Array
                            (
                                [key] => exclude_local_search
                                [value] => 1
                                [type] => CHAR
                                [compare] => NOT EXISTS
                                [relation] => AND
                            )

                    )

            )
        ...
        LN 168
        [meta_query] => WP_Meta_Query Object
            (
                [queries] => Array
                    (
                        [0] => Array
                            (
                                [0] => Array
                                    (
                                        [key] => exclude_local_search
                                        [value] => 1
                                        [type] => CHAR
                                        [compare] => NOT EXISTS
                                        [relation] => AND
                                    )

                                [relation] => OR
                            )

                        [relation] => OR
                    )

                [relation] => AND
                [meta_table] => wp_15_postmeta
                [meta_id_column] => post_id
                [primary_table] => wp_15_posts
                [primary_id_column] => ID
                [table_aliases:protected] => Array
                    (
                        [0] => wp_15_postmeta
                    )

                [clauses:protected] => Array
                    (
                        [wp_15_postmeta] => Array
                            (
                                [key] => exclude_local_search
                                [value] => 1
                                [type] => CHAR
                                [compare] => NOT EXISTS
                                [relation] => AND
                                [alias] => wp_15_postmeta
                                [cast] => CHAR
                            )

                    )

                [has_or_relation:protected] => 
            )

        [date_query] => 
        ...
    `

And when I deactivate SEO Framework and voila, search starts returning things in production again.

So obvs I failed to notice SEO Framework wasn't activated in multidev. Okay. And for some reason &debug doesn't work on multidev, but I dropped a print_r( $wp_query ); in the search.php so I could get the log there.

None of the content in the site has exclude_local_search enabled.

So, not sure why the value of that key is being set as 1. And I'd like to keep using the SEO Framework plugin. I don't anticipate we'd need to hide anything in the site from search, so what I'd kinda like to test is maybe overriding that value to always 0 and testing multidev to see if that's enough to fetch results.

Alternatively I may have done something stupid with search.php and search-courses.php such that's conflicting with SEO Framework, but I don't immediately see it. I've stuck the child theme on my personal git here https://github.com/ndyjones/ies-divi-child if it helps track whatever the hell I've done.

Any insights or help you could provide would be much appreciated.

Can't save menu on Genesis.

With The SEO Framework 2.7.0, when you try to save your menu it will perform a wp_die().

Message: "Are you sure you want to do this?"
Theme: Genesis 2.3.x
WordPress: 4.6.1 MultiSite

Further testing is required.

the_seo_framework_ogimage_output filter

Can we have a filter that won't output meta property="og:image"

For a Facebook, image needs to have width and height properties and it's much easier to replace the default output with custom one.

The even better option would be to have a filter to disable the whole 'og' section.

For dynamic pages the og properties section has to be custom build and the main issue I'm having is to disable default output. The the_seo_framework_output_canonical filter works as expected. The other filters do not follow this pattern.

SEO Bar CSS rewrite

Firefox (Gecko) is an awesome browser, used by millions of tech-savvy users.

Unfortunately, it still has a back-log of bugs with tables. Which prevents a good layout output with the SEO Bar outputted by The SEO Framework.

See these two related Bugzilla reports:

To solve this issue, we need to find a way to either:
a) Completely redesign the SEO Bar.
b) Use a "hack" to solve this issue, either browser-targeted or with the use of flex-box, etc.
c) Suggestions?

With a) we mean that we make it smaller, auto-expanding, etc.
With b) we mean that we solve this bug by adding CSS targeted at Gecko browsers.

Alas, with b), any resolution so far breaks layouts in other tables, like the ones from bbPress, WooCommerce, and other third party plugins that output their own custom tables. See this WordPress.org support post, for example.

Eventually, what we wish to achieve is this:

  • An automated SEO Bar injection that works with any CPT, at all times, without the need to adjust any WordPress table CSS.

Generated Sitemap does not reflect correct translated slugs using WPML

Hello

Our site is multilingual so we use the plugin at wpml.org for translation.
The generated sitemap does not set the correct translated slugs in the tag.

This is the base language:

<url>
<loc>https://domain.ch/kontakt/</loc>
<lastmod>2016-09-13T10:49+02:00</lastmod>
<priority>0.9</priority>
</url>

And this is the translated version:

<url>
<loc>https://domain.ch/en/kontakt/</loc>
<lastmod>2016-09-13T16:32+02:00</lastmod>
<priority>0.9</priority>
</url>

As you can see "kontakt" is not change to the slug "contact" we have set for this page.

How can we solve this? Google Search Console returns errors, as the sitemap contains erroneous urls.

Let me know if you need the plugin to solve the issue.

Thanks,
Aldo

Filter to modify full description output

I would like to be able to modify the description text with my own custom description text - ideally on a social and page basis. I'm thinking functionality similar to the_seo_framework_pre_add_title or the_seo_framework_pro_add_title where you could simply insert your own text and overwrite.

The reason is that we're running a metabox for our own social media description that the client can overwrite - we have it in a particular flow that's easy to manage and edit and would prefer to keep our description.

Happy to write a patch and submit if this is something you'd like to pursue.

Maintain SEO Post Meta revision cache.

From Philipp's support question.

When wp-cron is fired, no post meta gets saved. This is because we don't maintain Post Meta revision data.
To resolve this, and prevent plugin conflicts, we could save post meta in a revision, from which the data propagates to the actual outcome.

In order to do so, more investigation on this actual behavior needs to precede.

Robots.txt edits

Feature:
Add an easy interface (like cPanel's DNS editor) to manage robots.txt "file" output. Only to be working when no static file is present. i.e. Only by the use of filters.

I do not want to over-write files nor leave permanent marks.

Planned as a free extension πŸ˜„.

Disable Schema

Hi,

I just tried using the add_filter( 'the_seo_framework_ldjson_plugin_detected', '__return_false' ); to disable schema output as I am using the schema plugin for it but with no luck.

Feature: Social image upload for posts

A feature that has been requested so many times, I simply can't ignore it anymore with the philosophy: "Use what WordPress gives you".

Planned for 2.8.0 release.

More sitemap types

Hi,

I would like to suggest adding an optional checkbox to include an archive/category do sitemap.xml.
The user could also choose some categories to include/exclude.

Regards
Pedro Mendonça

og:description is using first paragraph of text

I have an issue where the og:description is ignoring the manually written description and excerpts and is instead using the first paragraph of text. The twitter:description pulls the correct info though. Any suggestions on how to fix this?

Plugin slowing down products page a lot

Hello,

just switched to this plugin from YOAST-SEO and it is just soo much better :)
One problem I am facing on a big WooCommerce install is that the products page in the admin panel is really slowing down.
plugin off: TOTAL QUERIES: 82 TOTAL QUERY TIME: 26.0 ms
plugin active: TOTAL QUERIES: 124 TOTAL QUERY TIME: 930.5 ms

Seems like most the calls are like the following:

SELECT option_value FROM wp_options WHERE option_name = '_transient_timeout_tsf_tdir_0_1' LIMIT 1
WP_List_Table->display, WP_List_Table->display_rows_or_placeholder, WP_Posts_List_Table->display_rows, WP_Posts_List_Table->_display_rows, WP_Posts_List_Table->single_row, WP_List_Table->single_row_columns, WP_Posts_List_Table->column_default, do_action('manage_posts_custom_column'), AutoDescription_DoingItRight->seo_bar, AutoDescription_DoingItRight->post_status, AutoDescription_DoingItRight->the_seo_bar_page, AutoDescription_DoingItRight->the_seo_bar_title_notice, AutoDescription_DoingItRight->the_seo_bar_data, AutoDescription_DoingItRight->the_seo_bar_post_data, AutoDescription_Generate_Title->title, AutoDescription_Transients->set_theme_dir_transient, get_transient, get_option

p.s..: it is a fairly big shop ~ 25000 products * 2 languages and thousands of attributes

Could you please have a look at this or tell me if there is anything I can do to speed things up?

Thank you and all the best,
Lukas

Print meta information

Hello,

I'd like to add some of the meta information within other tags or display on the page itself..

How can I print the title and description, or any of the other fields.

E.G php bloginfo('description');

Thanks, Stephen

Meta Description for Custom Post Type Archive pages

Hello

It would be great if we where able to add meta descriptions in the backend for custom post type archive pages. Without description the archive page does not appear in the Sitelinks section in the Google results.

Thanks!
Aldo

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.