I'm excited to share this WordCamp Raleigh 2017 presentation on Social Meta Optimization. This presentation is for social media managers and digital marketers who want to learn how to optimize WordPress posts and pages as social objects to be shared in social media. You'll learn how to set a photo or video, title, description, and link for each post or page, so that your social shares communicate your message correctly.
This post feature the WordPress SEO for Beginners presentation slide deck for my talk at WordCamp Raleigh 2017. You'll also find a link to download the popular All in One SEO Pack Pro and a coupon code to get 50% off the subscription price.
Digital Strategy Works founder and WordPress Consultant and Trainer, Tony Zeoli, is coining the phrase, "WordPress Assembler" to describe the combined skillset of someone who builds websites with today's powerful theme frameworks and page building tools. While it's not yet a common term, it may become one as more people turn to theme frameworks to layout and style websites and blogs, while solving common design and development issues that are now baked into these powerful products.
Here are a few tips for you about using/uploading images to your WordPress site.
First, web browsers do not render 300 dpi, so for all you photo fanatics out there, stop uploading uncompressed 300 dpi images to your media library. A browser renders only 72 dpi regardless of the resolution of your images. Yep, I know it reduces image quality, but only to you! Remember, your perception is your reality. The person viewing your image online doesn’t care whether it’s 300 or 72. They just want to see the image. Sure, that doesn’t help photographers or art galleries much, so you’ll just need to go old school and FedEx your printed books instead, if you want your intended audience to see the full resolution image.
Second, reducing the dpi also reduces the file size. If you have 300 dots per in, then reducing it to 72 dpi is only going to help your website visitors download your images faster, especially over mobile phones. Remember that we all have finite mobile bandwidth, except those who pay for unlimited. That means you are burning up your website visitors mobile bandwidth allotment (if not on wifi) by not compressing your images. If I were looking at your photos, then waiting for them to download on my phone and it’s not fast, I would leave your site and go somewhere else. No one wants to wait for your huge images to download on their phone.
Third, you can certainly reduce the dpi and that will compress an image, but remember the physical landscape of the image itself should only be sized to what you need to display on the web. That’s probably around 1800 pixels. I’ve seen some clients upload photos that are over 3000 pixles wide! Resizing your images BEFORE you upload to your media library is important. Fortunately, WordPress now provides a resizing tool inside the Edit feature of your WordPress Media Library, so you can resize photos down. Note: Never resize photos up or you will literally be stretching the photo like a rubber band. That will stretch the pixels in the image and your image will look like crap. You always downsize. Never upsize!
Fourth, you can use a tool like WP Smush, which is a freemium plugin, to compress your images to the best possible size and resolution. When you install WP Smush, you can compresses up to 50 images at a time with the free version. You’ll have to keep clicking if you have more images to compress. It will also not compress images over 1MB, so to process all images and images over 1MB, you’ll have to upgrade to the paid version.
Fifth (and maybe it should have been first), under Settings > Media, you can set the sizes for Large, Small, and Thumbnail images when you upload them. WordPress will retain the original file, but also copy and store resized versions to select for posts/pages. While this does not “compress” the image, it does help with managing the sizes you want to set for your site.
Sixth, remember that PNG is for transparency. You might use PNG for a logo, a small icon, or some other small graphic that may have a special use case, like a drop shadow. Don’t use PNG for large photographic images. It adds data to the image and therefore increases the file size. If you have a photo, always used JPG. There’s no reason to use PNG for any photo.
Lastly, use a CDN (content delivery network) to speed up the delivery of images on your website. With plugins like W3 Total Cache or Super Cache, you can send your website’s image to servers around the globe for storage and retrieval at the “edge” of major cities, so that they are served quickly to your intended audience. If you’re using JetPack by Automattic, you can turn on Photon, which is powered by Automattic. Photo is the CDN employed by WordPress.com, so you can leverage Automattic resources to store your photos on servers around the world. The caveat here is that it most likely only store and serve images uploaded to your media library. If you have images in your theme’s folder, they may be ignored by whatever solution you use. You want to choose a theme that doesn’t store images in the theme folder, or they’ll just be forgotten. The’ll then show up on a Google Page Speed Insights report telling you they need to be compressed, but WP Smush only compresses images in your media library and not extraneous images in theme folders.
If you need additional custom image sizes, you can use a plugin like Simple Image Sizes to create additional settings for you to select when publishing posts/pages: https://wordpress.org/plugins/simple-image-sizes/
Here’s the link to download WP Smush:
Note: The Featured Image above is set to 624 KB and 1800 × 916. That means, it will size for most large screens and will automatically resize in mobile responsive for smaller screens. Compression will help the image load quickly on mobile devices.
For the past three months, I’ve tried my best not to have a mini meltdown over the fact that a number of my domains in a WordPress multisite network using Cloudflare’s free Universal SSL would not serve up a green padlock over HTTPS. When I first heard Cloudflare was offering free Universal SSL, I was very excited to take advantage of it. For some reason, it just wouldn’t work and for months, I couldn’t figure out why.
Now that Google is using HTTPS as a (minor) ranking signal, I want to make sure all my domains are using SSL. But even after enabling Universal SSL on Cloudflare for each domain, the one’s using the new service were void of the green padlock that tells the world each domain in my little network could be trusted. After struggling with it a bit to no avail, I thought I’d better buy a three site SSL certificate from my preferred domain name seller, Namecheap.com, for three of my most important domains. A temporary fix for 3 domains in an 11 domain multisite network.
After WP Engine installed the Commodo certificate for me, all three sites were instantly padlocked after. Since the others were not as much of a priority, I continued to ignore no green padlocks on them, but it just kept on nagging at me they weren’t locked.
It’s in my nature to incessantly focus on problems until resolved. While others might not care as much as I do or they pass the buck to someone else, I always go to the end of the earth (despite my better judgment) to figure it out myself. I don’t know why I’m like this. It’s a blessing in some ways, because I actually get things done–no matter what. It’s a curse in others, because I do it all myself and am so focused that it can take hours and hours of painstaking work to figure out the solution. In that, I’ve let the world go by while I’m trying to solve a problem I should pay someone to solve for me. But, then I’d have to give them all the passwords and account access to both my network install, Cloudflare, and WP Engine. Without a clear path to resolution, who knows how many hours someone could take to figure it out. And, who knows if you’re even talking to the right person who can figure it out.
Night after night, I would go back through my Cloudflare install and make sure all domains were set to Flexible SSL. Then I’d dump my cache at Cloudflare and in my WordPress WP Engine network admin. I tried a various plugins to see if the URLs did would not redirect and cause a loop. Nothing worked.
I made sure to get the Cloudflare plugin to connect my multisite network to the service, but I was getting some errors and I needed to research how to make sure the Cloudflare plugin connected via their API to my account. I turned off my Cloudflare service for all the domains that had no green padlocks. Of course, the API wouldn’t connect if they were off. I turned them all back on and made sure they were all set to Flexible SSL again. Once I solved that, I thought: “Great! Problem solved. My padlocks should be green!”
Nope, that didn’t happen.
After some lengthy discussions with WP Engine support on this matter, I learned I was getting a lot of mixed content and insecure content warnings on some of my domains in the network. Why? Because somehow my URLs had gotten rewritten either in the original migration from Linode to WP Engine or by some process or plugin. I’ll never know how that happened. Two of my sites were missing all of their content and their URLs were rewritten incorrectly for posts and pages in the database as “netmix-co.netmix.co” instead of “primarydomain.com/sitename.
Tasked with figuring out the underlying problem, I went in and performed search and replace surgery on all my domains using phpMyAdmin. I was able to go into my posts and post meta tables for each site in the network and find the incorrect rewritten paths. I simply replaced the incorrect ones with the correct domain names of each site in the network. That solved a ton of insecure content warnings and brought back all my missing content while also fixing redirection issues.
Having done all this, I was pretty confident I’d see the green padlocks, but when I checked whynopadlock.com, all the sites with Cloudflare Flexible SSL turned on were hard redirecting to http. I thought, “geez, now how do I solve this?”
Earlier that week, WP Engine had helped write some html post processing logic that is set in my multi-site’s WP Engine admin area. Could that be the culprit? I removed those rules to see if anything changed.
Nope, that didn’t work either.
In the middle of all of this, let’s throw in the fact that WP Engine had to move my web services to another IP address last week after their provider was hit with a DDOS attack. I was tasked with updating all 11 sites A Records in the network. I did and learned that one of my sites had no DNS records at all (Oy!), but was still resolving. Go figure.
I went back to WP Engine again to explain my dilemma again. Fortunately, I got in at 3 minutes to 9 pm Eastern time, just minutes before chat support closed up for the night. I gave one of WP Engine’s techs, Brian F., all the earlier detail. His head must have been spinning. But, he finally figured out that they had to manually force https on their end to enable the green padlock on all sites in my network.
Finally, it was over. After months of starts and stops and weeks of going back to it, getting distracted by family stuff and client work, I was able to sit down and go through everything once and for all. Problem solved.
While all the abovementioned things I did were important, Cloudflare did tell me in one response they were seeing WP Engine had the ability to do something on their end to fix this, but they didn’t say exactly what that was. With Universal SSL, WP Engine does not have to install a certificate. It’s a one-way call to WP Engine who do not have to confirm the request with an installed cert. What they didn’t say was that WP Engine has to manually force HTTPS. It wasn’t until Brian F. figured this out that the curse was finally over.
I did not use a Force HTTPS plugin, because I think WP Engine disallows a few of them. I don’t know that they would have worked anyway. I’m was happy to have WP Engine manually write that rule every for this instance and in the future. At any rate, the problem is resolved. On to the next issue.
I hope this helps someone not have to go through weeks of pain like I did to finally figure out that all WP Engine had to do was force HTTPS manually. That’s it. Problem solved.
The desktop app is pretty sweet and much faster than logging into your WordPress admin. Since it’s always there are the ready and you can switch sites easily (as long as you’ve connected all your self-hosted sites using WordPress.com username and password connected through JetPack), this new app for both Mac, which is what I’m using, and PC should increase your blogging output.
It’s a New Year and with this great new tool from WordPress, I should be able to churn out my thoughts on my blog, before I publish to a Facebook feed or a Twitter status update.
I’m going to try and be more dilligent about using the new WordPress desktop app to increase my blogging output, for sure.
Here are is my slide deck from my presentation at WordCamp Raleigh 2013 called, "Get Your Groove On - Powering Music Sites with WordPress." This video presentation will soon be up on WordCamp.tv.
Over lunch at Cafe Amrita on the Upper West Side, neighborbee founder, Anthony Lobosco and I met to discuss the vision for supercharging what was a simple blog with content about New York City neighborhoods into a hyper-local social community. A place where neighbors could freely post what they love about their communities and well, what they don’t love so much. Lobosco, a Fordham alum and telecom industry sales executive has had his share of stress as a New York City co-op owner. He believed that if people could just have a place to publish information down to the building level in major cities, it could be a transformative in many ways. And, oddly enough, we share the same first names. We’re both of Italian-American descent. My wife’s business has a bee in the name: Melibee Global. And, our wives first names are Melissa!
I had recently launched Digital Strategy Works, my digital strategy and WordPress consulting company out of my Bronxville apartment after spending one year at a web development agency in Farmingdale, NY. My wife and I had discussed my driving from Bronxville to Farmingdale everyday. While I spent some nights at one of the founders houses on Long Island, the 3-hour round-trip drives were taking their toll on my health and our relationship, so we decided that I would leave my job and take a risk on my own business.
Since 2003, I’d been publishing my music blog, Netmix.com on WordPress. Over the next 6-years, I engaged with the WordPress community, helping others with their issues in the WordPress.org forums while building my knowledge of the platform. As WordPress grew, opportunities to build WordPress sites for others started to come in. In the summer of 2009, about 9-months after I’d left my job, I signed an agreement with Anthony to build Neighborbee.com. I would project manage the site and hire developers in Boston for the build.
Anthony and I began to spend many nights drawing up the information architecture and business requirements documentation for the site. We used an office at Fordam University’s alumni association in Columbus Circle. I can’t recall how many nights we spent working out the documentation for the project, but it’s safe to say it was a lengthy process. We found that we got along quite well. Anthony was a solid client who understood the task at hand. I don’t think either of us knew what we would be in for, but with his vision spelled out and my ability to partner and drive development, we set forth on a path for success. That path was a 3-year journey, which finally came to an end, or should I say, new beginning, over the last few weeks. After 3-years of development, we finally launched neighborbee.com. In those 3-years, Anthony moved to Stamford and I moved to Chapel Hill, Carrboro, back to Chapel Hill and then to Winston-Salem. Anthony and his wife also had not one, but two babies! Imagine working full-time, building your start-up and having two children at the same time. Makes me exhausted just thinking about it.
Of course, Anthony and I could not do it alone. WordPress developers Jeffrey Marx, formerly of the Journal News in Westchester and CBS Local and now at Gilt Groupe and Michael McNeil, a student at UNC Chapel Hill who both have contributed a great deal to the growth and success of Digital Strategy Works, spent countless hours perfecting, cajoling and moving neighborbee in the right direction. While we’d started off with the web shop in Boston who shall remain nameless, given the negative experience we had with them, Jeff and Michael brought the right mix of experience, passion and creativity to the project.
We’d also gone through a couple of designers, but couldn’t seem to get the visual experience down to a web 2.0 look and feel, but Anthony brought on Chris Antonelle, a web graphic designer in NYC, who added the right mix of colors and style and brought it all together. We would have been finished last year, but we all agreed to let Chris do his magic and we’d implement the solutions. What you see today is the result of that effort.
Lastly, we needed someone to deal with content. While the neighborbee Dev team are gifted in their own ways, it was important to find someone who could shape the editorial voice of neighborbee as well as enhance our social media profiles on Facebook and Twitter. Anthony turned to Elance and found Julia Crenshaw-Smith, a freelance marketing and editorial consultant who we brought on to give neighborbee it’s, well, honey – if you will. Julia turned the site’s prior content into usable material to seed the network. Now, it’s up to the users of neighborbee, who can join with their zip code or address in NYC-only, to explore their neighborhoods and seed their hives with honey.
Yes, all this was done while working nights and weekends over the past two-years. I’d taken a job at UNC Chapel Hill School of Journalism and Mass Communication in July of 2010 to build out the digital presence of a $4M gift-funded newsroom to teach students digital journalism, social media and audience engagement. Through November 2011, I pitched in to manage the continued build out and revised graphical user interface. After a scandal at UNC, which saw my boss get canned for carrying on a relationship with a student resulting in a downsizing the program, I found a new opportunity at Market America in Greensboro, NC, where I am leading product development of an online music platform for artists, Getconquer.com. While the work that I am doing by day is very important, neighborbee has become – for me, a labor of love and dedication. The project is so important for many reasons, as it can really open up communication in neighborhoods and go into buildings, which local news organizations simply cannot cover.
Yes, it’s going to take a village. A village of bees, that is, to get neighborbee off to the start it so deserves. We’re looking forward to that user adoption and providing ways for users to really engage the site. The next step is obviously mobile and we have plans for that as well. And, we’re starting to build out funding strategy, putting together our pitch deck and submitting our application to pitch at New York Tech Meetup sometime soon!
So, without further adieu, I present the home page of neighborbee.com below. Let me know what you think by posting a comment here on my blog.
Wow, how time flies! It’s been well over a year since I gave this talk on WordPress & Social Media at the Brooklyn Technology Meetup. If you know me, you know I live and breathe WordPress through my digital strategy consultancy, Digital Strategy Works. While WordPress is not necessarily inherently social, there are a ton of tools for WordPress, like JetPack, which is a multi-feature plugin with a number of tools to help you site be social.
Here’s the video…
Over the past couple of days, I’d gotten a few phone calls from prospective clients who told me they were using the contact form on my Digital Strategy Works website to submit an inquiry about our services, but they hadn’t heard back from me. Huh, I wondered. Really? How could this be?
I did some preliminary investigating and there didn’t seem to be a problem with the Contact Form 7, which I use for my forms. WordPress itself and my server were running normally. After clicking around, it was time to test the form for myself.
I sent myself an email through the form and got back the following (removed the @ symbol to obfuscate address):
Hi. This is the qmail-send program at netmixsupport.co. I'm afraid I wasn't able to deliver your message to the following addresses. This is a permanent error; I've given up. Sorry it didn't work out. <az(at)tonyzeoli.com>: This address no longer accepts mail. --- Below this line is a copy of the message. Return-Path: <tonyzeoli(at)me.com> Received: (qmail 25887 invoked by uid 110); 13 Jan 2012 21:47:22 -0500 Delivered-To: 1-admin(at)netmix.co Received: (qmail 25882 invoked by uid 10001); 13 Jan 2012 21:47:22 -0500 To: admin(at)netmix.co Subject: tonyzeoli(at)me.com X-PHP-Originating-Script: 10001:class-phpmailer.php Date: Sat, 14 Jan 2012 02:47:22 +0000 From: "tonyzeoli(at)me.com" <tonyzeoli(at)me.com> Message-ID: <[email protected]> X-Priority: 3 X-Mailer: PHPMailer 5.1 (phpmailer.sourceforge.net) MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset="UTF-8" From: tonyzeoli(at)me.com <tonyzeoli(at)me.com> Subject: test Message Body: test -- This mail is sent via contact form on Digital Strategy Works http://netmix.co/digitalstrategyworks
I though, that’s odd. The qmail-send program should be sending an email from the server to the email address I’d set in the admin panel of the Contact Form 7 plugin. But, I was getting a bounce back to the email address I’d tested in the form, saying that the address I was sending to was undeliverable. Why was it undeliverable, when I get email to my tonyzeoli.com address all the time?
There were a couple of reasons. First, I am using Google’s hosted mail service to handle mail for a couple of my domains: tonyzeoli.com and tonyzeoli.com. Second, when I set up my WordPress network on MediaTemple VPS, I needed to add a “domain alias” for each domain name that would be included in the network. While I added Netmix.com and DigitalStrategyWorks.com to the MediaTemple administration panel, you’re required to access the root domain of your WordPress network and add those domain aliases.
My root domain is netmix.co and my domain aliases were added to that account in my control panel. The image below is a screenshot of the control panel. Under “Websites and Domains,” click the “Show Advanced Operations” text link at the mid point of the page, which will drop down an extended set of options. Highlighted in the red square is the link to “Domain Aliases,” where you can add or manage all of the alias domains you’re going to use in your WordPress network. Remember, just because you’ve added them in your MediaTemple account center, does not mean that they will work. They must be added as a domain alias in your primary domain’s control panel or none of your domains will resolve correctly in your network.
After you have clicked on the Domain Alias link, you can add the domain aliases. In the image below, you can see a list of domain aliases that I have added so that the domain mapping plugin for WordPress can redirect to each domain alias assigned under the primary domain.
Now, here’s what I found that was causing the inadvertent mail issue. Since I’m using Gmail hosted mail services for two of my domains, tonyzeoli.com and tonyzeoli.com, I am not using the qmail feature of the server to send email directly from the server. The two domains in question, tonyzeoli.com and tonyzeoli.com inherit the local functionality of the qmail server, but we don’t want that, because my email DNS entries are listed as Google’s and not MediaTemple’s. Aha! Therein lies the problem. The domains are not accepting mail, because they are set to use the local mail server and not the 3rd party Google hosted mail server!
If you are hosting your email through a 3rd party service and not using the local mail feature, you’re going to get this issue where mail cannot be delivered to the domain, because the server is trying to use local mail and not the Gmail system. How do you fix that? Easy, just click on any one of the domains that you’re hosting mail for using Google or another service, and then turn off the local mail service. Problem solved!